ヘッダーをスキップ
Oracle BPEL Process Manager開発者ガイド
10g(10.1.3.1.0)
B31874-03
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

13 XSLTマッパーとトランスフォーメーション

この章では、XSLTマッパーの機能について説明し、サンプルの注文書スキーマを請求書スキーマにマップする具体的な手順を示します。

この章の内容は次のとおりです。

13.1 トランスフォーメーションのユースケース

トランスフォーメーションの使用方法は、いくつかのOracle BPEL Process Managerユースケースで具体的に示されます。


関連項目:

  • SOA_Oracle_home¥bpel¥samples¥demos¥XSLMapper

  • SOA_Oracle_home¥bpel¥samples¥tutorials¥114.XSLTTransformations

  • 『Oracle BPEL Process Manager Order Bookingチュートリアル』


13.2 XSLマップ・ファイルの作成

トランスフォーメーションはXSLマップ・ファイル内で実行されます。このファイル内で、ソース・スキーマ要素をターゲット・スキーマ要素にマップします。この項では、XSLマップ・ファイルの2つの作成方法について説明します。


注意:

XSLマップ・ファイルは、XSLスタイルシートからも作成できます。Oracle JDeveloperの「ファイル」メイン・メニューで、「新規」「一般」「XML」「XSLスタイルシートからのXSLマップ」の順にクリックします。

13.2.1 新規XSLマップ・ファイルの作成

Transformアクティビティにより、XSLTマッパー・ツールを使用してトランスフォーメーションを作成できます。このツールを使用すると、ソース要素をターゲット要素にマップできます。たとえば、受信したソース注文書スキーマ・データを、送信する請求書スキーマ・データにマップできます。

  1. コンポーネント・パレットからTransformアクティビティをBPELプロセス・ダイアグラムにドラッグ・アンド・ドロップします。

    図mpr16.gifの説明が続きます
    図mpr16.gifの説明

  2. Transformアクティビティをダブルクリックします。

    「Transform」ウィンドウが表示されます。

    図mpr17.gifの説明が続きます
    図mpr17.gifの説明

  3. 次の情報を指定します。

    • 要素のマップ元となるソース変数

    • マップ元となる変数のソース・パート(たとえば、発注リクエストで構成されるペイロード・スキーマ)

    • 要素のマップ先になるターゲット変数

    • マップ先となる変数のターゲット・パート(たとえば、請求書で構成されるペイロード・スキーマ)

  4. 「マッパー・ファイル」フィールドで、マップ・ファイル名を指定するかまたはデフォルト名をそのまま使用します。マップ・ファイルは、XSLTマッパー・トランスフォーメーション・ツールを使用して、マッピングを作成するファイルです。

  5. マジック・ワンド・アイコン(2番目のアイコン)をクリックして新しいマッピングを作成します。ファイルが存在する場合は、メモ帳アイコン(3番目のアイコン)をクリックしてマッピングを編集します。

    XSLTマッパーが表示されます。

  6. 「XSLTマッパーの概要」に進んでXSLTマッパーの使用方法の概要を確認します。

13.2.2 インポートしたソースおよびターゲット・スキーマ・ファイルからのXSLマップ・ファイルの作成


注意:

拡張子.xsltを持つ既存のファイル(たとえば、xform.xslt)を選択すると、当初の意図がxform.xsltを使用することだったとしても、マッパー・ペインが開いて、xform.xslt.xslという名前の新しいXSLファイルが作成されます。拡張子.xslは、.xsl拡張子を持たないすべてのファイルに付加されるため、作成された新しいファイルでマッピングを作成する必要があります。解決策として、ファイル名には必ず拡張子.xslを付けるようにします。XSLファイルの拡張子が.xsltである場合は、.xslに変更します。

