チュートリアル : 初めてのデータ トランスフォーメーション構築

     前  次    新しいウィンドウで目次を開く     
ここから内容

手順 3 : 要素および属性のマッピング

この手順では、ソース ノードを対象ノードにマップします。次の図は、XML データ例のマッピングを示します。

図 4-1 マッピングの例

マッピングの例

上の図では、ソース XML データは対象 XML データとフォーマットが異なっています。トランスフォーメーション メソッドによって呼び出されるクエリの構築時に、矢印で表されているようにソース ノードを対象ノードにマップします。実行時にトランスフォーメーションは、このマッピングを使用してソース フォーマットから対象フォーマットにデータを変換します。たとえば、1 の矢印は、priceQuote/customerName 要素から quote/name 要素へのトランスフォーメーションを表します。

上の図の 2 の矢印で表されているような住所データのマッピングは、より複雑なトランスフォーメーションになります。この住所情報を変換するには、shipAddress 要素のすべての属性 (streetcitystate、および zip) を、address という 1 つの XML String 要素に変換する必要があります。

ソース XML データと対象 XML データは、それぞれ異なる XML スキーマで有効です。上の図で示した PriceQuote.xml と呼ばれるサンプルのソース XML ドキュメントは、PriceQuote.xsd ファイルの XML スキーマで有効です。また、Quote.xml と呼ばれるサンプルのソース XML ドキュメントは、Quote.xsd ファイルの XML スキーマで有効です。

注意 : PriceQuote.xmlAvailQuote.xmlQuoteRequest.xml の各ファイルは、アプリケーションの Tutorial_Process_ApplicationWeb/requestquote/testxml ディレクトリにあります。
注意 : 図 4-1 は、1 つのソース データ型 (priceQuote) を示します。これは、「手順 2 : トランスフォーメーションの構築」で説明した myJoin メソッドへの 3 つのソースのうちの 1 つです。この手順では、PriceQuote.xsd ファイル内の XML スキーマを、Quote.xsd ファイル内の XML スキーマにマッピングする方法について説明します。「手順 4 : 繰り返し要素のマッピング - 結合の作成」では、その他のソースの型 (AvailQuote.xsdtaxRate) のマッピングについて説明します。
注意 : PriceQuote.xmlAvailQuote.xmlQuoteRequest_a.xmlQuoteRequest.xml、および Quote.xml の各ファイルは、例として提供されており、実行時にビジネス プロセスで使用されるものではありません。このチュートリアルの概要のページで説明されているように、実行時にビジネス プロセスはソース XML データを構築し、それをトランスフォーメーションに渡します。

以下のタスクを実行して、ソース データと対象データの間のマッピングを作成、変更、およびテストします。

ソースから対象にノードをマップするには

この手順では、ソース (PriceQuote.xsd) の XML String 要素 customerName を、対象 (Quote.xsd) の XML String 要素 name にマップします。

  1. デザイン ビューに myJoin.xq を表示します。
    1. [ナビゲーター] ペインで、src/requestquote フォルダを参照し、myJoin.xq をダブルクリックします。
    2. 次の図に示すように、デザイン ビューの [ソース] ペインに、選択したソースのグラフィカルな表現が表示されます。

      図 4-2 デザイン ビューのグラフィカルな表現
      注意 : [ソース] ペインに priceQuote1availQuote1、および 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. myJoin XQ ファイルの [ソース] ペインにある priceQuote1/customerName ノードを、[対象] ペインの quote/name ノードにドラッグ アンド ドロップします。
  3. 2 つの要素間に実線が表示されます。この実線は、2 つのノード間のデータ リンク (ソース ノードの値を対象ノードの値に直接変換するリンク) を表します。

    図 4-3 2 つの要素間のリンク

2 つの要素間のリンク

このリンクは、図 4-1 で 1 の矢印で表されたマッピングに対応しています。

要素の複数の属性を 1 つの要素にマップするには

