![]() ![]() ![]() ![]() |
この手順では、ソース ノードを対象ノードにマップします。次の図は、XML データ例のマッピングを示します。
上の図では、ソース XML データは対象 XML データとフォーマットが異なっています。トランスフォーメーション メソッドによって呼び出されるクエリの構築時に、矢印で表されているようにソース ノードを対象ノードにマップします。実行時にトランスフォーメーションは、このマッピングを使用してソース フォーマットから対象フォーマットにデータを変換します。たとえば、1 の矢印は、priceQuote/customerName
要素から quote/name
要素へのトランスフォーメーションを表します。
上の図の 2 の矢印で表されているような住所データのマッピングは、より複雑なトランスフォーメーションになります。この住所情報を変換するには、shipAddress
要素のすべての属性 (street
、city
、state
、および zip
) を、address
という 1 つの XML String 要素に変換する必要があります。
ソース XML データと対象 XML データは、それぞれ異なる XML スキーマで有効です。上の図で示した PriceQuote.xml
と呼ばれるサンプルのソース XML ドキュメントは、PriceQuote.xsd
ファイルの XML スキーマで有効です。また、Quote.xml
と呼ばれるサンプルのソース XML ドキュメントは、Quote.xsd
ファイルの XML スキーマで有効です。
注意 : | PriceQuote.xml 、AvailQuote.xml 、QuoteRequest.xml の各ファイルは、アプリケーションの Tutorial_Process_ApplicationWeb/requestquote/testxml ディレクトリにあります。 |
注意 : | 図 4-1 は、1 つのソース データ型 (priceQuote ) を示します。これは、「手順 2 : トランスフォーメーションの構築」で説明した myJoin メソッドへの 3 つのソースのうちの 1 つです。この手順では、PriceQuote.xsd ファイル内の XML スキーマを、Quote.xsd ファイル内の XML スキーマにマッピングする方法について説明します。「手順 4 : 繰り返し要素のマッピング - 結合の作成」では、その他のソースの型 (AvailQuote.xsd とtaxRate ) のマッピングについて説明します。 |
注意 : | PriceQuote.xml 、AvailQuote.xml 、QuoteRequest_a.xml 、QuoteRequest.xml 、および Quote.xml の各ファイルは、例として提供されており、実行時にビジネス プロセスで使用されるものではありません。このチュートリアルの概要のページで説明されているように、実行時にビジネス プロセスはソース XML データを構築し、それをトランスフォーメーションに渡します。 |
以下のタスクを実行して、ソース データと対象データの間のマッピングを作成、変更、およびテストします。
この手順では、ソース (PriceQuote.xsd
) の XML String 要素 customerName を、対象 (Quote.xsd
) の XML String 要素 name にマップします。
myJoin.xq
を表示します。
次の図に示すように、デザイン ビューの [ソース] ペインに、選択したソースのグラフィカルな表現が表示されます。
注意 : | [ソース] ペインに priceQuote1、availQuote1、および taxRate の各ノードが表示されない場合は、「ソースの型を選択するには」の手順に従ってください。 |
[ソース] ペインに表示されるノードは、MyTutorialJoin トランスフォーメーション ファイルにある myJoin
メソッドのソース パラメータに対応しています。MyTutorialJoin.java
ファイルにある myJoin
メソッドのシグネチャは、次の Java コード セグメントのように表示されます。
public abstract org.example.quote.QuoteDocument myJoin(org.example.price.PriceQuoteDocument priceQuote1, org.example.avail.AvailQuoteDocument availQuote1, float taxRate);
2 つの要素間に実線が表示されます。この実線は、2 つのノード間のデータ リンク (ソース ノードの値を対象ノードの値に直接変換するリンク) を表します。
このリンクは、図 4-1 で 1 の矢印で表されたマッピングに対応しています。
この手順では、1 つの要素の複数の属性を、別の 1 つの要素にマップします。
XML priceQuote1/shipAddress 要素には、以下の属性が含まれています。
これらの属性はすべて、string 型の 1 つの XML quote/address 要素にマップされます。このマッピングは、図 4-1 で 2 の矢印で表されています。
次の手順に従って、1 回のドラッグ アンド ドロップ操作で複数の shipAddress 属性を [ソース] ペインから [対象] ペインにリンクします。
図 4-4 で番号の付けられたリンクは、図 4-1 の、番号 2 の付けられた矢印で表されているマッピングに対応しています。
ソースの要素と属性から対象の要素と属性にマッピング リンクを作成すると、XQuery 言語で記述されたクエリが生成されます。
この節では、前の節で生成されたクエリをテストする場合に必要な手順について説明します。この節では、ソース XML データを入力し、そのデータに対してクエリを実行して、結果の対象 XML データを表示します。
myJoin.xq
ファイルの [テスト] タブを選択します。PriceQuote.xml
をインポートします。
次の図のように、あるフォーマットのソース XML データが、クエリによって対象フォーマットの XML に変換され、[結果データ] ペインに表示されます。
生成された XQuery コード全体を順に実行したクエリで発生するトランスフォーメーションの詳細については、「トランスフォーメーションについて」を参照してください。
注意 : | 上の XML ドキュメントでは、文字列 quot がネームスペース URI : xmlns:quot="http://www.example.org/quote" のネームスペース プレフィックスです。ネームスペース宣言と XML データの生成方法の詳細については、「トランスフォーメーションについて」を参照してください。 |
この節では、生成されたクエリを編集し、address
要素の町名、都市名、州名、および ZIP コードの各フィールドの間に区切り記号を追加する手順について説明します。
myJoin.xq
ファイルの [デザイン] タブを選択します。concat
関数の住所の属性パラメータの間に、引数 ",",
を追加して、異なる住所フィールドの間を区切ります。concat($priceQuote1/ns0:shipAddress/@street,",",
$priceQuote1/ns0:shipAddress/@city,",",
$priceQuote1/ns0:shipAddress/@state,",",
$priceQuote1/ns0:shipAddress/@zip)
上の手順で、クエリ内の shipAddress
属性と address
要素間のリンクを変更したため、次の図のように、これらのリンクは直接のデータ リンク (青色の線で表示) から暗黙的なリンク (明るいグレーの線で表示) に変更されます。マッパーは XQuery コードを解析し、対象要素とソース要素の間の暗黙的なリンクを判別します。
myJoin.xq
ファイルの [テスト] タブを選択し、[結果データ] ペインで [XQuery のテスト] をクリックします。
[結果データ] ペインに、結果の XML データが表示されます。
address
要素の町名、都市名、州名、および ZIP コードの各フィールドが、次のリストのようにカンマで区切られます。
<address>12 Springs Rd,Morris Plains,nj,07960</address>
この節では、クエリから標準の W3C XQuery 関数を呼び出すことによって state
フィールドを大文字に変換する手順について説明します。
myJoin.xq
ファイルの [デザイン] タブを選択します。shipAddress
要素の state
属性と quote/address
要素の間のリンクを選択します。
[ソース] ペインで、state
属性のリンクが緑色で強調表示されます。
[対象の式] タブの [一般式] ペインに、concat
関数の呼び出しが表示されます。
$priceQuote1/ns0:shipAddress/@state
$priceQuote1/ns0:shipAddress/@state
属性にドラッグ アンド ドロップします。
上の図のように、[一般式] ペインで $string-var
を選択したままにしておきます。
$string-var
パラメータの上にドラッグ アンド ドロップします。
[結果データ] ペインの XML ソースに、次のリストのように、州名が大文字で表示されます。
<address>12 Springs Rd,Morris Plains,NJ,07960</address>
![]() ![]() ![]() |