次の手順は、SOA_Oracle_home¥bpel¥samples¥demos¥XSLMapperディレクトリにある、po.xsdおよびinvoice.xsdファイルを使用した、XSLマップの作成方法の概要を示しています。

  1. Oracle JDeveloperで、新規XSLマップを作成するアプリケーション・プロジェクトを選択します。

  2. po.xsdおよびinvoice.xsdファイルを(たとえばOracle JDeveloperの「構造」セクションで「スキーマ」を右クリックして「スキーマのインポート」を選択して)プロジェクトにインポートします。

  3. 選択したプロジェクトを右クリックし、「新規」を選択します。

    「新規ギャラリ」ダイアログが表示されます。

  4. 「カテゴリ」ツリーで、「General」を開いて「XML」を選択します。

  5. 「項目」リストで、「XSLマップ」をダブルクリックします。

    「XSLマップ・ファイルの作成」ダイアログが表示されます。このウィンドウでは、ソースのスキーマ・ファイルまたはWSDLファイルのルート要素を、ターゲットのスキーマ・ファイルまたはWSDLファイルのルート要素にマップするXSLマップ・ファイルを作成できます。

      • プロジェクトに追加されたスキーマ・ファイルは、「プロジェクトのスキーマ・ファイル」に表示されます。

      • プロジェクトの一部ではないスキーマ・ファイルは、スキーマ・ファイルのインポート機能を使用してインポートできます。「スキーマ・ファイルのインポート」アイコン(スキーマ・ファイル・リストの右上にある1番目のアイコン)をクリックしてください。

  6. 「ファイル名」フィールドにXSLマップ・ファイル名を入力します。

  7. 「ソース」の下で、「プロジェクトのスキーマ・ファイル」「po.xsd」を開き、ソースのルート要素として「PurchaseOrder」を開きます。

  8. 「ターゲット」の下で、「プロジェクトのスキーマ・ファイル」「invoice.xsd」を開き、ターゲットのルート要素として「Invoice」を開きます。

    図transf_xslmap.gifの説明が続きます
    図transf_xslmap.gifの説明

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

    新規XSLマップが作成されます。

    図trans_newmap.gifの説明が続きます
    図trans_newmap.gifの説明

  10. この時点でファイルを保存して閉じるか、トランスフォーメーションの設計を開始します。XSLTマッパー・ツールの使用方法は、「XSLTマッパーの概要」を参照してください。

  11. コンポーネント・パレットからTransformアクティビティをBPELプロセスにドラッグ・アンド・ドロップします。

  12. Transformアクティビティをダブルクリックします。

  13. 次の情報を指定します。

    • 要素のマップ元となるソース変数

    • マップ元となる変数のソース・パート(たとえば、発注リクエストで構成されるペイロード・スキーマ)

    • 要素のマップ先になるターゲット変数

    • マップ先となる変数のターゲット・パート(たとえば、請求書で構成されるペイロード・スキーマ)

  14. 「マッパー・ファイル」フィールドの右側にある懐中電灯アイコン(最初のアイコン)をクリックし、手順6で指定したマップ・ファイル名を参照します。

  15. 「開く」をクリックします。

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

    XSLTマッパーにXSLマップ・ファイルが表示されます。

  17. 「XSLTマッパーの概要」に進んでXSLTマッパーの使用方法の概要を確認します。

13.3 XSLTマッパーの概要

XSLTマッパー・トランスフォーメーション・ツールを使用して、マップ・ファイルのコンテンツを作成します。図13-1は、XSLTマッパーのレイアウトを示しています。

図13-1 XSLTマッパーのレイアウト

図mpr1.gifの説明が続きます
図mpr1.gifの説明

「ソース」および「ターゲット」のスキーマは、ツリーとして表現され、ツリーの各ノードは様々なアイコンで示されます。表示されるアイコンは、ノードのスキーマまたはプロパティに応じて変化します。たとえば、次のようになります。

要素および属性の各種プロパティ(タイプ、カーディナリティなど)は、図13-1の右下のプロパティ・インスペクタに表示されます。図13-1右上の関数パレットから、XSLTマッパーの提供するすべての関数を利用できます。マッパー・ペイン(キャンバス)は、関数をドロップしてそれらをソース・ノードやターゲット・ノードに接続するための実際の描画領域です。

XSLTマッパーには、3つの独立したコンテキスト・メニューがあります。

3つの個別パネルでそれぞれ右クリックすると、各コンテキスト・メニューを確認できます。また、「自動マップを元に戻す」「やり直し」「削除」および「すべて削除」の機能一式を使用できます。

13.3.1 マッパーの注意事項

  • ターゲット・ツリーの1つのノードには、1回のみリンクできます。つまり、ターゲット・ツリーの1つのノードに2つのリンクを接続することはできません。

  • 不完全な関数や式は、ソース・ビューでXPath式になりません。不完全な式が1つ以上あると、設計ビューからソース・ビューに切り替えたときに、「マッパー・メッセージ」ウィンドウに警告メッセージが表示されます。

  • XSLTマッパーで重複する要素をマップすると、スタイルシートは無効になり、「設計」ビューで作業できなくなります。重複する名前を持つ要素をマップすると、「ログ」ウィンドウに、次のエラー・メッセージが表示されます。

    Error: This Node is Already Mapped  :
    "/ns0:rulebase/for-each/ns0:if/ns0:atom/ns0:rel"
      Error: This Node is Already Mapped  :
    "/ns0:rulebase/for-each/ns0:if/ns0:atom/choice_1/ns0:ind"
      Error: This Node is Already Mapped  :
    "/ns0:rulebase/for-each/ns0:if/ns0:atom/choice_1/ns0:var"
    
    

    これを回避するため、各要素に一意の名前を割り当てます。

