テンプレート・ルールを作成するための既存のマップのリファクタ方法

既存のテンプレートからコードをリファクタして、新しいテンプレート・ルールを作成できます。これは、前の例でAddressテンプレート・ルールを作成した場合のように、作成した複数のテンプレート・ルールが再使用できる場合に有用です。

「テンプレートに作成」オプションを使用すると、XSLT命令のセクションを複数の場所から起動可能な別のテンプレートにリファクタできます。

次の例では、既存のマッピングをリファクタしてテンプレート・ルールを作成します。

次のマップでは、ソースの各Address要素を処理するXSLTが、各Addressノードに対して繰返されます。管理を容易にするために、冗長コードを再利用可能なテンプレートに統合することもできます。この方法では、後でコードが更新される場合に、複数のコピーを更新する必要がありません。

前述のマップでは、Street1およびStreet2からStreetを作成するXPath concat式を変更する必要がある場合、変更する必要のあるコピーは2つです。ただし、concat関数が、両方のAddress要素を作成するために再使用される1つのテンプレートに存在する場合は、今後変更が必要になるconcat文は1つのみです。

次のステップでは、既存のマッピングをリファクタして、Address要素を処理する1つのテンプレートを作成します。

  1. XSLTビューを使用していることを確認します。XSLTマップ・エディタの右上隅にある「XSLT」をクリックして、XSLTビューに切り替えることができます。
  2. XSLTペインで「ShippedTo/Address」要素を右クリックして、表示されるコンテキスト・メニューから「テンプレートに作成」を選択します。

    「新規テンプレート・ルール」ダイアログが表示されます。

    「一致ノード」には、XSLTペインの選択したノードの下に含まれているXPath式から取得された推奨される一致パターンがあらかじめ移入されています。ターゲット・スキーマ・ツリーで選択された要素は、Addressノードおよびその子です。これらの要素が新しいテンプレート・ルールに移動されます。

  3. 「OK」をクリックします。

    新しいテンプレートが作成され、apply-templates文がAddressノードのかわりに挿入されます。XSLTペインのAddressノードの下の要素に定義されているXPath式は、新しいテンプレートのAddressノード(コンテキスト・ノード)への相対パスを含めるために更新されます。

    次に、このテンプレートをShipToおよびBillToの両方のAddress要素に対して使用します。

  4. 新しいテンプレート・ノードをダブルクリックします。「属性の設定」ダイアログが表示されます。
  5. 「パターンの入力」にAddressと入力します。
  6. 「OK」をクリックします。
  7. XSLTペインで、BilledTo/Address要素を削除します。
  8. BilledToノードを右クリックして、「子の追加」→「XSL」→「apply-templates」の順に選択します。これによって、xsl:apply-templates文がAddressノードのかわりに作成されます。
  9. ソース・ペインのBillTo/AddressノードからXSLTペインの新しいBilledTo/apply-templatesノードに線をドラッグします。

    BilledToおよびShippedTo両方のAddress要素が、1つのテンプレート・ルールを使用して作成されました。