https://blogs.oracle.com/integration/entry/12c_xslt_editor_xslt_view1
XSLT Viewは2種類のグラフィカルビューのうちの一つで、新しくなった12cのXSLTエディタで提供されています。このエントリでは、再利用可能なmatched template(テンプレート・ルール)を作成するための、XSLTエディタのXSLT Viewでサポートされているリファクタリング機能についてご紹介します。
12cのXSLTエディタのグラフィカル・ビューに関する概要は、以下のエントリをご覧ください。
12c XSLT Editor Overviewこのエントリのために、Map Viewの説明で使ったサンプルを使います(Map Viewの説明エントリは以下のリンクからどうぞ)。
https://blogs.oracle.com/integration/entry/12c_xslt_editor_overview
http://orablogs-jp.blogspot.jp/2016/04/12c-xslt-editor-overview.html
12c XSLT Editor – Map View Overviewこのサンプルでは、Purchase Order(発注書)からInvoice(送り状)へのマッピングをXSLTエディタのMap Viewを使って作成しました。
https://blogs.oracle.com/integration/entry/12c_xslt_editor_map_view
http://orablogs-jp.blogspot.jp/2016/04/12c-xslt-editor-map-view-overview.html
ソース側のShipToノード配下にはるAddressをターゲット側のShippedToノード配下のAddressにマッピングしました。BillTo配下のAddressもマッピングする必要があります。BillToとShipToのaddressのaddress構造は同じなので、address情報の汎用的なマッピングを含む一つのテンプレートを作成し、テンプレートをBillToとShipTo配下のaddressのマッピングに再利用するのは理に適っています。
既存のShipToからShippedToへのマッピングをリファクタリングし、別のルール・テンプレートを作成することでこれを実現します。こうすることで、ShippedToとBilledToのaddressを出力XMLに設定が必要な箇所で、xsl:apply-templatesステートメントを使うテンプレートを呼び出すことができます。
まず、XSLTビューに移動しましょう。エディタのツールバー右側にあるXSLTボタンをクリックし、XSLTビューに移動します。
XSLT ViewでXSLT(右上方)の分割ビューとターゲットスキーマツリー(右下方)を表示されています。
XSLTのShippedToノードにあるマッピングを複製し、リファクタリングして、別のテンプレートに配置する必要があります。ShippedToエリアをXSLTパネルで開くと、以下のようになります。
XSLTパネルのShippedTo/Addressノードを右クリックし、[テンプレートに作成]をクリックします。
新しいテンプレート・ルール・ダイアログが、新規テンプレート用に提示された一致文字列を伴って表示されます。ダイアログでOKを選択すると、リファクタリングが始まります。
新しく作成されたルール・テンプレートには、Addressノード用の元のマッピングが含まれています。xsl:apply-templatesステートメントはXSLT中のAddressノードの元の位置に挿入されます。出力XMLのこの位置にAddress出力ノードが作成されるよう、このxsl:apply-templates ステートメントが、新しいルール・テンプレートにXSLTのこの位置で実行させます。
ソース・ツリーのShipTo/Addressノードは紫のバブルで強調表示されます。これは新規テンプレートのコンテキストノードである、つまり新規テンプレートの相対XPath式がこのコンテキストノードに関連することを示しています。
このルール・テンプレートを再利用して、BillToアドレス情報をマッピングしましょう。まず、ルール・テンプレートの一致文字列を両エリアで使えるよう汎用化します。新しいxsl:templateノードをダブル・クリックすると、xsl:templateステートメントの属性を変更できるダイアログが現れます。
属性情報をプロパティウィンドウで編集することもできます。[OK]をクリックすると、テンプレート中の一致文字列が/ns0:PurchaseOrder/ShipTo/AddressからAddressに変わります。これはAddressという名前のすべてのノードに一致します。
一致文字列がAddressで、ソースのAddressの任意のノードに一致する可能性があったとしても、テンプレートの実行はxsl:apply-templatesのために定義された、選択された式に制限されます。一致文字列がAddressで、xsl:apply-templatesで選択されたものが、/ns0:PurchaseOrder/ShipTo/Addressである場合、BilledToエリアのためのAddress テンプレート・ルールを実行するため、出力側のBilledToノードの下に別のxsl:apply-templatesステートメントを追加する必要があります。
BilledToノードをXSLTに追加するため、その親ノード(tns:Invoice)を右クリックし、[スキーマから子を追加]>BilledToを選択します。
BilledToノードをすべての必要とする子とともに追加します。
ShippedToノードと同じようにxsl:apply-templates 要素をAddressノードの代わりに置き換えます。Addressノードを削除し、xsl:apply-templates要素を選択し、BilledTo要素の子として追加します。
BillTo/Address フィールドを xsl:apply-templates ステートメントにマッピングして、テンプレートを呼ぶようにします。同様に、NameフィールドをShppedToにマッピングします。
Addressテンプレートをクリックすると、テンプレート用に2個のコンテキストノードが紐付いています。
Addressテンプレート内で使われている相対XPath式に着目してください。CityというXPath式を選択しています。Cityは2個のAdressコンテキストノードに関連しています。
0 件のコメント:
コメントを投稿