13.4 XSLTマッパーの使用

次の各項では、XSLTマッパーの使用方法について説明します。

13.4.1 ノードのリンクによる単純コピー

ソースの属性またはリーフ要素をターゲットの属性またはリーフ要素にコピーするには、ソースをターゲットにドラッグ・アンド・ドロップします。図13-2のように、要素PurchaseOrder/IDInvoice/IDにコピーし、属性PurchaseOrder/OrderDateInvoice/InvoiceDateにコピーします。

図13-2 ノードのリンク

ノードのリンク
図mpr2link.gifの説明

13.4.2 定数値の設定

定数値の設定は、次の手順で行います。

  1. ターゲット・ツリーのノードを選択します。

  2. マウスの右クリックで、コンテキスト・メニューを表示します。

  3. 「テキストの設定」メニュー・オプションを選択します。

  4. 「テキストの設定」ウィンドウで、テキスト(たとえば図13-3で示しているDiscount Appliedなど)を入力します。

  5. 「OK」をクリックしてテキストを保存します。

    関連付けられたテキストのあるノードの横には、「T」アイコンが表示されます。

  6. ノードに関連付けられたテキストを削除するには、ノードを右クリックし、「テキストの設定」ウィンドウを再度表示します。テキストを削除して「OK」をクリックします。

図13-3 「テキストの設定」ウィンドウ

「テキストの設定」ダイアログ・ボックス
図mpr3.gifの説明


関連項目:

詳細は、「テキストの設定」ウィンドウのオンライン・ヘルプを参照してください。

13.4.3 関数の追加

標準のXPath 1.0関数に加え、マッパーでは、多くのビルトイン拡張関数を使用できます。また、マッパーは、ユーザー定義関数や名前付きテンプレートにも対応しています。拡張関数には、xp20またはorclという接頭辞があり、XPath 2.0関数に類似しています。

次の手順に従い、関数定義を表示し、関数を使用します。

  1. コンポーネント・パレットで関数のカテゴリ(String Functionsなど)を選択します。

  2. 個別の関数(lower-caseなど)を右クリックします。

  3. 「ヘルプ」を選択します。関数の説明を含むウィンドウが表示されます。下部のリンクをクリックして、World Wide Web Consortium(www.w3.org)にあるこの関数の説明にアクセスすることもできます。

    図funct_desc.gifの説明が続きます
    図funct_desc.gifの説明

  4. concat関数をマッパー・ペインにドラッグします。この関数を使用すると、ソース・ツリーのソース・パラメータを関数に接続し、関数の出力をターゲット・ツリーのノードに接続できます。

  5. PurchaseOrder/ShipTo/Name/FirstPurchaseOrder/ShipTo/Name/Lastを連結します。姓および名からスレッドをドラッグし、concat関数の左側にドロップして、Invoice/ShippedTo/Nameに結果を設定します。ShippedTo名からもスレッドをドラッグし、concat関数の右側に接続します。図13-4を参照してください。

図13-4 concat関数の使用方法

関数の使用方法
図mpr4.gifの説明


関連項目:

付録D「XPath拡張関数」に記載されているXPath拡張関数に関するドキュメントを参照してください。

13.4.3.1 関数パラメータの編集

concat関数のパラメータを編集するには、関数アイコンをダブルクリックして「関数の編集 - concat」ウィンドウを表示します。このウィンドウでは、パラメータの追加、削除および並べ替えができます。新規パラメータのカンマを追加して、concat関数の出力をLast, Firstとするには、「追加」をクリックしてカンマを追加し、この出力となるようパラメータを並べ替えます。

図13-5 関数パラメータの編集

関数パラメータの編集
図mpr5.gifの説明


関連項目:

「関数の編集」ウィンドウのオンライン・ヘルプを表示するには、「ヘルプ」ボタンをクリックしてください。関数パラメータの追加、削除および並べ替え方法が記載されています。

13.4.3.2 関数の連鎖

関数を連鎖すると、複雑な式を作成できます。前述のconcat関数の出力から、先頭と末尾の空白をすべて削除するには、図13-6のようにleft-trim関数とright-trim関数を連鎖します。

関数の連鎖は、関数を接続リンクにドラッグ・アンド・ドロップすることによっても定義できます。

図13-6 関数の連鎖

関数の連鎖
図mpr6.gifの説明

