|
この節では、BEA XQuery Mapper を使用してデータ トランスフォーメーションをグラフィカルに作成する方法について説明します。グラフィカル インタフェースを使用して、スキーマのソース要素をスキーマのターゲット要素にマップできます。マップを行うと、XQuery Mapper により XQuery が生成され、.xq ファイルとして保存されます。
WebLogic Integration または AquaLogic Service Bus をインストールすると、BEA Workshop for WebLogic と Eclipse 用の XQuery Mapper プラグインがインストールされます。
XQuery Mapper インストールの一部として、デフォルトのスキーマを含むサンプル プロジェクトが提供されます。サンプル プロジェクトの詳細については、「XQuery Mapper サンプル プロジェクト」を参照してください。
[プログラムBEA ProductsWorkshop for WebLogic Platform]
このフォルダはワークスペースと呼ばれ、Workshop でプロジェクトを格納するフォルダです。
[ウィンドウパースペクティブを開くその他XQuery トランスフォーメーション]
注意 : | XQuery ファイルを開くと、XQuery トランスフォーメーション パースペクティブが自動的に起動します。ただし、XQuery Mapper が開いており、XQuery ファイルが開いていない場合は、XQuery トランスフォーメーション パースペクティブを手動で起動する必要があります。 |
インストール フォルダにはサンプル プロジェクトが用意されています。サンプル プロジェクトには、「例 : XQuery を使用したデータの操作と制約」に示されているように、XQuery トランスフォーメーションを作成するときに使用できるスキーマと XML ファイルが含まれています。
XQuery トランスフォーメーション パースペクティブからウィザードを使用してサンプル プロジェクトを作成できます。手順は次のとおりです。
[ファイル新規その他WebLogic Integrationチュートリアル : XQuery トランスフォーメーション]
注意 : | 同じサンプル プロジェクトを [ファイル 新規 その他 AquaLogic Service Bus チュートリアル : XQuery トランスフォーメーション] メニュー項目から使用することもできます。 |
以下のフォルダとファイルを含むサンプル プロジェクトが作成されます。
プロジェクトの作成およびそれらのプロジェクトで必要なファイルのインポートの詳細については、以下のトピックを参照してください。
注意 : | XQuery トランスフォーメーションを作成する前に、プロジェクト固有の XML スキーマ ファイル、WSDL ファイル、MFL ファイルを作成またはインポートすることができます。ファイルはどの場所からでも XQuery Mapper にインポートできます。Eclipse にファイルをインポートする前に、ビジネス ニーズに応じたフォルダ ディレクトリ構造を作成することをお勧めします。詳細については、「スキーマ ファイルの作成とインポート」を参照してください。 |
プロジェクトを作成するには、Eclipse の [新規プロジェクト] ウィザードを使用します。このウィザードでは、さまざまな種類のプロジェクトから新しいプロジェクトを選択するよう求められます。XQuery Mapper のために、[シンプル] を選択して基本的なプロジェクトを作成できます。
[新規プロジェクト] ウィザードが開きます。ウィザードで、以下のいずれかを選択するよう求められます。
たとえば、TestProject1
などの名前を入力します。
スキーマ ファイルはどの場所からでも作成またはインポートできます。以下のスキーマ タイプがサポートされています。
.mfl
が付きます。詳細については、Format Builder のオンライン ヘルプを参照してください。
XML スキーマは、Eclipse の外部で作成および格納されます。ただし、XML スキーマ エディタを使用して XML スキーマを作成することもできます。インポートまたは作成されたスキーマ ファイルは、以下の図に示されているように [新しい XQuery トランスフォーメーション] ウィザードで使用できます。XML スキーマの作成については、「XML スキーマ エディタを使用した XML スキーマ ファイルの作成」を参照してください。
[インポート] ウィザードが表示されます。このウィザードを使用すると、スキーマをさまざまなソースからインポートできます。選択するインポート ソースは、スキーマが格納されている場所によって異なります。
たとえば、ローカル ファイル システムからインポートする場合は、ローカルに格納されているファイルを検索するよう求められます。
Eclipse に付属する XML スキーマ エディタを使用して XML スキーマ ファイルを作成できます。
たとえば、NewXMLSchema
などの名前を入力します。
指定したプロジェクトにスキーマ ファイルが作成されます。これで、スキーマの詳細を指定し、ファイルを保存することができます。
注意 : | XML スキーマ エディタの使用の詳細については、以下の URL にある「XML Schema Editor Tutorial」を参照してください。 |
Eclipse に付属する WSDL エディタを使用して WSDL ファイルを作成できます。WSDL ファイルで定義された XML スキーマをトランスフォーメーションで使用できます。
注意 : | WSDL エディタの使用の詳細については、以下の URL にある「WSDL Editor Tutorial」を参照してください。 |
インポートされた MFL ファイルは、[新しい XQuery トランスフォーメーション] ウィザードで使用できます。
[Import] ウィザードが開きます。このウィザードを使用すると、スキーマをさまざまなソースからインポートできます。選択するインポート ソースは、スキーマが格納されている場所によって異なります。
たとえば、ローカル ファイル システムからインポートする場合は、ローカルに格納されているファイルを検索するよう求められます。
MFL ファイルは Format Builder ツールを使用して作成します。このツールは、Windows のスタート メニューまたは Eclipse から起動できます。
Format Builder の詳細については、Format Builder のオンライン ヘルプを参照してください。
[デザイン] タブをクリックし、XQuery Mapper のデザイン ビューを開きます。このビューでは、ソースおよびターゲットのデータ型を選択して、トランスフォーメーション マップを作成できます。デザイン ビューでは、ソース要素とターゲット要素をグラフィカルにリンクできます。ソース要素とターゲット要素の間にリンクを作成すると、XQuery ファイル (またはマップ) が生成されます (拡張子は .xq です)。このファイルは、デザイン ビューに表示されます。生成された XQuery コードは、[ソース] タブをクリックすると表示されます。
ソースとターゲットのデータ型の組み合わせは以下のとおりです。
[新しい XQuery トランスフォーメーション] ウィザードが開きます。
[ソースの型] ページが開きます。このページでは、トランスフォーメーションのソースの型を選択できます。
たとえば、Schemas/Dates.xsd から入力データを追加する場合は、以下の図に示されているように、最初にそのファイルを選択しそのコンテンツを展開して、入力要素として date を選択します。
[選択されたソースの型] ペインに、選択した要素を構成している要素と属性が表示されます。
[対象の型] ページが開きます。このページでは、トランスフォーメーションのターゲットのデータ型を選択できます。
[選択された対象の型] ペインに、選択した要素を構成している要素と属性が表示されます。
注意 : | ターゲット データ型は 1 つしか指定できません。 |
基本的な要素トランスフォーメーションでは、ソース要素をターゲット要素にマップします。ソース要素とターゲット要素には同じ名前、型、またはスコープを指定できる場合とできない場合があります。基本的な要素トランスフォーメーションにはさまざまな種類があります。
これは、マップ ファイルが「ソースとターゲットのデータ型を選択して XQuery を生成する」で示されているように作成されていることを前提としています。
たとえば、ソース要素 customer-name
とターゲット要素 customer-name
の間に要素-要素リンクを作成する場合は、以下の図に示されているように [ソース] ペインの要素を [対象] ペインにドラッグします。
基本的な属性トランスフォーメーションでは、ソース属性をターゲット属性にマップします。ソース属性とターゲット属性には同じ名前、型、またはスコープを指定できる場合とできない場合があります。基本的な属性トランスフォーメーションにはさまざまな種類があります。
たとえば、street
属性と street
要素の間に属性-要素リンクを作成する場合は、以下の図に示されているように [ソース] ペインの要素を [対象] ペインにドラッグします。
複雑なマップ トランスフォーメーションの場合は、複雑なソース (たとえば、反復する要素) から複雑なターゲット (たとえば、非反復要素) にマップします。その例のいくつかを以下に示します。
これは、マップ ファイルが「ソースとターゲットのデータ型を選択して XQuery を生成する」で示されているように作成されていることを前提としています。
たとえば、product
と product
の間に反復グループ-反復グループ リンクを作成する場合は、以下の図に示されているように [ソース] ペインの要素を [対象] ペインにドラッグします。
トランスフォーメーションは、作成後に [ソース] タブで変更、更新、または削除することができます。
ソース データとターゲット データ間のリンクを作成すると、その関係を示す XQuery ファイルが生成されます。XQuery Mapper でサポートされている XQuery 言語については、以下の URL を参照してください。
XQuery Mapper の [制約] タブを使用すると、反復するソース要素とターゲット要素の間の関係に制約を付けたり操作したりできます。
[制約] タブから以下の [制約の種類] オプションを使用できます。
注意 : | これらのオプションの詳細については、「[制約] タブの [和集合] オプションの使用」を参照してください。 |
デザイン ビューで反復する要素の間に構造的なリンクを作成すると、要素を反復処理するための XQuery for
ループが生成されます。[制約] タブの [Where 句式] ペインを使用し、XQuery for
ループに where
句を追加することで、反復するターゲット要素に制限や制約を付けることができます。[制約] タブの [Where 句式] ペインで、XQuery for
ループの where
句に対する複合条件を作成できます。複合条件は、OR または AND で結合された条件で構成されています。次に例を示します。
((data($PurchaseOrderDoc/partId) > 200 and data($PurchaseOrderDoc/partId) <= 400))
実行時には、複合条件を満たす反復要素についてのみ for
ループが反復処理されます。
[制約] タブの詳細な使用例については、「反復ソースと非反復ターゲットの間のトランスフォーメーションの作成」を参照してください。
[対象の式] タブを使用して、ソース要素とターゲットの要素の間のリンクを表示および変更できます。[対象の式] タブでは、ソース要素とターゲット要素の間の複雑な式を作成できます。
[対象の式] タブを使用して、リンクに if-then-else 構文を追加できます。if-then-else のあるクエリを呼び出すと、if 式を構成する条件が評価され、その結果に応じて異なる値がターゲット ノードに返されます。たとえば、次の図の例に示すように、quantity
ソース ノードの値が 500
より大きい場合は、ID
ターゲット ノードの値として 4554
が返されますが、quantity
ソース ノードの値が 500
以下である場合は、ID
ターゲット ノードの値として 5894
が返されます。
リンクに単純な if-then-else 式を追加する以下の手順に加えて、より複雑な例も利用できます。これらの例については、「反復ソースと非反復ターゲットの間のトランスフォーメーションの作成」を参照してください。
この節では、[対象の式] タブを使用して、関数の呼び出しをクエリに挿入する方法について説明します。
XQuery 1.0 および XPath 2.0 の関数と演算子の詳細 (2004 年 7 月 23 日に公開された W3C の作業草案) については、次の URL を参照してください。
XQuery Mapper には、標準の W3C XQuery 関数と演算子のセットが用意されています。トランスフォーメーションを作成すると XQuery 言語でクエリが記述され、このクエリによってデータ変換が行われます。生成されたクエリには、標準の XQuery 関数またはユーザ定義関数を追加できます。たとえば、トランスフォーメーションの一部として、XML 文字列を大文字に変換することができます。
[対象の式] タブが表示されていない場合は、メニュー バーから [ウィンドウビューの表示対象の式] を選択してください。
[一般式] ペインに、選択したターゲット ノードとソース ノードをリンクする XQuery コードが表示され、選択されます。このコードを選択したままにして、次の手順に進みます。
この例では、文字列関数フォルダから upper-case
関数を選択します。
以下の手順では、[一般式] ペインで選択されている関数のパラメータ (この例では upper-case
関数の $string-var
パラメータ) を選択したままにしておきます。
注意 : | BEA Systems によって定義された trim-left などの XQuery 関数には、fn-bea: というプレフィックスが付いています。[式の関数] ペインに表示されない XQuery 関数でも、XQuery 仕様で定義されていれば、プレフィックス fn: を付けて使用できます。 |
この例を実行すると、upper-case
関数によってソース要素のすべての文字が大文字に変換されます。
XQuery Mapper の式の変数ビューを使用して、変数とその下位要素にアクセスできます。式の変数ビューから、[制約] タブと [対象の式] タブに変数またはその下位要素をドラッグ アンド ドロップできます。
[デザイン] タブで XQuery ファイルを編集するときに、プロパティ エディタを使用すると、ソースとターゲットの XSD または MFL ファイルを開かずに、現在のマップ内のノードに関するスキーマ プロパティを表示できます。そのため、[ソース]、[対象]、または [式の変数] ペインで要素または属性を選択し、関連付けられたスキーマ プロパティをプロパティ エディタで表示できます。プロパティ エディタには、選択した要素のスキーマ プロパティに関する読み込み専用のビューが表示されます。
プロパティ エディタ ビューを有効にするには、[ウィンドウビューの表示プロパティー] を選択します。
XQuery Mapper の [テスト] タブを使用して、XQuery トランスフォーメーションを検証できます。
XQuery ファイルのテストの詳細については、「XQuery ファイルのテスト」を参照してください。
Mapper のテスト ビューを使用して、自分で定義したトランスフォーメーションを検証できます。以下の図に示すテスト ビューで、適切なアイコンを選択します。
ソース データをインポートすると、ソース データは関連付けられたスキーマを基に検証され、警告やエラーがある場合はマークが付けられます。グローバル型およびローカル要素の XML データはインポートすることができますが、グローバル型およびローカル要素は検証されないため、無効なデータに関するエラーや警告は報告されません。グローバル タイプとローカル要素の詳細については、「XML のグローバル要素、グローバル型、ローカル要素、および属性」を参照してください。
設計時には、選択されたソース パラメータまたは結果データが型付きのグローバル XML 要素である場合にのみ、XQuery ファイルの [テスト] タブにある [ソース データ] ペインの [自動検証] および [結果データ] ペインの [検証] が有効になります。詳細については、「XML のグローバル要素、グローバル型、ローカル要素、および属性」を参照してください。
選択されたソース パラメータまたは結果データが次のいずれかのタイプである場合、検証は有効になりません。
XQuery ファイルの [テスト] タブにある [ソース データ] ペインの [自動検証] および [結果データ] ペインの [検証] をクリックすると、表示された XML がスキーマに対してチェックされ、設計時のエラーが報告されます。テスト ビューで設計時に行われる検証は、実行時に行われるスキーマ検証とは異なります。設計時の検証では結果の XML ドキュメントは変更されませんが、スキーマで定義されている必須の要素または属性が存在しているかどうかがチェックされます。
デザイン ビューを使用して、トランスフォーメーションをグラフィカルに作成、変更、または更新することができます。この節では、XQuery Mapper の [デザイン] タブのグラフィカルな表現について説明します。
データは、データ リンクによってソース ノードからターゲット ノードに直接変換されます。たとえば、次の図は、priceQuote/customerName
要素と quote/name
要素の間のデータ リンクを示します。
priceQuote/customerName
と quote/name
は、両方とも XML String 要素です。実行時に priceQuote/customerName
要素のデータは、上の図のように quote/name
要素に変換されます。
これら 2 つの要素をリンクする XQuery コードを変更すると、これらの要素間のリンクは、データ リンク (青色の線で表示) から暗黙的なリンク (明るいグレーの線で表示) に変更されます。
[ソース] ペインのノードを、[対象] ペインにドラッグしている間は、2 つのノードの間に一時的なリンク (破線) が表示されます。破線の色は、ソース ノードとターゲット ノードの間の互換性によって異なります。次の表を参照してください。
ソース ノードがターゲット ノード上にドロップされた後で、リンクを表す線が表示されます。ターゲット ノードとソース ノードに応じて、破線または実線が表示されます。
XML スキーマ型または要素は、schema
要素の直接の子である場合は「グローバル」、schema
要素の直接の子でない場合 (他の要素にネストされている場合) は「ローカル」と見なされます。次の 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 スキーマ内に同じグローバル型を持つ要素を複数 (異なる名前で) 宣言できます。
次の表に、これらの異なる XML コンポーネントの XQuery Mapper におけるグラフィカルな表現を示します。
|
||
|
||
|
||
|