この章では、XQuery Mapperを使用してメッセージ・フローでデータ・トランスフォーメーションを実行する方法について説明します。
XQuery Mapperのグラフィカル・インタフェースでは、ソース・スキーマの要素をターゲット・スキーマの要素にマップして、データ・トランスフォーメーションを作成できます。XQuery MapperによりXQueryが作成され、 .xq ファイルとして保存されます。
次の項では、XQuery Mapperを使用してデータを変換する手順について説明します。
Oracle Enterprise Pack for EclipseのEclipseメニューで、「Window」→「Open Perspective」→「XQuery Transformation」を選択して、XQueryトランスフォーメーション・パースペクティブを開きます。
XQueryファイルを開くと、XQueryトランスフォーメーション・パースペクティブが自動的に起動します。ただし、XQuery Mapperが開いており、XQueryファイルが開いていない場合は、 XQueryトランスフォーメーション・パースペクティブを手動で起動する必要があります。
XQuery Mapperサンプル・プロジェクトにはサンプル・スキーマとXMLファイルが含まれています。第7章「例: XQuery Mapperを使用したデータ・トランスフォーメーション」の説明に従い、これらを使用してXQueryトランスフォーメーションを作成できます。
次の手順を実行して、サンプル・プロジェクトをインポートします。
Eclipseのメニュー・バーで「File」→「Import」を選択します。
Importウィンドウで「General」→「Existing Projects into Workspace」を選択し、「Next」をクリックします。
「Select root directory」フィールドで「Browse」をクリックして、「OSB_ORACLE_HOME/eclipse/plugins/com.bea.alsb.common.mapper_version/samples」というフォルダを選択します。「OK」をクリックします。
Importウィンドウで「Copy projects into workspace」を選択し、「Finish」をクリックします。
サンプル・プロジェクトの名前を入力し、「Finish」をクリックします。
サンプル・プロジェクトが作成され、プロジェクト・エクスプローラ・ビューに表示されます。プロジェクトには次のフォルダが含まれています。
「schemas」フォルダ: サンプル・プロジェクトのXMLスキーマ(.xsd)ファイルが含まれています。
「XML」フォルダ: 一部のサンプルで必要なテストXMLファイルが含まれています。
「XQueryTransformations」フォルダ: このフォルダにサンプルのXQueryファイルが作成されます。
プロジェクトの作成およびそれらのプロジェクトで必要なファイルのインポートの詳細は、以下のトピックを参照してください。
注意: プロジェクト固有のXMLスキーマ、Web Service Definition Language (WSDL)ファイル、およびメッセージ・フォーマット言語(MFL)ファイルを任意の場所からインポートできます。ビジネス・ニーズを満たすフォルダ構造を作成してからファイルをインポートしてください。詳細は、6.4項「スキーマ・ファイルのインポートと作成」を参照してください。 |
XQuery Mapperプロジェクトを作成するには:
「Window」→「Open Perspective」→「XQuery Transformation」を選択して、XQueryトランスフォーメーション・パースペクティブに切り替えます。
「File」→「New」→「Project」を選択します。
New Projectウィザードが開きます。
「General」→「Project」を選択し、「Next」をクリックします。
プロジェクト名を入力します。
「Use default location」チェック・ボックスが選択されていることを確認します。
「Finish」をクリックします。
スキーマ・ファイルは任意の場所に作成またはインポートできます。以下のスキーマ・タイプがサポートされています。
XSD (XML Schema Definition): XMLスキーマでXMLファイルのデータを記述および制限します。XQuery Mapperでは複数のネームスペースがサポートされています。たとえば、特定のネームスペースで有効な2つのソースXMLファイルのデータを、別のネームスペースで有効なXMLファイルに変換できます。
WSDL (Web Service Definition Language): WSDLファイルで定義されたXMLスキーマをデータ・トランスフォーメーションで使用できます。
MFL(メッセージ・フォーマット言語): MFLファイルで非XMLファイルのデータを記述および制限します(たとえば、COBOLコピーブックやC構造定義など)。MFL要素のネームスペースは、MFLファイル名から派生します。
MFLファイルは、フォーマット・ビルダー・ツールを使用して作成されます。拡張子は.mfl
です。
スキーマとMFLファイルをインポートするには:
「Window」→「Open Perspective」→「XQuery Transformation」を選択して、XQueryトランスフォーメーション・パースペクティブに切り替えます。
「Navigator」ビューで、XMLスキーマまたはMFLファイルをインポートするプロジェクトを選択します。
「File」→「Import」を選択します。
Importウィザードが表示されます。
XMLスキーマおよびMFLファイルを様々なソースからインポートできます。適切なソースを選択し、「Next」をクリックします。
必要なファイルを参照し、選択してから、「Finish」をクリックします。
インポートされたスキーマ・ファイルまたはMFLファイルは、New XQuery Transformationウィザードで使用できるようになります。
次の図に、New XQuery TransformationウィザードでのインポートされたXMLスキーマを示します。
XMLスキーマ・エディタを使用してXMLスキーマを作成できます。
「Window」→「Open Perspective」→「XQuery Transformation」を選択して、XQueryトランスフォーメーション・パースペクティブに切り替えます。
「Navigator」ビューで、スキーマ・ファイルを作成するプロジェクトを選択します。
「File」→「New」→「Other」を選択します。
「New」画面が表示されます。
「XML」ノードを展開します。
「XML Schema」を選択し、「Next」をクリックします。
スキーマ・ファイルを作成する親フォルダを選択します。
スキーマ・ファイルの名前を入力し、「Finish」をクリックします。
指定したプロジェクトにスキーマ・ファイルが作成されます。これで、スキーマの詳細を指定し、ファイルを保存できます。
XMLスキーマ・エディタの使用の詳細は、http://www.eclipse.org/webtools/community/tutorials/XMLSchemaEditor/XMLSchemaEditorTutorial.html
にある「XSDエディタの概要」を参照してください。
スキーマからXMLファイルを作成するには:
「Window」→「Open Perspective」→「XQuery Transformation」を選択して、XQueryトランスフォーメーション・パースペクティブに切り替えます。
「Navigator」ビューで、スキーマ・ファイルを作成するプロジェクトを選択します。
「File」→「New」→「Other」を選択します。
「New」画面が表示されます。
「XML」ノードを展開します。
「XML」を選択し、「Next」をクリックします。
「Create XML File」ダイアログ・ボックスが開きます。
「Create XML file from an XML schema file」オプションを選択し、「Next」をクリックします。
XMLファイルを作成する親フォルダを選択します。
XMLファイルの名前を入力し、「Next」をクリックします。
XMLファイルを作成する基になるXMLスキーマを選択し、「Next」をクリックします。
XMLファイルのルート要素を選択し、「Finish」をクリックします。
指定したフォルダにXMLファイルが作成されます。これで、ファイルの詳細を指定し、保存できます。
XMLエディタの使用の詳細は、http://www.eclipse.org/webtools/community/tutorials/XMLWizards/XMLWizards.html
にある「XMLファイル作成チュートリアル」を参照してください。
WSDLファイルを作成するには:
「Window」→「Open Perspective」→「XQuery Transformation」を選択して、XQueryトランスフォーメーション・パースペクティブに切り替えます。
「Navigator」ビューで、WSDLファイルを作成するプロジェクトを選択します。
「File」→「New」→「Other」を選択します。
Newウィザードが開きます。
「XML」ノードを展開し、「WSDL」を選択し、「Next」をクリックします。
WSDLファイルを作成する親フォルダを選択します。
WSDLファイルの名前を入力し、「Next」をクリックします。
WSDLファイルのターゲット・ネームスペースおよび接頭辞を入力します。
必要に応じて、「Create WSDL Skeleton」チェック・ボックスをオンにします。
プロトコルとバインディング・オプションを選択し、「Finish」をクリックします。
指定したプロジェクトにWSDLファイルが作成されます。
WSDLエディタの使用の詳細は、http://www.eclipse.org/webtools/community/tutorials/WSDLEditor/WSDLEditorTutorial.html
にある「WSDLエディタの概要」を参照してください。
データ・トランスフォーメーションを作成する前に、ソース・データ型とターゲット・データ型を定義する必要があります。ソースおよびターゲットの型には、非XML、XML、および単純データ型を指定できます。
ソースとターゲットのデータ型を選択するプロジェクトを選択します。
右クリックし、「New」→「XQuery Transformation」を選択します。
New XQuery Transformationウィザードが開きます。
.xqファイル名を入力します。
「次へ」をクリックします。
「Source Types」ダイアログ・ボックスが表示されます。
「Available Source Types」ペインで、ソース・データ型を選択します。
ソースがXMLデータの場合は、「XML」を選択します。
ソースがMFLデータの場合は、「Non-XML」を選択します。
ソース・データがboolean
、String
、int
などの標準型の場合は、「Simple」を選択します。
必要なソースのデータ要素を選択します。
注意: スキーマを「Available Source Types」ペインおよび「Available Target Types」ペインに表示するには、まずEclipseでこれらのスキーマを含むXMLファイルおよび非XMLファイルをインポートまたは作成する必要があります。 「Available Source Types」および「Available Target Types」ペインには、XQueryトランスフォーメーション・プロジェクトの/schemasフォルダに存在するスキーマのみが表示されます。スキーマを他のフォルダに格納するほうがよい場合は、プロジェクトのXMLBeansの設定で、そのフォルダのパスを指定する必要があります(「Project」→「Properties」を選択してから、「XMLBeans」ページの「Source Paths」タブを表示)。 |
たとえば、schemas/Dates.xsdから入力データを追加するには、次の図のように、スキーマでdate要素を入力要素として選択し、「Add」をクリックします。
「Selected Source Types」ペインに、選択した要素を構成している要素と属性が表示されます。
必要なソース型を選択したら、「Next」をクリックします。
「Target Types」ダイアログ・ボックスが表示されます。
「Available Target Types」ペインでターゲット・データ型を選択し、「Add」をクリックします。
「Selected Target Type」 ペインに、選択した要素を構成している要素と属性が表示されます。
注意: ターゲット・データ型は1つしか指定できません。 |
「Finish」をクリックします。
「Design」ビューに.xqファイルが表示されます。選択したソースとターゲットのデータ型が示されています。
以下の種類のデータ・トランスフォーメーションを実行できます。
基本的な要素トランスフォーメーション:ソース要素からターゲット要素へのマップ
基本的な属性トランスフォーメーション:ソース属性からターゲット属性へのマップ
複雑なトランスフォーメーション: 複雑なソース(たとえば、反復する要素)から複雑なターゲット(たとえば、非反復要素)へのマップ
基本的な要素トランスフォーメーションでは、ソース要素をターゲット要素にマップします。ソースとターゲットの要素には同じ名前、型、またはスコープを指定できる場合があります。
実行できる基本的な要素トランスフォーメーションの種類について、いくつかの例を以下に示します。
要素-要素: ソース要素がターゲット要素にマップされます。
要素結合: 複数のソース要素を結合して1つのターゲット要素を作成します。
要素分割: XQuery文字列関数を使用して、1つのソース要素を複数のターゲット要素に分割します。
要素-要素リンクを作成するには:
要素-要素リンクを作成するプロジェクトを選択し、トランスフォーメーションを格納するXQueryファイルを開きます。
「Source」ペインの必要な要素を「Target」ペインのターゲット要素にドラッグします。
たとえば、ソース・スキーマのcustomer-name
要素とターゲット・スキーマのcustomer-name
要素の間にリンクを作成するには、customer-name
を「Source」ペインから「Target」ペインにドラッグします。次の図のように、2つの要素間に矢印が表示されます。
必要な要素-要素リンクを作成したら、変更を保存します。
基本的な属性トランスフォーメーションでは、ソース属性をターゲット属性にマップします。ソースとターゲットの属性には同じ名前、型、またはスコープを指定できる場合があります。
基本的な属性トランスフォーメーションのいくつかの例を以下に示します。
要素-属性: ソース要素がターゲット属性にマップされます。
属性-要素: ソース属性がターゲット要素にマップされます。
属性-属性: ソース属性が、属性名が同じターゲット属性にマップされます。
属性-要素リンクを作成するには:
属性-要素リンクを作成するプロジェクトを選択し、トランスフォーメーションを格納するXQueryファイルを開きます。
「Source」ペインの必要な属性を「Target」ペインの適切な要素にドラッグします。
たとえば、ソース・スキーマのaddress
要素のstreet
属性とターゲット・スキーマのstreet
要素の間にリンクを作成するには、次の図のように、street
属性を「Source」ペインから「Target」ペインにドラッグします。
必要なリンクを作成したら、変更を保存します。
同様に、要素-属性リンクおよび属性-属性リンクを作成できます。
複雑なトランスフォーメーションでは、複雑なソース(たとえば、反復する要素)を複雑なターゲット(たとえば、非反復要素)にマップします。複雑なトランスフォーメーションのいくつかの例を次に示します。
反復グループ-反復グループ: ソースには要素のグループの可変個のインスタンスが含まれます。各ソース・インスタンスは、ターゲット・グループのインスタンスにマップされます。
反復グループ-非反復要素: ソースには要素のグループの可変個のインスタンスが含まれます。各ソース・インスタンスは、ターゲット要素のインスタンスにマップされます。
複雑なトランスフォーメーションを作成するには:
リンクを作成するプロジェクトを選択し、トランスフォーメーションを格納するXQueryファイルを開きます。
「Source」ペインの必要な要素または属性を「Target」ペインの適当な要素または属性にドラッグします。
たとえば、product
(ソース・スキーマの反復グループ)とproduct
(ターゲット・スキーマの反復グループ)の間にリンクを作成するには、次の図のように、product
を「Source」ペインから「Target」ペインにドラッグします。
必要なリンクを作成したら、変更を保存します。
「Design」ビューでデータ・トランスフォーメーションを作成した後は、「Source」ビューで直接コードを編集するか、「Design」ビューで複雑な式を追加して、XQueryコードを追加、変更、および削除できます。
この項では、以下のトピックを取り上げます。
XQueryファイルを編集するには:
編集するXQueryファイルが含まれているプロジェクトを選択します。
XQueryファイルをダブル・クリックします。
注意: XQueryファイルがXQuery 2002準拠である場合、ファイルは自動的にXQuery 2002トランスフォーメーション・エディタで開きます。これには「Source」ビューと「Test」ビューのみが含まれています。詳細は、5.2項「XQuery 2002および2004のサポート」を参照してください。 |
「Source」ビューを選択します。
XQueryコードが表示されます。無効なコードは赤い下線で示されます。
必要な変更を加えます。
注意: 必要に応じて、ルート要素を除く関数内のすべてのコードを削除することで、「Source」ビューでデータ・トランスフォーメーションを削除できます。 |
変更を保存します。
XQueryトランスフォーメーション・パースペクティブの「Constraints」ビューを使用すると、反復するソース要素とターゲット要素の間の関係を制限したり操作したりできます。
「Constraints」ビューには「Constraint Type」オプションがあります。
「Repeatability/Join」オプション
反復する要素の間にトランスフォーメーションを作成すると、要素を反復処理するためのforループが作成されます。「Constraints」ビューの「Where Clause」ペインでforループにwhere句を追加することにより、反復するターゲット要素に制限や制約を付けることができます。
次のサンプル・コードのように、where句に対する複合条件(ORまたはAND演算子で結合された条件)を作成できます。
((data($PurchaseOrderDoc/partId) > 200 and data($PurchaseOrderDoc/partId) <= 400))
実行時に、複合条件を満たす反復要素のみがforループで反復処理されます。
「Constraints」ビューの使用に関する詳細な例は、7.4項「反復ソースと非反復ターゲットの間のトランスフォーメーションの作成」を参照してください。
Union
7.3項「和集合の作成」を参照してください。
「Target Expression」 ビューでは、if-then-else式を作成できます。
if-then-else式を含む問合せが実行されると、if式を構成する条件が評価されます。結果に応じて、異なる値がターゲット・ノードに返されます。
図6-6に、次のロジックの実装に使用できるXQueryコードを示します。
quantity
ソース・ノードの値が500より大きい場合は、ID
ターゲット・ノードの値として4554が返されます。
quantity
が500以下の場合は、ID
として5894が返されます。
次の図のように、If条件に複数の式を追加できます。
条件を選択して「Move Up」または「Move Down」ボタンをクリックすると、条件の位置を変更できます。条件を選択して「Remove」をクリックすると、条件を削除できます。
注意: [編集: If条件]ペインでは、[削除]ボタンを使ってすべての式を削除した場合でも、[ソース]ビューのif-then-else式がすべて削除されるわけではありません。以下のコード・リストのように、if条件に関連付けられた式は削除されますが、thenおよびelseの式は保持されます。 <ns0:partId> { if (fn:boolean("true")) then 4554 else 5894 } </ns0:partId> XQueryでは常にthen式が返されます。else式はコード内に保持されるため、必要に応じて後から再利用できます。 |
詳細は、7.6項「ネストされたIf-Then-Else式の作成」を参照してください。
「Target Expression」ビューでは、次の図のように、FLWOR式を作成できます。
次の表に、FLWOR式の構成要素を示します。
表6-1 FLWOR式の句
構成要素 | 説明 | 省略可能/必須 | 許可されたネスト式 |
---|---|---|---|
For句 |
For句は一連の入力項目を反復処理し、項目ごとの値を返します。 |
最低1つのFor句またはLet句 |
|
Let句 |
Let句は変数を宣言し、その変数に値を代入します。 |
最低1つのFor句またはLet句 |
|
Where句 |
Where句は入力データを振り分ける基準を指定します。If句に似ています。 |
オプション |
|
Order By句 |
Order By句は問合せ出力を並べ換える基準を指定します。 |
オプション |
|
Return式 |
Return式は問合せの出力を定義します。 |
必須(1つのみ) |
|
For、Let、Order By、Returnの下にネストされた式を挿入するには、これらを右クリックし、メニューから必要な式を選択します。
注意: 「デザイン」ビューで、反復要素の間にリンクを作成すると、For...Return式(暗黙的なFLWOR式)が「ソース」ビューに自動的に生成されます。「制約」ビューを使用して、このFLWOR式にWhere句を追加できますが、Let句とOrder By句は追加できません。暗黙的なFLWOR式は「対象の式」ビューに表示されません。 |
詳細は、7.7項「FLWOR式の作成」を参照してください。
以下の状況では、Typeswitch式が必要になる場合があります。
XMLスキーマに<choice>要素が含まれており、<choice>宣言に定義されているいずれか1つの要素のみを含まれている要素に指定できる場合は、typeswitch式を使用して、ソースXMLファイルにある<choice>要素の型を判断し、これに応じて値を返します。
XMLスキーマに代替グループが含まれており、ある要素を別の要素に置き換えることができる場合は、typeswitch式を使用して、実際にソースXMLファイルにある要素の型を判断し、これに応じて値を返します。
「Target Expression」ビューでは、次の図のように、typeswitch式を作成できます。
表6-2に、typeswitch式の構成要素を示します。
XQuery Mapperには、W3C標準のXQuery関数と演算子のセットが用意されています。XQueryファイルおよびデータ・トランスフォーメーション・ファイルに、標準XQuery関数またはユーザー定義関数を追加できます。たとえば、upper-case XQuery String
関数を使用して、XML文字列値の文字を大文字に変換できます。
注意: XQueryおよびXPathの関数と演算子(W3Cの作業草案、2004年7月23日)の詳細は、 |
XQuery関数を挿入するには、次の手順を実行します。
「Window」→「Open Perspective」→「XQuery Transformation」を選択して、XQueryトランスフォーメーション・パースペクティブに切り替えます。
XQueryトランスフォーメーション・パースペクティブに「Expression Functions」ビューがあります。
XQuery関数を挿入するXQueryファイルを開きます。
「Design」ビューで、関数呼出しを追加するリンクを選択または作成します。
リンクが緑色になります。
「Target Expression」ビューを選択します。
「Target Expression」ビューが表示されていない場合は、「Window」→「Show View」→「Target Expression」を選択します。
「General Expression」ペインに、選択したターゲット・ノードとソース・ノードをリンクするXQueryコードが表示され、選択されます。このコードを選択したままにして、次の手順に進みます。
「General Expression」ペインで既存のXQueryコードを削除します。
「Expression Functions」ビューで挿入する関数を探します。
この例では、「String Functions」フォルダからupper-case関数を選択します。この関数はソース要素のすべての文字を大文字に変換します。
upper-case関数を「General Expression」ペインにドラッグします。
「General Expression」ペインで選択されている関数のパラメータ(この例では、upper-case関数の$string-var
パラメータ)を選択されたままにしておきます。
注意: Oracleによって定義されたXQuery関数(例: trim-left)にはfn-bea:という接頭辞が付いています。 「Expression Functions」ビューに表示されないXQuery関数でもXQuery仕様で定義されていれば、fn:接頭辞を付けて使用できます。 |
次のいずれかの方法で、関数のソース・パラメータを選択します。
「Design」ビューの「Source」ペインからソース要素を選択し、「General Expression」ペインの$string-var
パラメータの上にドラッグ・アンド・ドロップします。
「Expression Variables」ビューからソース変数を選択し、「General Expression」ペインの$string-var
パラメータの上にドラッグ・アンド・ドロップします。
必要な関数を挿入し、関数にパラメータを割り当てたら、「General Expression」ペインで「Apply」をクリックします。
XQueryで使用可能な変数とその下位要素は、「Expression Variables」ビューに表示されています。
注意: 「Expression Variables」ビューが表示されていない場合は、「Window」→「Show View」→「Expression Variables」を選択します。 |
「Expression Variables」ビューには、次の種類の変数が表示されます。
ソース: 「Expression Variables」ビューの「Source」ノードに表示されている変数は、New XQuery Transformationウィザードの「Source Types」ダイアログ・ボックスでトランスフォーメーションに選択された変数です。
構造的なリンク: 「Expression Variables」ビューの「Structural Link」ノードに表示されている変数は、構造的なリンクによって生成されたXQuery forループに関連付けられているループ反復変数です。
この変数のスコープは、構造的なリンクを持つノードのすべての下位要素です。
式の変数は、以下の方法で挿入できます。
ドラッグ・アンド・ドロップ
「Expression Variables」ビューから変数またはその下位要素をドラッグし、「Constraints」または「Target Expression」ビューにドロップします。
「$」を入力し、ポップアップ・メニューから変数を選択します。
ドル記号($)を必要なテキスト・フィールドに入力します。たとえば、「$」を「Target Expression」ビューの「General Expression」ペインに入力します。
使用可能な変数の一覧を含むポップアップ・メニューが表示されます。
必要な変数を選択し、フォワード・スラッシュ(/)を入力します。
下位要素がある場合、使用可能な下位要素の一覧を含むポップアップ・メニューが表示されます。
必要な下位要素を選択し、フォワード・スラッシュ(/)を入力します。
さらに下位要素がある場合、使用可能な下位要素の一覧を含むポップアップ・メニューが表示されます。
必要な変数の入力が完了するまで、前の手順を繰り返します。
「Design」ビューでXQueryファイルを編集するときに、「Properties」ビューを使用すると、ソースとターゲットのXSDまたはMFLファイルを開かずに、現在のトランスフォーメーション内のノードのスキーマ・プロパティを表示できます。
「Properties」ビューを表示するには、「Window」→「Show View」→「Properties」を選択します。
「Source」、「Target」または「Expression Variable」ビューで要素または属性を選択すると、関連するスキーマ・プロパティが「Properties」ビューに表示されます。
リンクを選択すると、そのリンクのターゲット要素とソース要素のスキーマ・プロパティが「Properties」ビューに表示されます。
リンクと、そのリンクのターゲット・ノードとソース・ノードを選択解除するには、「Design」ビューの「Source」ペインと「Target」ペインの間にあるペインで空いている場所をクリックします。
注意: 要素または属性のスキーマ・プロパティを変更するには、対応するスキーマ・ファイル(XMLスキーマの場合はXSD、非XMLスキーマの場合はMFL)を編集します。 |
データ・トランスフォーメーションのターゲット・スキーマにオプション要素(minOccurs="0"
)が含まれている場合は、値が存在する場合(つまり、ソースXMLファイルの要素が空でない場合)にのみ出力XMLファイルに要素が含まれるように、要素へのリンクをデザインできます。
次のコード・リストのソースXMLデータがあるとします。
例6-1 オプション要素を含むXMLデータ
<address> <Address_Line_1>1 Elm Street</Address_Line_1> <Address_Line_2/> <City>San Jose</city> <State>California</State> <Country>US</Country> </address>
Address_Line_2
要素はオプションであり、空です。Address_Line_2
がターゲット・スキーマの対応する要素にマップされた場合は、デフォルトで、出力XMLファイルには空のAddress_Line_2
要素が含まれます。
このようなオプション要素の出力を制限するには、次の図のように、リンクを右クリックし、「Remove Empty Node」を選択します。
リンクの基になるXQueryコードは、トランスフォーメーションの結果の値が空でない場合にのみターゲット要素を生成するif-then-else式に囲まれます。
if-then-else式を削除するには、次の図のように、リンクを右クリックし、「Retain Empty Node」を選択します。
注意: 「空のノードの削除」 (または「空のノードの保持」)オプションは、オプションのターゲット要素へのリンクを右クリックした場合にのみ表示されます。 |
「Design」ビューでXQueryトランスフォーメーションを作成したら、「Test」ビューで予期されたXMLまたは非XML出力が正しく生成されたかどうかをテストできます。
トランスフォーメーションのテストには、自動生成のXMLファイルまたはカスタムのXMLファイルおよび非XMLファイルを使用できます。
次の図に、「Test」ビューの機能を示します。
Source Variable
「Source Variables」リストに表示されている変数は、テストするトランスフォーメーションのソースXMLスキーマに基づいています。これらのスキーマのいずれかを選択すると、XMLファイルが自動生成され、表示されます。
注意: これらのXMLファイルは自動で保存されません。「エクスポート」アイコンをクリックすると、これらのファイルを保存できます。 トランスフォーメーションのテストにカスタムXMLファイル(自動生成XMLファイルのかわり)または非XMLファイル(MFLなど)を使用する場合は、「Import」アイコンをクリックするとファイルをインポートできます。 |
Generate Data
「Test」ビューを選択すると、XQuery Mapperによってサンプル・データの初期セットが生成され、「Source Data」ペインに表示されます。
サンプル・データを再生成するには、「Generate Data」をクリックします。たとえば、編集を行った結果、XMLデータが入力スキーマに対して無効になった場合に、新しいサンプル・データでテストをやり直す必要があります。
テスト対象のXQueryに複数のソース型が含まれている場合は、「Source Variable」リストで必要なソース型を選択し、「Generate Data」アイコンをクリックして、各ソース型のサンプル・データを生成できます。
生成されたXMLデータを手動で編集することもできます。
注意: 複合入力スキーマの場合、生成されるXMLデータがスキーマに準拠していないこともあります。検証エラーには、「ソース・データ」タブで黄色の下線が付きます。エラーの上にマウス・ポインタを置くと、エラーの詳細が表示されます。入力スキーマに準拠するように、生成されたXMLデータを修正することができます。 |
Import File
XML (または非XML)ファイルのデータをインポートし、そのデータを使用してトランスフォーメーションをテストできます。
また、テスト対象のXQueryに複数のソース型が含まれている場合は、「Source Variable」リストで必要なソース型を選択し、「Import File」アイコンをクリックして、各ソース型のサンプル・データをインポートできます。
「Auto Validate」オプションが選択されている場合は、データをインポートするときに、関連付けられたスキーマに対してデータが検証されます。エラーは黄色い下線で示されます。エラーの上にマウス・ポインタを置くと、エラーの詳細が表示されます。
注意: グローバル・タイプまたはローカル要素のXMLデータをインポートできますが、グローバル・タイプまたはローカル要素は検証されず、無効なデータのエラーや警告のレポートは生成されません。詳細は、6.11項「XMLのグローバル要素、グローバル型、ローカル要素、および属性」を参照してください。 |
Export to File: 「Source Data」ペインのデータまたは「Result Data」ペインのトランスフォーメーションの結果をXMLファイルに保存できます。
Test XQuery: このオプションを選択すると、「Source Data」ペインのデータに対してXQueryが実行され、「Results Data」ペインにトランスフォーメーションの結果が表示されます。
デザイン時の検証オプション
「Source Data」ペインの「Auto Validate」オプションと「Result Data」ペインの「Validate」オプションは、ソース・パラメータまたは結果データがXMLグローバル要素の場合にのみ有効になります。
以下のデータ型の場合、検証オプションは無効です。
型なし非XML
注意: 型なしの非XML (ロー)データはデータ・トランスフォーメーションで一切使用できません。 |
XMLグローバル型
XMLローカル要素
詳細は、6.11項「XMLのグローバル要素、グローバル型、ローカル要素、および属性」を参照してください。
「Auto Validate」オプションを選択すると、データが変更されるたびにソース・データがソース・スキーマに対して自動的に検証されます。
「Validate」オプションを使用すると、トランスフォーメーションの結果をターゲット・スキーマに対して検証できます。
注意: 「テスト」ビューでデザイン時に行う検証は、実行時に行われるスキーマ検証とは異なります。デザイン時の検証では結果のXMLドキュメントは変更されません。ただし、スキーマで要求される要素および属性の定義に関するチェックが行われます。 |
この項では、XQuery Mapperのグラフィカルな機能や、XQuery Mapperの「Design」ビューのグラフィカルな表現を使用するために役立つ情報について説明します。
次の表に、リンクまたは要素を右クリックしたときにXQuery Mapperの「Design」ビューで使用できるオプションの一覧を示します。
表6-3 右クリック・メニュー・オプション
メニュー・オプション | 表示するには | 結果 |
---|---|---|
View Code |
任意のリンクまたはターゲット要素を右クリック |
「Source」ビューに表示が切り替わり、リンクのXQueryコードが選択されます。 |
Create Constant |
任意の単純型のターゲット要素を右クリック |
ターゲット要素に定数値を割り当てます。 |
「ターゲット・ノードの無効化」 |
任意のリンクまたはターゲット要素を右クリック |
選択したリンクのXQueryコードの周りにブロック用のXQueryコードが追加されます。ブロック・コードによって実行時にリンクのXQueryコードが実行されなくなります。 注意: 「Disable Target Node」メニュー・オプションはターゲット型のルート・ノードでは使用できません。 |
「ターゲット・ノードの有効化」 |
無効なリンクまたはターゲット要素を右クリック |
選択したリンクからブロック用のXQueryコードが削除されて、実行時にリンクのXQueryコードが実行されます。 |
「空のノードの削除」 |
オプションのターゲット要素へのリンクを右クリック |
トランスフォーメーションの結果の値が空でない場合にのみターゲット要素を生成するif-then-else式でリンクが囲まれます。 |
「空のノードの保持」 |
すでに「Remove Empty Node」オプションが選択されている(オプションのターゲット要素への)リンクを右クリックします。 |
トランスフォーメーションの結果の値が空でない場合にのみターゲット要素を生成するif-then-else式を削除します。 |
「ワイルドカード・ノードの再定義」 |
ソースまたはターゲットのワイルドカード要素(any型)を右クリックします。 |
ワイルドカード要素の特定のデータ型を指定します。 注意: ワイルドカード・ノードを再定義(つまり、特定のデータ型を定義)した後に、[Ctrl]+[Z]を使用してany型に戻すことはできません。 |
「ワイルドカード・ノードに戻す」 |
すでに「Redefine Wildcard Node」オプションを使用して特定のデータ型を指定した、ソースまたはターゲットのワイルドカード要素(any型)を右クリックします。 |
要素のデータ型が以前指定した特定の型からワイルドカード(any型)に変更されます。 |
Induce Map |
構造的なリンクを右クリックします。 |
リンクのソースおよびターゲットの子要素が同じサブスキーマ型を持つ場合、選択した構造的なリンクの子ノード間にデータ・リンクまたはデータの構造的なリンクが作成されます。 注意: 「Induce Map」オプションで子リンクを作成するには、ターゲットとソースの子要素が同じ名前とデータ型を持ち、同じ順序である必要があります。 |
Delete Link |
任意のリンクを右クリックします。 |
|
「すべてのリンクを削除」 |
「Source」ペインと「Target」ペインの間にあるペインの空いている場所を右クリックします。 |
注意: 「Source」ペインと「Target」ペインの間にあるペインの空いている場所を右クリックすると、すべてのノードの選択が解除されます。 |
XQuery Mapperでは、リンクの異なる種類を区別しやすくするため、様々な色とパターンのリンクが表示されます。次の表に、XQuery Mapperで作成されるリンクのグラフィカルな表現を示します。
表6-4 リンクのパターン
リンクのタイプ | 説明 | 表現 |
---|---|---|
データ・リンク |
ソース・ノードの値をターゲット・ノードの値に直接変換するリンク。 |
リンクが選択されていません。 リンクが選択されています。 |
暗黙的なリンク |
基になるXQueryコードが変更されたデータ・リンク。 XQueryコードがXQuery Mapperによって解釈できないリンク。 例:
|
リンクが選択されていません。 リンクが選択されています。 |
構造的なリンク |
データを直接マップしない、2つの親構造の間のリンク。 |
リンクが選択されていません。 リンクが選択されています。 |
データ構造的なリンク |
データの構造的なリンクは、データ・リンクと構造的なリンクを組み合せたものです。 例{: 反復要素のオプションの子要素の間のリンク。 |
リンクが選択されていません。 リンクが選択されています。 |
制約リンク |
ソースの親構造間の結合の結果データに制約や制限を付けるリンク。制約リンクは2つのソース・ノードで作成されます。 例: 特定のソース要素の値が互いに等しい場合にのみデータを返す2つのソース反復要素の結合。 |
リンクが選択されていません。 リンクが選択されています。 |
コピー・リンク |
2つの同一のスキーマ・サブ構造の間のリンク。実行時に、ソース・データはターゲット・データにブロックごと直接コピーされます。 型なしのXMLノードと型付きのXML複合型ノードの間のマッピングを行うと、コピー・リンクも生成されます。 |
リンクが選択されていません。 リンクが選択されています。 |
「Source」ペインのノードを「Target」 ペインにドラッグすると、2つのノードの間に一時的なリンク(破線)が表示されます。線の色は、ソース・ノードとターゲット・ノードの間の互換性によって変わります。
赤色: ソース・ノードとターゲット・ノードの間にリンクは作成できません。これは、ターゲット・ノードのデータ型をソース・ノードのデータ型に変換できないためです。たとえば、データ型がXML Stringであるノードは、反復するXMLノードに変換できません。ソース・ノードをターゲット・ノードにドラッグすると、エラー・メッセージが表示されます。
オレンジ色: ソース・ノードとターゲット・ノードの間にリンクを作成できますが、データ型に完全な互換性はありません。ソース・ノードをターゲット・ノードにドラッグすると、非互換性または必要な変換を示す警告メッセージが表示されます。
緑色: ソース・ノードとターゲット・ノードの間にリンクを作成できます。ターゲット・ノードのデータ型は、ソース・ノードのデータ型と互換性があります。
リンクの作成が完了すると、ターゲット・ノードとソース・ノードに応じて、破線または実線が表示されます。
XMLスキーマ型または要素は、schema
要素の直接の子である場合はグローバル、schema
要素の直接の子でない場合(他の要素にネストされている場合)はローカルと見なされます。
次のXMLスキーマの例で、この違いを示します。
例6-2 グローバル要素とローカル要素を含むXMLスキーマ
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.acme.org/globalExample" xmlns="http://www.acme.org/globalExample" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="globalElement"> <xs:complexType> <xs:sequence> <xs:element name="localElement" minOccurs="1" maxOccurs="1" type="xs:string" /> </xs:sequence> <xs:attribute name="attribute" type="xs:string" use="required"/> </xs:complexType> </xs:element> <xs:complexType name="globalType"> <xs:sequence> <xs:element name="anotherLocalElement" minOccurs="0" maxOccurs="unbounded" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:schema>
上のXMLスキーマの例では、globalElement
はschema
要素の直接の子であるためグローバルです。localElement
はglobalElement
の子であるためローカルです。
上のXMLスキーマの下のほうにあるglobalType
要素のように、グローバル・タイプを定義することもできます。XMLスキーマに含めることのできるグローバル要素は1つだけですが、単一のXMLスキーマ内に同じグローバル・タイプを持つ複数の要素を(異なる名前で)宣言できます。
表6-5に、これらの異なるXML構成要素のXQuery Mapperにおけるグラフィカルな表現を示します。