13.4.3.3 名前付きテンプレート

複雑なマッピング・ロジックの中には、ビジュアル・マッピングでは表せない、または実現できないものがあります。このような状況では、名前付きテンプレートが有効です。名前付きテンプレートを使用すると、よく使用するマッピング・ロジックを反復使用できます。よく使用するマッピング・ロジックを名前付きテンプレートとして定義すると、必要に応じて何度でも使用できます。

名前付きテンプレートはソース・ビューで定義します。定義したテンプレートは、コンポーネント・パレットユーザー定義名前付きテンプレート・リストに表示されます。名前付きテンプレートは、他の関数とほぼ同じように使用できます。ただし、名前付きテンプレートの出力は、関数や他の名前付きテンプレートにはリンクできません。リンクできるのは、ターゲット・ツリーのターゲット・ノードに対してのみです。

名前付きテンプレートを記述するには、XSLT言語に習熟する必要があります。名前付きテンプレートの記述の詳細は、XSLT関連の書籍または次のURLを参照してください。

http://www.w3.org/TR/xslt

13.4.3.4 ユーザー定義関数のインポート

また、Java関数の独自セットをインポートすることも可能です。これらの関数は、関数パレットの「User Defined Extension Functions」カテゴリに表示されます。これらは他の関数と同じように使用できます。関数を追加するには、「ツール」メイン・メニューから「プリファレンス」「XSLマップ」を選択します。


関連項目:

詳細は、SOA_Oracle_home¥bpel¥samples¥demos¥XSLMapper¥ExtensionFunctions¥README.txtを参照してください。

13.4.4 XPath式の編集

トランスフォーメーション・マッピングでXPath式を使用するには、図13-7のように、コンポーネント・パレット「拡張関数」を選択し、リストのxpath-expressionをトランスフォーメーション・ウィンドウにドラッグ・アンド・ドロップします。

図13-7 XPath式の編集

図transform1.gifの説明が続きます
図transform1.gifの説明

アイコンをダブルクリックすると、図13-8に示す「XPath式の編集」ウィンドウが表示されます。[Ctrl]キーを押してから[Space]キーを押して、XPathビルディング・アシスタントを起動できます。

図13-8 「XPath式の編集」ウィンドウ

図transform2.gifの説明が続きます
図transform2.gifの説明

図13-9は、XPathビルディング・アシスタントを示しています。

図13-9 XPathビルディング・アシスタント

図transform7.gifの説明が続きます
図transform7.gifの説明


関連項目:

「XPath式の編集」ウィンドウのオンライン・ヘルプに、XPathビルディング・アシスタントの使用方法へのリンクがあります。

13.4.5 XSLT構成要素の追加

複雑なスキーマをマップする場合、状況によっては、ソース・ノードをターゲットに条件付きでマップする、またはソースの要素配列をターゲットの要素配列にマップする必要があります。XSLTマッパーでは、前述の使用例に対してターゲット・ツリーのコンテキスト・メニューで様々なXSLT構成要素が提供されます。for-eachifchooseなどのXSLT要素をスキーマ要素に追加するには、まずターゲット・ツリーで要素を選択します。右クリックし、「XSLノードの追加」を選択してコンテキスト・メニューを表示し、メニューから必要なXSLT要素を選択します。


注意:

コンポーネント・パレット「XSLT Constructs」リストおよび「http://www.w3.org/1999/XSL/Transform」リストに表示される要素は、デザイナ・ウィンドウにドラッグ・アンド・ドロップできません。


関連項目:

for-eachノードの使用例は、『Oracle BPEL Process Manager Order Bookingチュートリアル』を参照してください。

13.4.5.1 xsl:ifによる条件付き処理

HQAccountBranchAccountは、PurchaseOrderスキーマのchoice要素の一部であり、実際のインスタンスにはそのいずれか1つが出現します。ここでは、条件付きマッピングの具体例として、PurchaseOrder/HQAccount/AccountNumberが存在する場合のみ、Invoice/BilledToAccount/AccountNumberにコピーします。これには、次の手順を実行します。

  1. ターゲット・ツリーでInvoice/BilledToAccount/AccountNumberを選択し、右クリックしてコンテキスト・メニューを表示します。

  2. 「XSLノードの追加」「if」を選択し、PurchaseOrder/HQAccount/AccountNumberInvoice/BilledToAccount/ifに接続します。

  3. PurchaseOrder/HQAccount/AccountNumberInvoice/BilledToAccount/if/AccountNumberに接続します。

図13-10は、この操作の結果を示しています。

図13-10 xsl:ifによる条件付き処理

条件付き処理
図mpr11.gifの説明

