|
XQuery Mapper のグラフィカル インタフェースでは、ソース スキーマの要素をターゲット スキーマの要素にマップして、データ トランスフォーメーションを作成できます。XQuery Mapper により XQuery が作成され、.xq
ファイルとして保存されます。
次の節では、XQuery Mapper を使用してデータを変換する手順について説明します。
[ワークスペース ランチャー] ダイアログ ボックスが表示されます。
注意 : | 必要に応じて、[この選択をデフォルトとして使用し、今後この質問を表示しない] チェック ボックスを選択し、[OK] をクリックします。 |
XQuery ファイルを開くと、XQuery トランスフォーメーション パースペクティブが自動的に起動します。ただし、XQuery Mapper が開いており、XQuery ファイルが開いていない場合は、XQuery トランスフォーメーション パースペクティブを手動で起動する必要があります。
XQuery Mapper サンプル プロジェクトにはサンプル スキーマと XML ファイルが含まれています。「例 : XQuery Mapper を使用したデータ トランスフォーメーション」の説明に従い、これらを使用して XQuery トランスフォーメーションを作成できます。
XQuery トランスフォーメーション パースペクティブの内部からウィザードを使用して、サンプル プロジェクトを作成できます。
プロジェクトの作成およびそれらのプロジェクトで必要なファイルのインポートの詳細については、以下のトピックを参照してください。
注意 : | プロジェクト固有の XML スキーマ、Web Service Definition Language (WSDL) ファイル、およびメッセージ フォーマット言語 (MFL) ファイルを任意の場所からインポートできます。 ビジネス ニーズを満たすフォルダ構造を作成してからファイルをインポートすることをお勧めします。詳細については、「スキーマ ファイルのインポートと作成」を参照してください。 |
スキーマ ファイルは任意の場所に作成またはインポートできます。以下のスキーマ タイプがサポートされています。
MFL ファイルは Format Builder ツールで作成され、拡張子 .mfl
が付けられます。詳細については、Format Builder のオンライン ヘルプを参照してください。
インポートされたスキーマ ファイルまたは MFL ファイルは、[新しい XQuery トランスフォーメーション] ウィザードで使用できるようになります。
次の図に、[新しい XQuery トランスフォーメーション] ウィザードでのインポートされた XML スキーマを示します。
XML スキーマ エディタを使用して XML スキーマを作成できます。
指定したプロジェクトにスキーマ ファイルが作成されます。これで、スキーマの詳細を指定し、ファイルを保存できます。
XML スキーマ エディタの使用の詳細については、
http://www.eclipse.org/webtools/community/tutorials/XMLSchemaEditor/XMLSchemaEditorTutorial.html にある「Introduction to the XSD Editor」を参照してください。
[XML ファイルの作成] ダイアログ ボックスが開きます。
XML ファイルが指定のフォルダに作成されます。 これで、ファイルの詳細を指定し、保存できます。
XML エディタの使用の詳細については、http://www.eclipse.org/webtools/community/tutorials/XMLWizards/XMLWizards.html にある「Creating XML files Tutorial」を参照してください。
WSDL エディタの使用の詳細については、http://www.eclipse.org/webtools/community/tutorials/WSDLEditor/WSDLEditorTutorial.html にある「Introduction to the WSDL Editor」を参照してください。
Format Builder ツール ([スタート|プログラム|Oracle WebLogic Integration|WebLogic Integration 10gR3|Format Builder]) を使用すると、MFL ファイルを作成できます。
Format Builder ツールの詳細については、Format Builder のオンライン ヘルプを参照してください。
データ トランスフォーメーションを作成する前に、ソース データ型とターゲット データ型を定義する必要があります。ソースおよびターゲットの型には、非 XML、XML、および単純データ型を指定できます。
[新しい XQuery トランスフォーメーション] ウィザードが開きます。
.xq
ファイル名を入力します。注意 : | スキーマを [使用可能なソースの型] ペインおよび [使用可能な対象の型] ペインに表示するには、まず Workshop でこれらのスキーマを含む XML ファイルおよび非 XML ファイルをインポートまたは作成する必要があります。 |
注意 : | [使用可能なソースの型] および [使用可能な対象の型] ペインには、XQuery トランスフォーメーション プロジェクトの schemas フォルダに存在するスキーマのみが表示されます。スキーマを他のフォルダに格納するほうがよい場合は、プロジェクトの XMLBeans の設定で、そのフォルダのパスを指定する必要があります ([プロジェクト|プロパティー] を選択してから、[XMLBean] ページの [ソース パス] タブを表示)。 |
たとえば、schemas/Dates.xsd
から入力データを追加するには、次の図のように、スキーマで date
要素を入力要素として選択し、[追加] をクリックします。
[選択されたソースの型] ペインに、選択した要素を構成している要素と属性が表示されます。
[選択された対象の型] ペインに、選択した要素を構成している要素と属性が表示されます。
注意 : | ターゲット データ型は 1 つしか指定できません。 |
デザイン ビューに .xq
ファイルが表示されます。選択したソースとターゲットのデータ型が示されています。
以下の種類のデータ トランスフォーメーションを実行できます。
基本的な要素トランスフォーメーションでは、ソース要素をターゲット要素にマップします。ソースとターゲットの要素には同じ名前、型、またはスコープを指定できる場合があります。
実行できる基本的な要素トランスフォーメーションの種類について、いくつかの例を以下に示します。
XQuery ファイルが「ソースとターゲットのデータ型の選択」に従って作成されている。
たとえば、ソース スキーマの customer-name
要素とターゲット スキーマの customer-name
要素の間にリンクを作成するには、customer-name
を [ソース] ペインから [対象] ペインにドラッグします。 次の図のように、2 つの要素間に矢印が表示されます。
注意 : | [ソース] ペインから [対象] ペインへのドラッグ時、2 つの要素の間には一時的な破線が表示されます。 リンク パターンの詳細については、「リンクのパターン」を参照してください。 |
基本的な属性トランスフォーメーションでは、ソース属性をターゲット属性にマップします。ソースとターゲットの属性には同じ名前、型、またはスコープを指定できる場合があります。
基本的な属性トランスフォーメーションのいくつかの例を以下に示します。
XQuery ファイルが「ソースとターゲットのデータ型の選択」に従って作成されている。
同様に、要素-属性リンクおよび属性-属性リンクを作成できます。
複雑なトランスフォーメーションでは、複雑なソース (たとえば、反復する要素) から複雑なターゲット (たとえば、非反復要素) にマップします。複雑なトランスフォーメーションのいくつかの例を以下に示します。
XQuery ファイルが「ソースとターゲットのデータ型の選択」に従って作成されている。
デザイン ビューでデータ トランスフォーメーションを作成した後は、ソース ビューで直接コードを編集するか、デザイン ビューで複雑な式を追加して、XQuery コードを追加、変更、および削除できます。
注意 : | XQuery 言語の詳細については、http://www.w3.org/XML/Query を参照してください。 |
注意 : | XQuery ファイルが XQuery 2002 準拠である場合、ファイルは自動的に XQuery 2002 トランスフォーメーション エディタで開きます。これにはソース ビューとテスト ビューのみが含まれています。 詳細については、「XQuery 2002 および 2004 のサポート」を参照してください。 |
XQuery コードが表示されます。無効なコードは赤い下線で示されます。
注意 : | 必要に応じて、ルート要素を除く関数内のすべてのコードを削除することで、ソース ビューでデータ トランスフォーメーションを削除できます。 |
XQuery トランスフォーメーション パースペクティブの [制約] ビューを使用すると、反復するソース要素とターゲット要素の間の関係を制限したり操作したりできます。
[制約] ビューでは、以下の [制約の種類] オプションを使用できます。
反復する要素の間にトランスフォーメーションを作成すると、要素を反復処理するための for
ループが作成されます。 [制約] ビューの [Where 句] ペインで for
ループに where
句を追加することにより、反復するターゲット要素に制限や制約を付けることができます。
次のサンプル コードのように、where
句に対する複合条件 (OR または AND 演算子で結合された条件) を作成できます。
((data($PurchaseOrderDoc/partId) > 200 and data($PurchaseOrderDoc/partId) <= 400))
実行時に、複合条件を満たす反復要素のみが for
ループで反復処理されます。
[制約] ビューの使用に関する詳細な例については、「反復ソースと非反復ターゲットの間のトランスフォーメーションの作成」を参照してください。
「和集合の作成」を参照してください。
[対象の式] ビューでは、if-then-else 式を作成できます。
if-then-else 式を含むクエリが実行されると、if
式を構成する条件が評価されます。 結果に応じて、異なる値がターゲット ノードに返されます。
図 2-9 に、以下のロジックの実装に使用できる XQuery コードを示します。
条件を選択して [上へ移動] または [下へ移動] ボタンをクリックすると、条件の位置を変更できます。 条件を選択して [削除] をクリックすると、条件を削除できます。
注意 : | [編集 : If 条件] ペインでは、[削除] ボタンを使ってすべての式を削除した場合でも、ソース ビューの if-then-else 式がすべて削除されるわけではありません。以下のコード リストのように、if 条件に関連付けられた式は削除されますが、then および else の式は保持されます。 |
注意 : | <ns0:partId> |
注意 : | XQuery では常に then 式が返されます。else 式はコード内に保持されるため、必要に応じて後から再利用できます。 |
詳細については、「ネストされた If-Then-Else 式の作成」を参照してください。
[対象の式] ビューでは、次の図のように、FLWOR 式を作成できます。
For、Let、Order By、Return の下にネストされた式を挿入するには、これらを右クリックし、メニューから必要な式を選択します。
注意 : | デザイン ビューで、反復要素の間にリンクを作成すると、For...Return 式 (暗黙的な FLWOR 式) がソース ビューに自動的に生成されます。[制約] ビューを使用して、この FLWOR 式に Where 句を追加できますが、Let 句と Order By 句は追加できません。暗黙的な FLWOR 式は [対象の式] ビューに表示されません。 |
詳細については、「FLWOR 式の作成」を参照してください。
以下の状況では、Typeswitch 式が必要になる場合があります。
[対象の式] ビューでは、次の図のように、typeswitch 式を作成できます。
XQuery Mapper には、W3C 標準の XQuery 関数と演算子のセットが用意されています。 XQuery ファイルおよびデータ トランスフォーメーション ファイルに、標準 XQuery 関数またはユーザ定義関数を追加できます。 たとえば、upper-case
XQuery String
関数を使用して、XML 文字列値の文字を大文字に変換できます。
注意 : | XQuery 1.0 および XPath 2.0 の関数と演算子の詳細 (W3C の作業草案、2004 年 7 月 23 日) については、http://www.w3.org/TR/2004/WD-xpath-functions-20040723/ を参照してください。 |
XQuery トランスフォーメーション パースペクティブに [式の関数] ビューがあります。
[対象の式] ビューが表示されていない場合は、[ウィンドウ|ビューの表示|対象の式] を選択します。
[一般式] ペインに、選択したターゲット ノードとソース ノードをリンクする XQuery コードが表示され、選択されます。このコードを選択したままにして、次の手順に進みます。
この例では、String Functions フォルダから upper-case
関数を選択します。この関数はソース要素のすべての文字を大文字に変換します。
upper-case
関数を [一般式] ペインにドラッグします。
[一般式] ペインで選択されている関数のパラメータ (この例では、upper-case
関数の $string-var
パラメータ) を選択されたままにしておきます。
注意 : | Oracle によって定義された XQuery 関数 (例 : trim-left ) には fn-bea: というプレフィックスが付いています。 |
注意 : | [式の関数] ビューに表示されない XQuery 関数でも XQuery 仕様で定義されていれば、fn: プレフィックスを付けて使用できます。 |
XQuery で使用可能な変数とその下位要素は、[式の変数] ビューに表示されています。
注意 : | [式の変数] ビューが表示されていない場合は、[ウィンドウ|ビューの表示|式の変数] を選択します。 |
デザイン ビューで XQuery ファイルを編集するときに、[プロパティ] ビューを使用すると、ソースとターゲットの XSD または MFL ファイルを開かずに、現在のトランスフォーメーション内のノードのスキーマ プロパティを表示できます。
[プロパティ] ビューを表示するには、[ウィンドウ|ビューの表示|プロパティ] を選択します。
注意 : | 要素または属性のスキーマ プロパティを変更するには、対応するスキーマ ファイル (XML スキーマの場合は XSD、非 XML スキーマの場合は MFL) を編集します。 |
データ トランスフォーメーションのターゲット スキーマにオプション要素 (minOccurs="0"
) が含まれている場合は、値が存在する場合 (つまり、ソース XML ファイルの要素が空でない場合) にのみ出力 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
要素が含まれます。
このようなオプション要素の出力を制限するには、次の図のように、リンクを右クリックし、[空のノードの削除] を選択します。
リンクの基になる XQuery コードは、トランスフォーメーションの結果の値が空でない場合にのみターゲット要素を生成する if-then-else 式に囲まれます。
if-then-else 式を削除するには、次の図のように、リンクを右クリックし、[空のノードの保持] を選択します。
注意 : | [空のノードの削除] (または [空のノードの保持]) オプションは、オプションのターゲット要素へのリンクを右クリックした場合にのみ表示されます。 |
デザイン ビューで XQuery トランスフォーメーションを作成したら、テスト ビューで予期された XML または非 XML 出力が正しく生成されたかどうかをテストできます。
トランスフォーメーションのテストには、自動生成の XML ファイルまたはカスタムの XML ファイルおよび非 XML ファイルを使用できます。
[ソース変数] ドロップダウン リストに表示されている変数は、テストするトランスフォーメーションのソース XML スキーマに基づいています。これらのスキーマのいずれかを選択すると、XML ファイルが自動生成され、表示されます。
注意 : | これらの XML ファイルは自動で保存されません。[エクスポート] アイコンをクリックすると、これらのファイルを保存できます。 |
注意 : | トランスフォーメーションのテストにカスタム XML ファイル (自動生成 XML ファイルの代わり) または非 XML ファイル (MFL など) を使用する場合は、[インポート] アイコンをクリックするとファイルをインポートできます。 |
テスト ビューを選択すると、XQuery Mapper によってサンプル データの初期セットが生成され、[ソース データ] ペインに表示されます。
サンプル データを再生成するには、[データの生成] をクリックします。 たとえば、編集を行った結果、XML データが入力スキーマに対して無効になった場合に、新しいサンプル データでテストをやり直す必要があります。
テスト対象の XQuery に複数のソース型が含まれている場合は、[ソース変数] ドロップダウン リストで必要なソース型を選択し、[データの生成] アイコンをクリックして、各ソース型のサンプル データを生成できます。
注意 : | 複合入力スキーマの場合、生成される XML データがスキーマに準拠していないこともあります。検証エラーには、[ソース データ] タブで黄色の下線が付きます。エラーの上にマウス ポインタを置くと、エラーの詳細が表示されます。入力スキーマに準拠するように、生成された XML データを修正することができます。 |
XML (または非 XML) ファイルのデータをインポートし、そのデータを使用してトランスフォーメーションをテストできます。
また、テスト対象の XQuery に複数のソース型が含まれている場合は、[ソース変数] ドロップダウン リストで必要なソース型を選択し、[ファイルのインポート] アイコンをクリックして、各ソース型のサンプル データをインポートできます。
[自動検証] オプションが選択されている場合は、データをインポートするときに、関連付けられたスキーマに対してデータが検証されます。 エラーは黄色い下線で示されます。 エラーの上にマウス ポインタを置くと、エラーの詳細が表示されます。
注意 : | グローバル タイプまたはローカル変数の XML データをインポートできますが、グローバル タイプまたはローカル変数は検証されず、無効なデータのエラーや警告のレポートは生成されません。 詳細については、「XML のグローバル要素、グローバル型、ローカル要素、および属性」を参照してください。 |
[ソース データ] ペインの [自動検証] オプションと [結果データ] ペインの [検証] オプションは、ソース パラメータまたは結果データが XML グローバル要素の場合にのみ有効になります。
注意 : | 型なしの非 XML (ロー) データはデータ トランスフォーメーションで一切使用できません。 |
詳細については、「XML のグローバル要素、グローバル型、ローカル要素、および属性」を参照してください。
[自動検証] オプションを選択すると、データが変更されるたびにソース データがソース スキーマに対して自動的に検証されます。
[検証] オプションを使用すると、トランスフォーメーションの結果をターゲット スキーマに対して検証できます。
注意 : | テスト ビューでデザイン時に行う検証は、実行時に行われるスキーマ検証とは異なります。 デザイン時の検証では結果の XML ドキュメントは変更されません。ただし、スキーマで要求される要素および属性の定義に関するチェックが行われます。 |
この節では、XQuery Mapper のグラフィカルな機能や、XQuery Mapper のデザイン ビューのグラフィカルな表現を使用するために役立つ情報について説明します。
次の表に、リンクまたは要素を右クリックしたときに XQuery Mapper のデザイン ビューで使用できるオプションの一覧を示します。
XQuery Mapper では、リンクの異なる種類を区別しやすくするため、さまざまな色とパターンのリンクが表示されます。 次の表に、XQuery Mapper で作成されるリンクのグラフィカルな表現を示します。
[ソース] ペインのノードを [対象] ペインにドラッグすると、2 つのノードの間に一時的なリンク (破線) が表示されます。 線の色は、ソース ノードとターゲット ノードの間の互換性によって変わります。
リンクの作成が完了すると、ターゲット ノードとソース ノードに応じて、破線または実線が表示されます。
XML スキーマ型または要素は、schema
要素の直接の子である場合はグローバル、schema
要素の直接の子でない場合 (他の要素にネストされている場合) はローカルと見なされます。
<?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 スキーマ内に同じグローバル タイプを持つ複数の要素を (異なる名前で) 宣言できます。
次の表に、これらの異なる XML 構成要素の XQuery Mapper におけるグラフィカルな表現を示します。