この章では、XSLTマッパーの機能について説明し、サンプルの注文書スキーマを請求書スキーマにマップする具体的な手順を示します。
この章の内容は次のとおりです。
トランスフォーメーションはXSLマップ・ファイル内で実行されます。このファイル内で、ソース・スキーマ要素をターゲット・スキーマ要素にマップします。この項では、XSLマップ・ファイルの2つの作成方法について説明します。
Transformアクティビティにより、XSLTマッパー・ツールを使用してトランスフォーメーションを作成できます。このツールを使用すると、ソース要素をターゲット要素にマップできます。たとえば、受信したソース注文書スキーマ・データを、送信する請求書スキーマ・データにマップできます。
コンポーネント・パレットからTransformアクティビティをBPELプロセス・ダイアグラムにドラッグ・アンド・ドロップします。
Transformアクティビティをダブルクリックします。
「Transform」ウィンドウが表示されます。
次の情報を指定します。
要素のマップ元となるソース変数
マップ元となる変数のソース・パート(たとえば、発注リクエストで構成されるペイロード・スキーマ)
要素のマップ先になるターゲット変数
マップ先となる変数のターゲット・パート(たとえば、請求書で構成されるペイロード・スキーマ)
「マッパー・ファイル」フィールドで、マップ・ファイル名を指定するかまたはデフォルト名をそのまま使用します。マップ・ファイルは、XSLTマッパー・トランスフォーメーション・ツールを使用して、マッピングを作成するファイルです。
マジック・ワンド・アイコン(2番目のアイコン)をクリックして新しいマッピングを作成します。ファイルが存在する場合は、メモ帳アイコン(3番目のアイコン)をクリックしてマッピングを編集します。
XSLTマッパーが表示されます。
「XSLTマッパーの概要」に進んでXSLTマッパーの使用方法の概要を確認します。
注意: 拡張子.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マップの作成方法の概要を示しています。
Oracle JDeveloperで、新規XSLマップを作成するアプリケーション・プロジェクトを選択します。
po.xsdおよびinvoice.xsdファイルを(たとえばOracle JDeveloperの「構造」セクションで「スキーマ」を右クリックして「スキーマのインポート」を選択して)プロジェクトにインポートします。
選択したプロジェクトを右クリックし、「新規」を選択します。
「新規ギャラリ」ダイアログが表示されます。
「カテゴリ」ツリーで、「General」を開いて「XML」を選択します。
「項目」リストで、「XSLマップ」をダブルクリックします。
「XSLマップ・ファイルの作成」ダイアログが表示されます。このウィンドウでは、ソースのスキーマ・ファイルまたはWSDLファイルのルート要素を、ターゲットのスキーマ・ファイルまたはWSDLファイルのルート要素にマップするXSLマップ・ファイルを作成できます。
プロジェクトに追加されたスキーマ・ファイルは、「プロジェクトのスキーマ・ファイル」に表示されます。
プロジェクトの一部ではないスキーマ・ファイルは、スキーマ・ファイルのインポート機能を使用してインポートできます。「スキーマ・ファイルのインポート」アイコン(スキーマ・ファイル・リストの右上にある1番目のアイコン)をクリックしてください。
「ファイル名」フィールドにXSLマップ・ファイル名を入力します。
「ソース」の下で、「プロジェクトのスキーマ・ファイル」→「po.xsd」を開き、ソースのルート要素として「PurchaseOrder」を開きます。
「ターゲット」の下で、「プロジェクトのスキーマ・ファイル」→「invoice.xsd」を開き、ターゲットのルート要素として「Invoice」を開きます。
「OK」をクリックします。
新規XSLマップが作成されます。
この時点でファイルを保存して閉じるか、トランスフォーメーションの設計を開始します。XSLTマッパー・ツールの使用方法は、「XSLTマッパーの概要」を参照してください。
コンポーネント・パレットからTransformアクティビティをBPELプロセスにドラッグ・アンド・ドロップします。
Transformアクティビティをダブルクリックします。
次の情報を指定します。
要素のマップ元となるソース変数
マップ元となる変数のソース・パート(たとえば、発注リクエストで構成されるペイロード・スキーマ)
要素のマップ先になるターゲット変数
マップ先となる変数のターゲット・パート(たとえば、請求書で構成されるペイロード・スキーマ)
「マッパー・ファイル」フィールドの右側にある懐中電灯アイコン(最初のアイコン)をクリックし、手順6で指定したマップ・ファイル名を参照します。
「開く」をクリックします。
「OK」をクリックします。
XSLTマッパーにXSLマップ・ファイルが表示されます。
「XSLTマッパーの概要」に進んでXSLTマッパーの使用方法の概要を確認します。
XSLTマッパー・トランスフォーメーション・ツールを使用して、マップ・ファイルのコンテンツを作成します。図13-1は、XSLTマッパーのレイアウトを示しています。
「ソース」および「ターゲット」のスキーマは、ツリーとして表現され、ツリーの各ノードは様々なアイコンで示されます。表示されるアイコンは、ノードのスキーマまたはプロパティに応じて変化します。たとえば、次のようになります。
XSD属性は、XSD要素とは異なるアイコンで示される。
オプション要素は、必須要素とは異なるアイコンで示される。
繰返し要素は、非繰返し要素とは異なるアイコンで示される、など。
要素および属性の各種プロパティ(タイプ、カーディナリティなど)は、図13-1の右下のプロパティ・インスペクタに表示されます。図13-1右上の関数パレットから、XSLTマッパーの提供するすべての関数を利用できます。マッパー・ペイン(キャンバス)は、関数をドロップしてそれらをソース・ノードやターゲット・ノードに接続するための実際の描画領域です。
XSLTマッパーには、3つの独立したコンテキスト・メニューがあります。
ソース・パネルのコンテキスト・メニュー
ターゲット・パネルのコンテキスト・メニュー
中間のマッパー・ペイン(キャンバス)のコンテキスト・メニュー
3つの個別パネルでそれぞれ右クリックすると、各コンテキスト・メニューを確認できます。また、「自動マップを元に戻す」、「やり直し」、「削除」および「すべて削除」の機能一式を使用できます。
ターゲット・ツリーの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"
これを回避するため、各要素に一意の名前を割り当てます。
次の各項では、XSLTマッパーの使用方法について説明します。
ソースの属性またはリーフ要素をターゲットの属性またはリーフ要素にコピーするには、ソースをターゲットにドラッグ・アンド・ドロップします。図13-2のように、要素PurchaseOrder/IDをInvoice/IDにコピーし、属性PurchaseOrder/OrderDateをInvoice/InvoiceDateにコピーします。
定数値の設定は、次の手順で行います。
ターゲット・ツリーのノードを選択します。
マウスの右クリックで、コンテキスト・メニューを表示します。
「テキストの設定」メニュー・オプションを選択します。
「テキストの設定」ウィンドウで、テキスト(たとえば図13-3で示しているDiscount Appliedなど)を入力します。
「OK」をクリックしてテキストを保存します。
関連付けられたテキストのあるノードの横には、「T」アイコンが表示されます。
ノードに関連付けられたテキストを削除するには、ノードを右クリックし、「テキストの設定」ウィンドウを再度表示します。テキストを削除して「OK」をクリックします。
関連項目: 詳細は、「テキストの設定」ウィンドウのオンライン・ヘルプを参照してください。 |
標準のXPath 1.0関数に加え、マッパーでは、多くのビルトイン拡張関数を使用できます。また、マッパーは、ユーザー定義関数や名前付きテンプレートにも対応しています。拡張関数には、xp20またはorclという接頭辞があり、XPath 2.0関数に類似しています。
次の手順に従い、関数定義を表示し、関数を使用します。
コンポーネント・パレットで関数のカテゴリ(String Functionsなど)を選択します。
個別の関数(lower-caseなど)を右クリックします。
「ヘルプ」を選択します。関数の説明を含むウィンドウが表示されます。下部のリンクをクリックして、World Wide Web Consortium(www.w3.org
)にあるこの関数の説明にアクセスすることもできます。
concat関数をマッパー・ペインにドラッグします。この関数を使用すると、ソース・ツリーのソース・パラメータを関数に接続し、関数の出力をターゲット・ツリーのノードに接続できます。
PurchaseOrder/ShipTo/Name/FirstとPurchaseOrder/ShipTo/Name/Lastを連結します。姓および名からスレッドをドラッグし、concat関数の左側にドロップして、Invoice/ShippedTo/Nameに結果を設定します。ShippedTo名からもスレッドをドラッグし、concat関数の右側に接続します。図13-4を参照してください。
concat関数のパラメータを編集するには、関数アイコンをダブルクリックして「関数の編集 - concat」ウィンドウを表示します。このウィンドウでは、パラメータの追加、削除および並べ替えができます。新規パラメータのカンマを追加して、concat関数の出力をLast, Firstとするには、「追加」をクリックしてカンマを追加し、この出力となるようパラメータを並べ替えます。
関連項目: 「関数の編集」ウィンドウのオンライン・ヘルプを表示するには、「ヘルプ」ボタンをクリックしてください。関数パラメータの追加、削除および並べ替え方法が記載されています。 |
関数を連鎖すると、複雑な式を作成できます。前述のconcat関数の出力から、先頭と末尾の空白をすべて削除するには、図13-6のようにleft-trim関数とright-trim関数を連鎖します。
関数の連鎖は、関数を接続リンクにドラッグ・アンド・ドロップすることによっても定義できます。
複雑なマッピング・ロジックの中には、ビジュアル・マッピングでは表せない、または実現できないものがあります。このような状況では、名前付きテンプレートが有効です。名前付きテンプレートを使用すると、よく使用するマッピング・ロジックを反復使用できます。よく使用するマッピング・ロジックを名前付きテンプレートとして定義すると、必要に応じて何度でも使用できます。
名前付きテンプレートはソース・ビューで定義します。定義したテンプレートは、コンポーネント・パレットのユーザー定義名前付きテンプレート・リストに表示されます。名前付きテンプレートは、他の関数とほぼ同じように使用できます。ただし、名前付きテンプレートの出力は、関数や他の名前付きテンプレートにはリンクできません。リンクできるのは、ターゲット・ツリーのターゲット・ノードに対してのみです。
名前付きテンプレートを記述するには、XSLT言語に習熟する必要があります。名前付きテンプレートの記述の詳細は、XSLT関連の書籍または次のURLを参照してください。
http://www.w3.org/TR/xslt
トランスフォーメーション・マッピングでXPath式を使用するには、図13-7のように、コンポーネント・パレットで「拡張関数」を選択し、リストのxpath-expressionをトランスフォーメーション・ウィンドウにドラッグ・アンド・ドロップします。
アイコンをダブルクリックすると、図13-8に示す「XPath式の編集」ウィンドウが表示されます。[Ctrl]キーを押してから[Space]キーを押して、XPathビルディング・アシスタントを起動できます。
図13-9は、XPathビルディング・アシスタントを示しています。
関連項目: 「XPath式の編集」ウィンドウのオンライン・ヘルプに、XPathビルディング・アシスタントの使用方法へのリンクがあります。 |
複雑なスキーマをマップする場合、状況によっては、ソース・ノードをターゲットに条件付きでマップする、またはソースの要素配列をターゲットの要素配列にマップする必要があります。XSLTマッパーでは、前述の使用例に対してターゲット・ツリーのコンテキスト・メニューで様々なXSLT構成要素が提供されます。for-each、if、chooseなどのXSLT要素をスキーマ要素に追加するには、まずターゲット・ツリーで要素を選択します。右クリックし、「XSLノードの追加」を選択してコンテキスト・メニューを表示し、メニューから必要なXSLT要素を選択します。
注意: コンポーネント・パレットの「XSLT Constructs」リストおよび「http://www.w3.org/1999/XSL/Transform」リストに表示される要素は、デザイナ・ウィンドウにドラッグ・アンド・ドロップできません。 |
関連項目: for-eachノードの使用例は、『Oracle BPEL Process Manager Order Bookingチュートリアル』を参照してください。 |
HQAccountとBranchAccountは、PurchaseOrderスキーマのchoice要素の一部であり、実際のインスタンスにはそのいずれか1つが出現します。ここでは、条件付きマッピングの具体例として、PurchaseOrder/HQAccount/AccountNumberが存在する場合のみ、Invoice/BilledToAccount/AccountNumberにコピーします。これには、次の手順を実行します。
ターゲット・ツリーでInvoice/BilledToAccount/AccountNumberを選択し、右クリックしてコンテキスト・メニューを表示します。
「XSLノードの追加」→「if」を選択し、PurchaseOrder/HQAccount/AccountNumberをInvoice/BilledToAccount/ifに接続します。
PurchaseOrder/HQAccount/AccountNumberをInvoice/BilledToAccount/if/AccountNumberに接続します。
図13-10は、この操作の結果を示しています。
PurchaseOrder/HQAccount/AccountNumberが存在する場合、Invoice/BilledToAccount/AccountNumberにコピーします。存在しない場合は、PurchaseOrder/BranchAccountをInvoice/BilledToAccount/AccountNumberに次の手順でコピーします。
ターゲット・ツリーでInvoice/BilledToAccount/AccountNumberを選択し、右クリックしてコンテキスト・メニューを表示します。
「XSLノードの追加」→「choose」を選択し、PurchaseOrder/HQAccount/AccountNumberをInvoice/BilledToAccount/choose/whenに接続して条件を定義します。
PurchaseOrder/HQAccount/AccountNumberをInvoice/BilledToAccount/choose/when/AccountNumberに接続します。
ターゲット・ツリーで、「XSLノードの追加」により追加した「choose」を選択し、右クリックしてコンテキスト・メニューを表示します。
メニューで「XSLノードの追加」→「otherwise」を選択します。
PurchaseOrder/BranchAccount/AccountNumberをInvoice/BilledToAccount/choose/otherwise/AccountNumberに接続します。
図13-11は、この操作の結果を示しています。
XSLTマッパーでは、ソースの繰返し要素をターゲットの繰返し要素にコピーできます。例として、PurchaseOrder/Items/HighPriorityItems/ItemをInvoice/ShippedItems/Itemに次の手順でコピーします。
ターゲット・ツリーでInvoice/ShippedItems/Itemを選択し、右クリックしてコンテキスト・メニューを表示します。
「XSLノードの追加」→「for-each」を選択し、PurchaseOrder/Items/HighPriorityItems/ItemをInvoice/ShippedItems/for-eachに接続して繰返しを定義します。
PurchaseOrder/Items/HighPriorityItems/Item/ProductNameをInvoice/ShippedItems/for-each/Item/ProductNameに接続します。
PurchaseOrder/Items/HighPriorityItems/Item/QuantityをInvoice/ShippedItems/for-each/Item/Quantityに接続します。
PurchaseOrder/Items/HighPriorityItems/Item/USPriceをInvoice/ShippedItems/for-each/Item/PriceChargedに接続します。
図13-12は、この操作の結果を示しています。
注意: 自動マップを実行すると、xsl:for-eachが自動で挿入されます。自動マップの動作を参照する場合、PurchaseOrder/Items/LowPriorityItemsをInvoice/UnShippedItemsにドラッグ・アンド・ドロップすると、for-eachが自動的に作成されるのを確認できます。 |
リーフ以外のノードをマップすると、自動マップ機能が起動します。システムでは、選択されたソースとターゲットのすべての関連ノードを自動的にリンクするよう試みます。例として、PurchaseOrder/ShipTo/AddressをInvoice/ShippedTo/Addressにマップして自動マップ機能を確認してください。図13-13のように、「Address」のすべてのノードが自動的にマップされます。
自動マップの動作は、Oracle JDeveloperのプリファレンスの設定を変更するか、トランスフォーメーション・ウィンドウを右クリックして「自動マップ・プリファレンス」を選択することで変更できます。図13-14に、このウィンドウを示します。
このウィンドウを使用して、自動マップを次のようにカスタマイズできます。
自動マップ機能を起動すると、選択されたソースとターゲットのすべての関連ノードの自動リンクが試みられるようにできます。無効にする場合は、関連ノードを個別にマップする必要があります。
XSLTマッパーで検出されたソースとターゲット間の可能なマッピングがすべて表示され、また確認でき、これらを作成するかどうかを確認するようにできます。
自動マップの起動前に、自動マップ・プリファレンスをカスタマイズするかどうかが表示されるようにできます。
ソース・ノードとターゲット・ノードの自動マップの「モード」として、「標準」または「詳細」を選択できます。これにより、XSLTマッパーが、選択されたソースとターゲットのすべての関連ノードを自動的にリンクするよう試みる際に使用する方法をカスタマイズできます。
ディクショナリを管理するようにできます。XSLTマッパーが、ソース・エレメントとターゲット・エレメントの自動マップを試みるときに、ディクショナリに定義されているルールを使用するようになります。
関連項目: 「自動マップ・プリファレンス」ウィンドウのオンライン・ヘルプを表示するには、「ヘルプ」ボタンをクリックしてください。各項目の説明が記載されています。 |
ターゲット・ノードに対するソース・マッピング候補を確認するには、ターゲット・ノードを右クリックして「一致アイテムの表示」を選択し、「自動マップ・プリファレンス」ダイアログで「OK」をクリックします。図13-15のように、「自動マップ」ウィンドウが表示されます。
関連項目: 「自動マップ」ウィンドウのオンライン・ヘルプを表示するには、「ヘルプ」ボタンをクリックしてください。各項目の説明が記載されています。 |
ソース・ノードに現在マップされていないターゲット・ノードのリストを表示できます。マッパー・ペイン上で右クリックし、「完了ステータス」を選択します。このウィンドウの下部に、マップされていないターゲット・ノード数の統計が表示されます。このウィンドウを使用すると、「XSLマップのテスト」ウィンドウでトランスフォーメーション・マッピング・ロジックをテストする前に、マップされていないノードを特定し、修正できます。ターゲット・ノードをリストから選択します。ノードが強調表示されます。チェック・マークは、ターゲット・ノードにマッピングが必要であることを示します。マッピングが不要の場合は、チェック・マークは表示されません。
図13-17は、「完了ステータス」ウィンドウの例です。
ディクショナリは、マッピングのシノニムを捕捉したXMLファイルです。マッパー・ペインを右クリックし、「ディクショナリの生成」を選択します。ディクショナリ名と、ディクショナリを配置するディレクトリの入力を要求されます。XSLTマッパーは、ソース・エレメントとターゲット・エレメントの自動マップを試みるときに、ディクショナリに定義されているルールを使用します。たとえば、注文書を注文確認書にマップし、そのマップ定義のほとんどを後で再利用する場合を考えます。
注文書と注文確認書のマッピング・ロジックをすべて構築します。
作成したマップに対してディクショナリを生成します。
異なる注文書と注文確認書を使用し、新しいマップを作成します。
Oracle JDeveloperの「ツール」メイン・メニューで、「プリファレンス」→「XSLマップ」→「自動マップ」の順に選択し、先に作成したディクショナリをロードします。
注文書から注文確認書への自動マッピングを実行します。
マップ・パラメータおよび変数を作成できます。マップ・パラメータはソース・ツリーで作成し、マップ変数はターゲット・ツリーで作成します。
次の問題に注意してください。
パラメータはソース・ツリーで作成されるグローバル・パラメータで、マッピングのどこででも使用できます。
変数はターゲット・ツリーで作成され、グローバル変数とローカル変数があります。ターゲット・ツリーでの定義場所により、どちらであるかが決まります。
グローバル変数は「<target>」ノードの真下と実際のターゲット・スキーマ(「POAcknowledge」など)の真上に定義されます。「<target>」ノードを右クリックしてグローバル変数を作成します。
ローカル変数は、実際のターゲット・スキーマ(スキーマ「POAcknowledge」のサブノード「name」など)の下にある特定のノードに定義されます。スコープが異なっていれば、複数のローカル変数に同じ名前を使用できます。ローカル変数を使用できるのはスコープ内のみですが、グローバル変数はマッピングの任意の場所で使用できます。
ソース・ツリーのルートを右クリックして「パラメータの追加」を選択します。
「パラメータの作成」ウィンドウが表示されます。
詳細を指定します。
「OK」をクリックします。
ターゲット・ツリーのルートを右クリックして「変数の追加」を選択します。ターゲット・ツリーのルートの下にあるノードを右クリックした場合は、「変数の挿入」を選択します。
「変数の作成」ウィンドウが表示されます。
詳細を指定します。
「OK」をクリックします。
ソース・ノードとターゲット・ノードを検索できます。たとえば、invoiceというソース・ノードでpriceというサブノードの出現箇所をすべて検索できます。
ソース・ノードまたはターゲット・ノードを右クリックします。
検索キーワードを入力します。
必要に応じてさらに詳細を指定します。たとえば、次のようになります。
注釈テキストも検索する場合は、「注釈の検索」を選択します。
検索スコープを指定します。ソース・ツリーまたはターゲット・ツリーを、選択した位置から順番に検索するか、選択したサブツリー内で検索できます。
最初に検出された一致がハイライトされ、「検索」ウィンドウが閉じます。一致が検出されない場合は、画面にメッセージが表示されます。
[F3]キーを押して、指定した方向で次の一致を検索します。逆方向に検索するには、[Shift]キーを押しながら[F3]キーを押します。
注意: 「テキストの設定」オプションで設定した関数またはテキスト値は検索できません。 |
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を再起動する必要があります。
XSLTマッパーに表示されているマップ・ソース・スキーマおよびマップ・ターゲット・スキーマを置換できます。ソース・パネルまたはターゲット・パネル上で右クリックし、「スキーマの置換え」を選択します。図13-18のように「ソースとターゲットのスキーマの選択」ウィンドウが開き、使用する新しいソースまたはターゲット・スキーマを選択できます。
XSLTマッパーには、スタイルシートまたはマップをテストするためのテスト・ユーティリティがあります。テスト・ツールを起動するには、図13-19のように、マッパーで「テスト」メニュー項目を選択します。
図13-20に示す「XSLマップのテスト」ウィンドウでは、XSLTマッパーで設計したトランスフォーメーション・マッピングのロジックをテストできます。指定したテスト設定は保存され、次回にテストする際に再入力する必要はありません。Oracle JDeveloperを閉じてから再び開いた場合は、テスト設定を再入力する必要があります。
テスト用のサンプル・ソースXMLファイルを生成できるように選択するか、「参照」をクリックして「ソースXMLファイル」フィールドで別のソースXMLファイルを指定します。
「OK」をクリックすると、ソースXMLファイルが検証されます。検証に合格すると、トランスフォーメーションが発生し、ターゲットXMLファイルが作成されます。
検証に失敗すると、トランスフォーメーションは発生せず、画面にメッセージが表示されます。
「ソースXMLファイルの生成」チェック・ボックスを選択し、マップのソースXSDスキーマに基づいてサンプルXMLファイルを作成します。
「ソースXMLファイルの表示」チェック・ボックスを選択し、テスト用のソースXMLファイルを表示します。ソースXMLファイルがOracle JDeveloperのXMLエディタに表示されます。
マップのパラメータが定義されている場合は、「パラメータ」表が表示されます。値を指定する場合は、「値の指定」をクリックして「タイプ」列と「値」列を適切に編集します。
「ターゲットXMLファイル」フィールドにファイル名を入力するか、トランスフォーメーションにより作成されたXMLドキュメントを格納するファイルの名前を参照します。
「ターゲットXMLファイルの表示」チェック・ボックスを選択し、テスト用のターゲットXMLファイルを表示します。ターゲットXMLファイルがOracle JDeveloperのXMLエディタに表示されます。
ソースXMLとターゲットXMLの両方を表示するように選択した場合、XMLエディタのレイアウトをカスタマイズできます。右上隅にある「自動レイアウトの有効化」を選択してパターンの1つをクリックします。
「OK」をクリックします。
テスト結果が表示されます。
この例では、ソースXMLとターゲットXMLが横並びに表示され、その下にXSLマップが表示されます(デフォルト設定)。エディタを右クリックして「XMLの検証」を選択すると、ソースXMLまたはターゲットXMLをマップのソースまたはターゲットXSDスキーマと対照して検証できます。
次の情報を含むHTMLレポートを生成できます。
XSLマップ・ファイル名、ソースおよびターゲット・スキーマ・ファイル名、ルート要素名、およびルート要素のネームスペース
ターゲット文書のマッピング
マップされていないターゲット・フィールド(必須フィールドを含む)
サンプル・トランスフォーメーション・マップの実行
レポートを生成するには、トランスフォーメーション・ウィンドウで右クリックし、「レポートの生成」を選択します。図13-21のように「レポートの生成」ウィンドウがトランスフォーメーション・ウィンドウ内に表示されます。マップのパラメータが定義されている場合は、「パラメータ」表が表示されることに注意してください。
関連項目: 「レポートの生成」ウィンドウのオンライン・ヘルプを表示するには、「ヘルプ」ボタンをクリックしてください。詳細が記載されています。 |
レポート生成中にメモリー不足エラーが発生した場合は、次の手順でJVMのヒープ・サイズを増やします。
JDev_Oracle_Home
¥jdev¥bin¥jdev.conf
ファイルを開きます。
次のセクションを見つけます。
# Set the maximum heap to 512M # AddVMOption -Xmx512M
次のようにヒープ・サイズを増やします(ここでは1024
に増やしています)。
AddVMOption -Xmx1024M
また、レポート生成前に、「レポートの生成」ウィンドウで「レポートを開く」オプションの選択を解除しておくこともできます。
次のパラメータを指定することで、サンプルXML生成をカスタマイズできます。Oracle JDeveloperの「ツール」メイン・メニューで、「プリファレンス」→「XSLマップ」の順に選択し、「プリファレンス」ウィンドウを表示します。
要素の属性maxOccurs
に1
よりも大きな値が設定されている場合は、要素の作成される発生数を指定します。指定した値が、要素のmaxOccurs
属性の値より大きい場合は、その要素の作成される発生数は、指定した値ではなくmaxOccurs
の値になります。
選択した場合は、オプション要素(属性minOccurs
の値が0
に設定されている要素)が、必須要素(属性minOccurs
の値が0
よりも大きな値に設定されている要素)と同様に生成されます。
サンプルXML生成で、オプション要素に起因する再帰型の発生を回避するため、オプション要素生成を制限する、XML文書階層ツリーの最大深さを指定します。
この章では、XSLTマッパーの次の機能を説明しました。
XSLマップ・ファイルの作成
ノードのリンクによるコピー
関数の作成
関数の連鎖
XPath式の編集
if、choose、otherwiseおよびfor-eachなどのXSLT構成要素の追加
ターゲットとソース・ノードの自動マッピング
マップされていないターゲット・ノードの表示
ディクショナリの生成
マップ・パラメータおよび変数の作成
ソース・ノードとターゲット・ノードの検索
XSLT文書の要素の無視
XSLTマッパーでのスキーマの置換
マッピングのテスト
マッピング・レポートの生成
この章では、サンプルの注文書スキーマを請求書スキーマにマップする具体的な手順を示すことで、これらの機能について説明しました。