13.4.5.2 xsl:chooseによる条件付き処理

PurchaseOrder/HQAccount/AccountNumberが存在する場合、Invoice/BilledToAccount/AccountNumberにコピーします。存在しない場合は、PurchaseOrder/BranchAccountInvoice/BilledToAccount/AccountNumberに次の手順でコピーします。

  1. ターゲット・ツリーでInvoice/BilledToAccount/AccountNumberを選択し、右クリックしてコンテキスト・メニューを表示します。

  2. 「XSLノードの追加」「choose」を選択し、PurchaseOrder/HQAccount/AccountNumberInvoice/BilledToAccount/choose/whenに接続して条件を定義します。

  3. PurchaseOrder/HQAccount/AccountNumberInvoice/BilledToAccount/choose/when/AccountNumberに接続します。

  4. ターゲット・ツリーで、「XSLノードの追加」により追加した「choose」を選択し、右クリックしてコンテキスト・メニューを表示します。

  5. メニューで「XSLノードの追加」→「otherwise」を選択します。

  6. PurchaseOrder/BranchAccount/AccountNumberInvoice/BilledToAccount/choose/otherwise/AccountNumberに接続します。

図13-11は、この操作の結果を示しています。

図13-11 xsl:chooseによる条件付き処理

条件付き処理
図mpr12.gifの説明

13.4.5.3 繰返しまたは配列の処理

XSLTマッパーでは、ソースの繰返し要素をターゲットの繰返し要素にコピーできます。例として、PurchaseOrder/Items/HighPriorityItems/ItemInvoice/ShippedItems/Itemに次の手順でコピーします。

  1. ターゲット・ツリーでInvoice/ShippedItems/Itemを選択し、右クリックしてコンテキスト・メニューを表示します。

  2. 「XSLノードの追加」「for-each」を選択し、PurchaseOrder/Items/HighPriorityItems/ItemInvoice/ShippedItems/for-eachに接続して繰返しを定義します。

  3. PurchaseOrder/Items/HighPriorityItems/Item/ProductNameInvoice/ShippedItems/for-each/Item/ProductNameに接続します。

  4. PurchaseOrder/Items/HighPriorityItems/Item/QuantityInvoice/ShippedItems/for-each/Item/Quantityに接続します。

  5. PurchaseOrder/Items/HighPriorityItems/Item/USPriceInvoice/ShippedItems/for-each/Item/PriceChargedに接続します。

図13-12は、この操作の結果を示しています。

図13-12 繰返しまたは配列の処理

繰返しまたは配列の処理
図mpr13.gifの説明


注意:

自動マップを実行すると、xsl:for-eachが自動で挿入されます。自動マップの動作を参照する場合、PurchaseOrder/Items/LowPriorityItemsInvoice/UnShippedItemsにドラッグ・アンド・ドロップすると、for-eachが自動的に作成されるのを確認できます。

13.4.6 ノードの自動マッピング

リーフ以外のノードをマップすると、自動マップ機能が起動します。システムでは、選択されたソースとターゲットのすべての関連ノードを自動的にリンクするよう試みます。例として、PurchaseOrder/ShipTo/AddressInvoice/ShippedTo/Addressにマップして自動マップ機能を確認してください。図13-13のように、「Address」のすべてのノードが自動的にマップされます。

図13-13 自動マップ

自動マップ
図mpr7.gifの説明

自動マップの動作は、Oracle JDeveloperのプリファレンスの設定を変更するか、トランスフォーメーション・ウィンドウを右クリックして「自動マップ・プリファレンス」を選択することで変更できます。図13-14に、このウィンドウを示します。

図13-14 「自動マップ・プリファレンス」

「自動マップ・プリファレンス」
図transform5.gifの説明

このウィンドウを使用して、自動マップを次のようにカスタマイズできます。

  • 自動マップ機能を起動すると、選択されたソースとターゲットのすべての関連ノードの自動リンクが試みられるようにできます。無効にする場合は、関連ノードを個別にマップする必要があります。

  • XSLTマッパーで検出されたソースとターゲット間の可能なマッピングがすべて表示され、また確認でき、これらを作成するかどうかを確認するようにできます。

  • 自動マップの起動前に、自動マップ・プリファレンスをカスタマイズするかどうかが表示されるようにできます。

  • ソース・ノードとターゲット・ノードの自動マップの「モード」として、「標準」または「詳細」を選択できます。これにより、XSLTマッパーが、選択されたソースとターゲットのすべての関連ノードを自動的にリンクするよう試みる際に使用する方法をカスタマイズできます。

  • ディクショナリを管理するようにできます。XSLTマッパーが、ソース・エレメントとターゲット・エレメントの自動マップを試みるときに、ディクショナリに定義されているルールを使用するようになります。