この手順では、1 つの要素の複数の属性を、別の 1 つの要素にマップします。

XML priceQuote1/shipAddress 要素には、以下の属性が含まれています。

これらの属性はすべて、string 型の 1 つの XML quote/address 要素にマップされます。このマッピングは、図 4-1 で 2 の矢印で表されています。

次の手順に従って、1 回のドラッグ アンド ドロップ操作で複数の shipAddress 属性を [ソース] ペインから [対象] ペインにリンクします。

  1. [ソース] ペインで、priceQuote1/shipAddress ノードの street 属性を選択します。
  2. [ソース] ペインから [対象] ペインの quote/address ノードに street 属性をドラッグ アンド ドロップします。
  3. 同様に、各属性を選択し、[ソース] ペインから [対象] ペインの quote/address ノードにドラッグ アンド ドロップします。
  4. 注意 : 〔Shift〕を使用して、ノードのグループを選択することもできます。

    次の図のように、4 つの新しいリンクが表示されます。

    図 4-4 リンクの作成

リンクの作成

図 4-4 で番号の付けられたリンクは、図 4-1 の、番号 2 の付けられた矢印で表されているマッピングに対応しています。

生成された単純なクエリを表示および保存するには

ソースの要素と属性から対象の要素と属性にマッピング リンクを作成すると、XQuery 言語で記述されたクエリが生成されます。

  1. myJoin.xq ファイルのソース ビューを選択します。
  2. 次の図のように、生成されたクエリが表示されます。

    図 4-5 myjoin.xq ファイルのソース ビュー


    myjoin.xq ファイルのソース ビュー

    注意 : 図 4-1 で番号の付けられた XQuery コードは、それぞれ 図 4-4 で番号の付けられたマッピングおよびリンクに対応しています。
  3. このアプリケーションのすべてのファイルを保存します。Oracle Workshop for WebLogic メニューから、[ファイルすべて保管] を選択します。〔Ctrl〕+〔Shift〕+〔S〕を押して、すべてのファイルを保存することもできます。
  4. 注意 : 〔Ctrl〕+〔S〕を押すと、アクティブなファイルだけが保存されます。
単純なクエリをテストするには

この節では、前の節で生成されたクエリをテストする場合に必要な手順について説明します。この節では、ソース XML データを入力し、そのデータに対してクエリを実行して、結果の対象 XML データを表示します。

  1. myJoin.xq ファイルの [テスト] タブを選択します。
  2. トランスフォーメーションのソース データとして PriceQuote.xml をインポートします。
    1. [ソース データ] ペインの [ソース変数] ドロップダウン メニューから priceQuote1 を選択します。
    2. [インポート] アイコンをクリックします。
    3. [ファイルのインポート] ダイアログ ボックスが表示されます。

    4. src フォルダをダブルクリックします。
    5. testxml フォルダをダブルクリックします。
    6. PriceQuote.xml ファイルをクリックします。
    7. [開く] をクリックします。
    8. PriceQuote.xml ファイルのグラフィカルな表現が [ソース データ] ペインに表示されます。

  3. [結果データ] ペインで [XQuery のテスト] をクリックします。
  4. 次の図のように、あるフォーマットのソース XML データが、クエリによって対象フォーマットの XML に変換され、[結果データ] ペインに表示されます。

    図 4-6 [結果データ] ペイン


    [結果データ] ペイン

    生成された XQuery コード全体を順に実行したクエリで発生するトランスフォーメーションの詳細については、「トランスフォーメーションについて」を参照してください。

    注意 : 上の XML ドキュメントでは、文字列 quot がネームスペース URI : xmlns:quot="http://www.example.org/quote" のネームスペース プレフィックスです。ネームスペース宣言と XML データの生成方法の詳細については、「トランスフォーメーションについて」を参照してください。
簡単なクエリを編集して再テストするには