関連項目:

「自動マップ・プリファレンス」ウィンドウのオンライン・ヘルプを表示するには、「ヘルプ」ボタンをクリックしてください。各項目の説明が記載されています。

ターゲット・ノードに対するソース・マッピング候補を確認するには、ターゲット・ノードを右クリックして「一致アイテムの表示」を選択し、「自動マップ・プリファレンス」ダイアログで「OK」をクリックします。図13-15のように、「自動マップ」ウィンドウが表示されます。

図13-15 自動マッピング候補

図transform6.gifの説明が続きます
図transform6.gifの説明


関連項目:

「自動マップ」ウィンドウのオンライン・ヘルプを表示するには、「ヘルプ」ボタンをクリックしてください。各項目の説明が記載されています。

13.4.6.1 確認付き自動マップ

図13-14「自動マップの結果を確定」チェック・ボックスを選択すると、確認ウィンドウが表示されます。一致が検出されると、図13-16のように、XSLTマッパーで検出されたソースとターゲット間の可能なマッピングが表示されます。このウィンドウで、1つ以上のマッピングをフィルタできます。

図13-16 確認付き自動マップ

確認付き自動マップ
図mpr9.gifの説明


関連項目:

「自動マップ」ウィンドウのオンライン・ヘルプを表示するには、「ヘルプ」ボタンをクリックしてください。各項目の説明が記載されています。

13.4.7 マップされていないターゲット・ノードの表示

ソース・ノードに現在マップされていないターゲット・ノードのリストを表示できます。マッパー・ペイン上で右クリックし、「完了ステータス」を選択します。このウィンドウの下部に、マップされていないターゲット・ノード数の統計が表示されます。このウィンドウを使用すると、「XSLマップのテスト」ウィンドウでトランスフォーメーション・マッピング・ロジックをテストする前に、マップされていないノードを特定し、修正できます。ターゲット・ノードをリストから選択します。ノードが強調表示されます。チェック・マークは、ターゲット・ノードにマッピングが必要であることを示します。マッピングが不要の場合は、チェック・マークは表示されません。

図13-17は、「完了ステータス」ウィンドウの例です。

図13-17 「完了ステータス」ウィンドウ

図funct_complete.gifの説明が続きます
図funct_complete.gifの説明

13.4.8 ディクショナリの生成

ディクショナリは、マッピングのシノニムを捕捉したXMLファイルです。マッパー・ペインを右クリックし、「ディクショナリの生成」を選択します。ディクショナリ名と、ディクショナリを配置するディレクトリの入力を要求されます。XSLTマッパーは、ソース・エレメントとターゲット・エレメントの自動マップを試みるときに、ディクショナリに定義されているルールを使用します。たとえば、注文書を注文確認書にマップし、そのマップ定義のほとんどを後で再利用する場合を考えます。

  1. 注文書と注文確認書のマッピング・ロジックをすべて構築します。

  2. 作成したマップに対してディクショナリを生成します。

  3. 異なる注文書と注文確認書を使用し、新しいマップを作成します。

  4. Oracle JDeveloperの「ツール」メイン・メニューで、「プリファレンス」「XSLマップ」「自動マップ」の順に選択し、先に作成したディクショナリをロードします。

  5. 注文書から注文確認書への自動マッピングを実行します。

13.4.9 マップ・パラメータおよび変数の作成

マップ・パラメータおよび変数を作成できます。マップ・パラメータはソース・ツリーで作成し、マップ変数はターゲット・ツリーで作成します。

次の問題に注意してください。

  • パラメータはソース・ツリーで作成されるグローバル・パラメータで、マッピングのどこででも使用できます。

  • 変数はターゲット・ツリーで作成され、グローバル変数とローカル変数があります。ターゲット・ツリーでの定義場所により、どちらであるかが決まります。

    • グローバル変数は「<target>」ノードの真下と実際のターゲット・スキーマ(「POAcknowledge」など)の真上に定義されます。「<target>」ノードを右クリックしてグローバル変数を作成します。

    • ローカル変数は、実際のターゲット・スキーマ(スキーマ「POAcknowledge」のサブノード「name」など)の下にある特定のノードに定義されます。スコープが異なっていれば、複数のローカル変数に同じ名前を使用できます。ローカル変数を使用できるのはスコープ内のみですが、グローバル変数はマッピングの任意の場所で使用できます。

13.4.9.1 マップ・パラメータの作成

  1. ソース・ツリーのルートを右クリックして「パラメータの追加」を選択します。

    「パラメータの作成」ウィンドウが表示されます。

  2. 詳細を指定します。

    図mpr_params.gifの説明が続きます
    図mpr_params.gifの説明

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

13.4.9.2 マップ変数の作成

  1. ターゲット・ツリーのルートを右クリックして「変数の追加」を選択します。ターゲット・ツリーのルートの下にあるノードを右クリックした場合は、「変数の挿入」を選択します。

    「変数の作成」ウィンドウが表示されます。

  2. 詳細を指定します。

    図trans_addvar.gifの説明が続きます
    図trans_addvar.gifの説明

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

13.4.10 ソース・ノードとターゲット・ノードの検索

ソース・ノードとターゲット・ノードを検索できます。たとえば、invoiceというソース・ノードでpriceというサブノードの出現箇所をすべて検索できます。

  1. ソース・ノードまたはターゲット・ノードを右クリックします。

  2. 検索キーワードを入力します。

  3. 必要に応じてさらに詳細を指定します。たとえば、次のようになります。

    • 注釈テキストも検索する場合は、「注釈の検索」を選択します。

    • 検索スコープを指定します。ソース・ツリーまたはターゲット・ツリーを、選択した位置から順番に検索するか、選択したサブツリー内で検索できます。

    図mpr_find.gifの説明が続きます
    図mpr_find.gifの説明

    最初に検出された一致がハイライトされ、「検索」ウィンドウが閉じます。一致が検出されない場合は、画面にメッセージが表示されます。

  4. [F3]キーを押して、指定した方向で次の一致を検索します。逆方向に検索するには、[Shift]キーを押しながら[F3]キーを押します。


    注意:

    「テキストの設定」オプションで設定した関数またはテキスト値は検索できません。

13.4.11 XSLT文書の要素の無視

XSLTマッパーは、ソースまたはターゲット・スキーマに存在しない要素をXSLT文書から検出すると、これらを処理できなくなり、「無効なソース・ノード・パス」エラーを表示します。XSLマップ生成が失敗します。XSLTの解析中に、これら特定の要素を無視し、保存しておくようXSLTマッパーに指示するファイルを作成およびインポートできます。これを行うには、Oracle JDeveloperの「ツール」メイン・メニューで、「プリファレンス」「XSLマップ」の順に選択します。

たとえば、事前処理でmyElementおよびmyOtherElementWithNSという名前の要素が作成され、XSLT文書をグラフィカルに表示する際にこの2つの要素をXSLTマッパーに無視するよう指示するとします。これらの要素を無視する次の構文を含んだファイルを作成し、インポートします。

<elements-to-ignore>
   <element name="myElement"/>
   <element name="myOtherElementWithNS" namespace="NS"/>
</elements-to-ignore>

ファイルをインポート後、Oracle JDeveloperを再起動する必要があります。

13.4.12 XSLTマッパーでのスキーマの置換

XSLTマッパーに表示されているマップ・ソース・スキーマおよびマップ・ターゲット・スキーマを置換できます。ソース・パネルまたはターゲット・パネル上で右クリックし、「スキーマの置換え」を選択します。図13-18のように「ソースとターゲットのスキーマの選択」ウィンドウが開き、使用する新しいソースまたはターゲット・スキーマを選択できます。

図13-18 スキーマの置換

図mpr_replacesch.gifの説明が続きます
図mpr_replacesch.gifの説明

13.5 マップのテスト

XSLTマッパーには、スタイルシートまたはマップをテストするためのテスト・ユーティリティがあります。テスト・ツールを起動するには、図13-19のように、マッパーで「テスト」メニュー項目を選択します。

図13-19 「テスト」ウィンドウの起動

「テスト」ダイアログの起動
図mpr14.gifの説明

13.5.1 「XSLマップのテスト」ウィンドウ

図13-20に示す「XSLマップのテスト」ウィンドウでは、XSLTマッパーで設計したトランスフォーメーション・マッピングのロジックをテストできます。指定したテスト設定は保存され、次回にテストする際に再入力する必要はありません。Oracle JDeveloperを閉じてから再び開いた場合は、テスト設定を再入力する必要があります。

図13-20 「XSLマップのテスト」ウィンドウ