この節では、生成されたクエリを編集し、address 要素の町名、都市名、州名、および ZIP コードの各フィールドの間に区切り記号を追加する手順について説明します。

  1. myJoin.xq ファイルの [デザイン] タブを選択します。
  2. priceQuote1/shipAddress ノードの zip 属性と quote/address ノードの間のリンクを選択します。
  3. 次のリストのように、[対象の式] タブの [一般式] ペインで、concat 関数の住所の属性パラメータの間に、引数 ",", を追加して、異なる住所フィールドの間を区切ります。
  4. concat($priceQuote1/ns0:shipAddress/@street,",",
    $priceQuote1/ns0:shipAddress/@city,",",
    $priceQuote1/ns0:shipAddress/@state,",",
    $priceQuote1/ns0:shipAddress/@zip)
  5. [適用] をクリックします。
  6. 次の図のように、更新されたマップが表示されます。

    上の手順で、クエリ内の shipAddress 属性と address 要素間のリンクを変更したため、次の図のように、これらのリンクは直接のデータ リンク (青色の線で表示) から暗黙的なリンク (明るいグレーの線で表示) に変更されます。マッパーは XQuery コードを解析し、対象要素とソース要素の間の暗黙的なリンクを判別します。

    図 4-7 [ソース] ペインと [対象] ペインの間のマッピング


    [ソース] ペインと [対象] ペインの間のマッピング

  7. myJoin.xq ファイルの [テスト] タブを選択し、[結果データ] ペインで [XQuery のテスト] をクリックします。
  8. [結果データ] ペインに、結果の XML データが表示されます。

    address 要素の町名、都市名、州名、および ZIP コードの各フィールドが、次のリストのようにカンマで区切られます。

    <address>12 Springs Rd,Morris Plains,nj,07960</address>
クエリに XQuery 関数呼び出しを追加するには

この節では、クエリから標準の W3C XQuery 関数を呼び出すことによって state フィールドを大文字に変換する手順について説明します。

  1. myJoin.xq ファイルの [デザイン] タブを選択します。
  2. XQuery トランスフォーメーション パースペクティブに切り替え、[対象の式] ペインを表示します。XQuery トランスフォーメーション パースペクティブに切り替えるには、Oracle Workshop for WebLogic メニューから、[ウィンドウパースペクティブを開くXQuery トランスフォーメーション] を選択します。
  3. shipAddress 要素の state 属性と quote/address 要素の間のリンクを選択します。
  4. [ソース] ペインで、state 属性のリンクが緑色で強調表示されます。

    [対象の式] タブの [一般式] ペインに、concat 関数の呼び出しが表示されます。

  5. [一般式] ペインで、次のテキストを見つけます。
  6. $priceQuote1/ns0:shipAddress/@state
    図 4-8 [対象の式] ペイン - 1
  7. [式の関数] パレットで、[XQuery 関数] フォルダの [文字列関数] を展開します。
  8. upper-case 関数を選択し、それを [一般式] ペインの $priceQuote1/ns0:shipAddress/@state 属性にドラッグ アンド ドロップします。
  9. [一般式] ペインの表示は、次の図のようになります。

    図 4-9 [対象の式] ペイン - 2


    [対象の式] ペイン - 2

    上の図のように、[一般式] ペインで $string-var を選択したままにしておきます。

  10. [ソース] ペインから priceQuote1/shipAddress/state ノードを選択して、[一般式] ペインの $string-var パラメータの上にドラッグ アンド ドロップします。
  11. [一般式] ペインの表示は、次の図のようになります。

    図 4-10 [対象の式] ペイン - 3


    [対象の式] ペイン - 3

  12. [適用] をクリックして、myJoin.xq ファイルを保存します。
  13. [テスト] タブを選択します。
  14. [XQuery のテスト] アイコンをクリックします。
  15. [結果データ] ペインの XML ソースに、次のリストのように、州名が大文字で表示されます。

    <address>12 Springs Rd,Morris Plains,NJ,07960</address>

  ページの先頭       前  次