「テスト」ダイアログ
図mpr_params2.gifの説明

  1. テスト用のサンプル・ソースXMLファイルを生成できるように選択するか、「参照」をクリックして「ソースXMLファイル」フィールドで別のソースXMLファイルを指定します。

    「OK」をクリックすると、ソースXMLファイルが検証されます。検証に合格すると、トランスフォーメーションが発生し、ターゲットXMLファイルが作成されます。

    検証に失敗すると、トランスフォーメーションは発生せず、画面にメッセージが表示されます。

  2. 「ソースXMLファイルの生成」チェック・ボックスを選択し、マップのソースXSDスキーマに基づいてサンプルXMLファイルを作成します。

  3. 「ソースXMLファイルの表示」チェック・ボックスを選択し、テスト用のソースXMLファイルを表示します。ソースXMLファイルがOracle JDeveloperのXMLエディタに表示されます。

    マップのパラメータが定義されている場合は、「パラメータ」表が表示されます。値を指定する場合は、「値の指定」をクリックして「タイプ」列と「値」列を適切に編集します。

  4. 「ターゲットXMLファイル」フィールドにファイル名を入力するか、トランスフォーメーションにより作成されたXMLドキュメントを格納するファイルの名前を参照します。

  5. 「ターゲットXMLファイルの表示」チェック・ボックスを選択し、テスト用のターゲットXMLファイルを表示します。ターゲットXMLファイルがOracle JDeveloperのXMLエディタに表示されます。

  6. ソースXMLとターゲットXMLの両方を表示するように選択した場合、XMLエディタのレイアウトをカスタマイズできます。右上隅にある「自動レイアウトの有効化」を選択してパターンの1つをクリックします。

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

    テスト結果が表示されます。

    この例では、ソースXMLとターゲットXMLが横並びに表示され、その下にXSLマップが表示されます(デフォルト設定)。エディタを右クリックして「XMLの検証」を選択すると、ソースXMLまたはターゲットXMLをマップのソースまたはターゲットXSDスキーマと対照して検証できます。

    図mpr_testresults.gifの説明が続きます
    図mpr_testresults.gifの説明

13.5.2 レポートの生成

次の情報を含むHTMLレポートを生成できます。

  • XSLマップ・ファイル名、ソースおよびターゲット・スキーマ・ファイル名、ルート要素名、およびルート要素のネームスペース

  • ターゲット文書のマッピング

  • マップされていないターゲット・フィールド(必須フィールドを含む)

  • サンプル・トランスフォーメーション・マップの実行

レポートを生成するには、トランスフォーメーション・ウィンドウで右クリックし、「レポートの生成」を選択します。図13-21のように「レポートの生成」ウィンドウがトランスフォーメーション・ウィンドウ内に表示されます。マップのパラメータが定義されている場合は、「パラメータ」表が表示されることに注意してください。

図13-21 「レポートの生成」ウィンドウ

図transform3.gifの説明が続きます
図transform3.gifの説明


関連項目:

「レポートの生成」ウィンドウのオンライン・ヘルプを表示するには、「ヘルプ」ボタンをクリックしてください。詳細が記載されています。

13.5.2.1 レポート生成時のメモリー・エラーの修正

レポート生成中にメモリー不足エラーが発生した場合は、次の手順でJVMのヒープ・サイズを増やします。

  1. JDev_Oracle_Home¥jdev¥bin¥jdev.confファイルを開きます。

  2. 次のセクションを見つけます。

    # Set the maximum heap to 512M
    #
    AddVMOption     -Xmx512M
    
    
  3. 次のようにヒープ・サイズを増やします(ここでは1024に増やしています)。

    AddVMOption     -Xmx1024M
    
    

また、レポート生成前に、「レポートの生成」ウィンドウで「レポートを開く」オプションの選択を解除しておくこともできます。

13.5.3 サンプルXML生成

次のパラメータを指定することで、サンプルXML生成をカスタマイズできます。Oracle JDeveloperの「ツール」メイン・メニューで、「プリファレンス」「XSLマップ」の順に選択し、「プリファレンス」ウィンドウを表示します。

  • 繰返し要素の数

    要素の属性maxOccurs1よりも大きな値が設定されている場合は、要素の作成される発生数を指定します。指定した値が、要素のmaxOccurs属性の値より大きい場合は、その要素の作成される発生数は、指定した値ではなくmaxOccursの値になります。

  • オプション要素の生成

    選択した場合は、オプション要素(属性minOccursの値が0に設定されている要素)が、必須要素(属性minOccursの値が0よりも大きな値に設定されている要素)と同様に生成されます。

  • 最大の深さ

    サンプルXML生成で、オプション要素に起因する再帰型の発生を回避するため、オプション要素生成を制限する、XML文書階層ツリーの最大深さを指定します。

13.6 まとめ

この章では、XSLTマッパーの次の機能を説明しました。

この章では、サンプルの注文書スキーマを請求書スキーマにマップする具体的な手順を示すことで、これらの機能について説明しました。