ヘッダーをスキップ
Oracle Enterprise Service Bus 開発者ガイド
10g (10.1.3.4.0)
B50869-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

6 XSLTデータ・マッパーおよびトランスフォーメーション

この章では、XSLTデータ・マッパーの機能について説明し、ルーティング・ルールでトランスフォーメーション・マッピングを使用する手順を示します。

項目は次のとおりです。

XSLTデータ・マッパー

データ・マッパー・ツールは、ルーティング・サービスのルーティング・ルールでのデータ・トランスフォーメーションを提供します。マップ・ファイルの内容は、XSLTマッパー・トランスフォーメーション・ツールを使用して作成します。図6-1に、XSLTマッパーのレイアウトを示します。

図6-1 XSLTデータ・マッパー・ツールのサンプル

図6-1の説明は次にあります。
「図6-1 XSLTデータ・マッパー・ツールのサンプル」の説明

「ソース」および「ターゲット」スキーマはツリーとして表され、ツリー内のノードは様々なアイコンを使用して表されます。表示されているアイコンは、スキーマまたはノードのプロパティを示します。次に例を示します。

要素および属性の様々なプロパティは、図6-1の右下にある「プロパティ・インスペクタ」に表示されます(例: タイプ、カーディナリティなど)。図6-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"
    

    回避策は、各要素に一意の名前を設定することです。

データ・マッパーを使用したXSLマップの作成

XSLTデータ・マッパー・ツールを使用すると、XMLスキーマ間でデータを変換するためのxslファイルを作成できます。xslファイルを定義した後は、そのファイルを複数のルーティング・ルール仕様で再利用できます。この項では、XSLTデータ・マッパー・ツールを使用したトランスフォーメーション・マップxslファイルの作成方法の概要を示します。

データ・マッパー・ツールは、Oracle JDeveloperのルーティング・サービス・プロパティ・ページ、または「設計」タブにあるルーティング・サービス・アイコンから使用できます。新規のトランスフォーメーション・マップを作成するか、既存のトランスフォーメーション・マップを更新できます。

ルーティング・サービス・プロパティ・ページからデータ・マッパー・ツールを起動して、データ・トランスフォーメーションxslファイルを作成または更新する手順は、次のとおりです。

  1. ルーティング・サービスのプロパティ・ページを開きます。

  2. 「ルーティング・ルールの指定」の説明に従って、ルーティング・ルールの左側にある「+」をクリックして、「ルーティング・ルール」パネルを開きます。

    「ルーティング・ルール」パネルにトランスフォーメーション・マップ・アイコンが表示されます。「ルーティング・ルール」パネルにトランスフォーメーション・マップ・アイコンが表示されているルーティング・サービス・プロパティ・ページの例は、図5-8を参照してください。

  3. 図5-17に示したように、「ルーティング・ルール」パネルの「<<トランスフォーメーション・マップ>>」フィールドの右側にあるトランスフォーメーション・マップ・アイコンをクリックして、「リクエスト・トランスフォーメーション・マップ」ダイアログを開きます。

    この「リクエスト・トランスフォーメーション・マップ」ダイアログには、既存のトランスフォーメーション・マップ(XSL)ファイルを選択するか、新規のマップ・ファイルを作成するオプションが表示されます。

    図6-2 「リクエスト・トランスフォーメーション・マップ」ダイアログ

    図6-2の説明は次にあります。
    「図6-2 「リクエスト・トランスフォーメーション・マップ」ダイアログ」の説明

    ルーティング・ルールに、リプライまたはフォルトが含まれている場合、この「リクエスト・トランスフォーメーション・マップ」ダイアログには、リプライ・トランスフォーメーションまたはフォルト・トランスフォーメーション用の「リクエストをリプライ・ペイロードに含める」オプションが含まれます。このオプションを有効化すると、リクエスト・メッセージから情報を取得できます。リプライ・トランスフォーメーションまたはフォルト・トランスフォーメーション用の新規マップを作成すると、データ・マッパー・ツールのソース側にESBREQUEST変数が追加されます。「パラメータの編集」ダイアログにESBREQUESTのプロパティを表示すると、XPath式の関数を追加できます。

  4. 次のオプションから1つを選択します。

    • 「新規マッパー・ファイルの作成」を選択し、ファイル名を入力(またはデフォルト値をそのまま使用)します。

    • 「既存のマッパー・ファイルの使用」を選択し、懐中電灯アイコンをクリックして既存のマッパー・ファイルを参照(またはデフォルト値をそのまま使用)します。データ・マッパー・ツールが開き、既存のファイルを更新できます。

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

    「新規マッパー・ファイルの作成」を選択した場合は、図6-1に示すように、XSLTデータ・マッパー・ツールが開き、ソース・スキーマ要素をターゲット・スキーマ要素に関連付けることができます。

  6. ツールの一方の側にあるコンポーネントを選択し、もう一方の側の関連付けるコンポーネントにドラッグできます。最初の選択とドラッグで、「自動マップ・プリファレンス」ダイアログが表示されるため、マッピングのプリファレンスを設定できます。

    図6-3 「自動マップ・プリファレンス」ダイアログ

    図6-3の説明は次にあります。
    「図6-3 「自動マップ・プリファレンス」ダイアログ」の説明

  7. ソース要素をターゲット要素に個別にドラッグ・アンド・ドロップするか、「自動マップ・プリファレンス」ダイアログの自動マップ機能を使用できます。自動マップ・オプションおよび「類似した名前による要素の一致」オプションを有効化した場合は、「自動マップ・プリファレンス」ダイアログで「OK」をクリックすると、図6-4に示すように、ソース要素がターゲット要素に自動的にマップされます。

    図6-4 XSLTデータ・マッパーの自動マップ

    図6-4の説明は次にあります。
    「図6-4 XSLTデータ・マッパーの自動マップ」の説明

  8. 新規または既存のトランスフォーメーション・マップを編集できます。

    • 新しいリンクを追加するには、ソース要素をターゲット要素にドラッグ・アンド・ドロップします。

    • リンクを削除する(元に戻す)には、リンクを選択し、右クリックしてメニュー・オプションを表示します。コンテキスト・メニューからリンクの「元に戻す」を選択します。

    図6-5 XSLTデータ・マッパーのコンテキスト・メニュー

    図6-5の説明は次にあります。
    「図6-5 XSLTデータ・マッパーのコンテキスト・メニュー」の説明

  9. トランスフォーメーション・マップを完了した後は、「ファイル」「保存」の順に選択して、xslファイルを保存します。

データ・マッパーを直接起動するには、「設計」タブのルーティング・サービス・アイコンでデータ・トランスフォーメーション・アイコンをダブルクリックします。トランスフォーメーションが存在している場合は、データ・マッパー・ツールが開き、トランスフォーメーション・ファイルを更新できます。トランスフォーメーション・ファイルが指定されていない場合は、「リクエスト・トランスフォーメーション・マップ」ダイアログが表示され、新規トランスフォーメーション・ファイルを作成するか、更新用の既存のトランスフォーメーション・マップ・ファイルを選択できます。


注意:


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


注意:


xform.xsltなど、拡張子がxsltのファイルを選択すると、既存のxform.xsltファイルの使用を意図していた場合でも、xform.xslt.xslという名前の新規XSLファイルを作成するマッパー・ペインが開きます。xsl拡張子は、xsl拡張子が付加されていないすべてのファイルに付加され、マッピングはこの新規ファイルに作成する必要があります。回避策として、ファイルには最初にxsl拡張子を指定してください。XSLファイルの拡張子がxsltの場合は、xslに変更してください。

XSLTマッパーの使用

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

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

ソースの属性またはリーフ要素を、ターゲットの属性またはリーフ要素にコピーするには、図6-6に示すように、ソースをターゲットにドラッグ・アンド・ドロップします。

図6-6 ノードのリンク

ノードのリンク
「図6-6 ノードのリンク」の説明

定数値の設定

定数値を設定する手順は、次のとおりです。

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

  2. マウスを右クリックして、コンテキスト・メニューを起動します。

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

  4. 「テキストの設定」ウィンドウにテキストを入力します。

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

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

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

図6-7 「テキストの設定」ウィンドウ

「テキストの設定」ダイアログ・ボックス
「図6-7 「テキストの設定」ウィンドウ」の説明


関連項目:


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

関数の追加

データ・マッパーには、標準のXPath 1.0関数に加え、ビルトインの拡張関数が多数用意されています。また、ユーザー定義関数および名前付きテンプレートもサポートされています。これらの拡張関数には、接頭辞xp20またはorclが付加されており、XPath 2.0関数に類似しています。

関数の定義を表示し、データ・トランスフォーメーション・マップで関数を使用する手順は、次のとおりです。

  1. コンポーネント・パレットから、「String Functions」など、関数のカテゴリを選択します。

  2. 「lower-case」など、個々の関数を右クリックします。

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

    function_help_descript.gifの説明は次にあります。
    図版function_help_descript.gifの説明

  4. コンポーネント・パレットのいずれかの関数カテゴリから関数を選択し、データ・マッパー・ペインまでドラッグします。

    • コンポーネント・パレットからマッパー・ペインの既存のリンクに関数をドラッグできます。

      たとえば、「String Functions」の下にある「lower-case」関数を、ソース・リストのEmailからターゲット・リストのcontactemailへのリンクなど、マッパー・ペインの既存リンクにドラッグします。この関数では、ソース要素のemailの値が、ターゲット要素への出力時に小文字に変換されます。

    • 関数をマッパー・ペインの空白の領域にドラッグできます。この場合は、関数の左側のハンドルにソース要素をドラッグし、関数の右側のハンドルにターゲット要素をドラッグします。

      たとえば、「String Functions」の下にある「concat」関数をマッパー・ペインにドラッグします。CustomerData/ContactTitleCustomerData/ContactNameなど、複数のソース要素からの線を「concat」関数の左側のハンドルにドラッグします。次に、ターゲット・リストのCustomer/ShippingAddress/Title要素からの線をドラッグします。この関数では、ソース要素の複数の値が、ターゲット要素への出力時に結合されます。

  5. 関数の追加を完了した後は、「ファイル」「保存」の順に選択して、変更内容をデータ・トランスフォーメーションxslファイルに保存します。

図6-8 concat関数の使用

関数の使用
「図6-8 concat関数の使用」の説明


関連項目:


関数パラメータの編集

データ・マッパー・ペインで関数のパラメータを編集するには、関数アイコンをダブルクリックして「関数の編集」ダイアログを起動します。このウィンドウでは、パラメータの追加、削除および順序変更を実行できます。

たとえば、concat関数のパラメータを編集するには、関数アイコンをダブルクリックして「関数の編集 - concat」ウィンドウを起動します。concat関数の出力がContactTitle: Contact Nameとなるように新規パラメータを追加する場合は、「追加」をクリックして新規パラメータ':'(一重引用符で囲みます)を追加し、この出力になるようにパラメータの順序を変更します。

図6-9 関数パラメータの編集

関数パラメータの編集
「図6-9 関数パラメータの編集」の説明


関連項目:


関数パラメータの追加、削除および順序変更を実行する方法は、「関数の編集」ウィンドウで「ヘルプ」ボタンをクリックして、オンライン・ヘルプを参照してください。

関数の連鎖

関数の連鎖によって、複雑な式を作成できます。この関数の連鎖も、関数を接続リンクにドラッグ・アンド・ドロップして定義できます。

たとえば、「関数パラメータの編集」で説明したconcat関数の出力から、先頭と末尾の空白をすべて削除するには、left-trim関数とright-trim関数を使用し、これらの関数を図6-10に示すように連鎖します。

図6-10 関数の連鎖

関数の連鎖
「図6-10 関数の連鎖」の説明

名前付きテンプレート

一部の複雑なマッピング・ロジックは、ビジュアル・マッピングで表現したり、実現することができません。このような場合は、名前付きテンプレートが便利です。名前付きテンプレートを使用すると、共通のマッピング・ロジックを共有できます。共通のマッピング・ロジックを名前付きテンプレートとして定義すると、そのテンプレートは必要に応じて何度でも使用できます。

ソース・ビューで定義した名前付きテンプレートは、コンポーネント・パレット「User Defined Named Templates」リストに表示されます。名前付きテンプレートは、他の関数とほぼ同じ方法で使用できます。唯一異なる点は、名前付きテンプレートの出力は関数または別の名前付きテンプレートにリンクできないことです。名前付きテンプレートの出力をリンクできるのは、ターゲット・ツリー内のターゲット・ノードのみです。

名前付きテンプレートの作成には、XSLT言語の知識が必要です。名前付きテンプレートの作成方法の詳細は、XSLTに関する書籍を参照するか、次のURLにアクセスしてください。

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

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

Java関数の独自のセットをインポートできます。これらの関数は、「User defined Extension Functions」カテゴリの下の関数パレットに表示されます。これらの関数は、他の関数と同様に使用できます。関数を追加するには、「ツール」メイン・メニューから、「設定」「XSLマップ」の順に選択します。

XSLTマッパーのソース・ビューでは、ユーザー定義関数を次の方法で使用できます。

NamespacePrefix:FunctionName([ARGUMENT1, ARGUMENT2, ARGUMENT3...])

XSLファイルで、ネームスペース接頭辞を次のように宣言する必要があります。

"http://www.oracle.com/XSL/Transform/java/<ClassNameincludingthePackageName>"

ユーザー定義拡張関数の作成

Oracle Application Serverリリース10.1.3.4では、ESBでユーザー定義拡張関数を作成する機能がサポートされています。ユーザー定義拡張関数の独自のセットを作成する手順は、次のとおりです。

  1. ExtnFunc()メソッドを使用したSampleExtensionFunctionsクラス・ファイルを含むサンプルJavaソース・ファイルを作成します。

    package oracle.sample;
    import java.util.List;
    import javax.xml.xpath.XPathFunction;
    import javax.xml.xpath.XPathFunctionException;
    public class SampleExtensionFunctions implements XPathFunction{
                        public Object evaluate(List args) throws
    XPathFunctionException {
                    return ExtnFunc();
               }
            public static String extnFunc(){
                    return "Hello From ExtnFunc";
            }
    }
    
  2. このSampleExntensionFunctions.javaファイルをクラスパスの$ORACLE_HOME/lib/xmlparserv2.jarとコンパイルします。

  3. $ORACLE_HOME/integration/esb/system/classes/oracle/sampleディレクトリにSampleExntensionFunctions.classファイルをコピーします。


    注意:


    このディレクトリ構造がまだ存在していない場合は、手動で作成する必要があります。

  4. 次のように$ORACLE_HOME/integration/esb/config/extn-xpath-functions-config.xmlを変更します。

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- ===================================================================== -->
    <!--  XPath extension functions available to ESB 10.1.3
     -->
    <!-- ===================================================================== -->
    <esb-xpath-functions  xmlns="http://xmlns.oracle.com/soa/config/esb"
     version="10.1.3">
       <function id="ExtnFunc">
           <classname>oracle.sample.SampleExtensionFunctions</classname>
           <property id="namespace-uri">
    <value>http://www.oracle.com/XSL/Transform/java/oracle.sample.SampleExtensionFunctions</value>
              <comment>Namespace URI for this function</comment>
           </property>
           <property id="namespace-prefix">
               <value>udf</value>
               <comment>Namespace prefix for this function</comment>
           </property>
       </function></esb-xpath-functions>
    
  5. XSLファイルで、Stylesheetセクションに適切なネームスペースを、Templateセクションにユーザー定義関数を追加する必要があります。

    <?xml version="1.0" encoding="UTF-8" ?>
    <?oracle-xsl-mapper
      <!-- SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY. -->
      <mapSources>
        <source type="WSDL">
          <schema location="readFile.wsdl"/>
          <rootElement name="input" namespace="http://www.oracle.com/input"/>
        </source>
      </mapSources>
      <mapTargets>
        <target type="WSDL">
          <schema location="writeOut.wsdl"/>
          <rootElement name="output" namespace="http://www.oracle.com/output"/>
        </target>
      </mapTargets>
      <!-- GENERATED BY ORACLE XSL MAPPER 10.1.3.4.0(build 080324.0200) AT [FRI APR
     11 11:43:56 IST 2008]. -->
    ?>
    <xsl:stylesheet version="1.0"
    xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
                    xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
                    xmlns:imp1="http://www.oracle.com/input"
                    xmlns:pc="http://xmlns.oracle.com/pcbpel/"
    xmlns:ehdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.esb.server.headers.ESBHeaderFunctions"
                    xmlns:ns0="http://www.w3.org/2001/XMLSchema"
                    xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/"
                    xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
    xmlns:ns1="http://xmlns.oracle.com/pcbpel/adapter/file/writeOut/"
    xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
    xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions"
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:ns2="http://www.oracle.com/output"
                    xmlns:ora="http://schemas.oracle.com/xpath/extension"
     xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
    xmlns:orcl="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
    xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/file/readFile/"
                   xmlns:hdr="http://xmlns.oracle.com/pcbpel/adapter/file/"
    xmlns:udf="http://www.oracle.com/XSL/Transform/java/oracle.sample.SampleExtensionFunctions"
    exclude-result-prefixes="xsl plt imp1 pc ns0 jca tns hdr ns1 ns2 bpws ehdr hwf xp20 xref ora ids orcl">
      <xsl:template match="/">
        <ns2:output>
          <ns2:stringA>
            <xsl:value-of select="udf:ExtnFunc()"/>
          </ns2:stringA>
        </ns2:output>
      </xsl:template>
    </xsl:stylesheet>
    
  6. OC4J_SOAインスタンスを再起動します。

  7. プロジェクトをデプロイします。

XPath式の編集

トランスフォーメーション・マッピングでXPath式を使用するには、コンポーネント・パレットから「Advanced Functions」を選択し、リストから「xpath-expression」をデータ・マッパー・トランスフォーメーション・ペインにドラッグ・アンド・ドロップします。

アイコンをダブルクリックすると、「XPath式の編集」ダイアログが表示されます。[Ctrl]を押しながら[space]キーを押すと、図6-11に示すように、XPathビルディング・アシスタントを起動できます。

図6-11 XPathビルディング・アシスタント

図6-11の説明は次にあります。
「図6-11 XPathビルディング・アシスタント」の説明


関連項目:


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

XSLTコンストラクトの追加

複雑なスキーマのマッピングでは、ソース・ノードをターゲット・ノードに条件付きでマップしたり、ソースの要素の配列をターゲットの要素の配列にマップする必要がある場合があります。XSLTマッパーには、このような条件付きシナリオのために、ターゲット・ツリーのコンテキスト依存メニューに様々なXSLTコンストラクトが用意されています。これらのコンストラクトには、for-eachifchooseなどがあります。

for-eachifchooseなどのXSLT要素をスキーマ要素に追加する手順は、次のとおりです。

  1. ターゲット・ツリーで要素を選択します。

  2. 右クリックして「XSLノードの追加」を選択し、コンテキスト・メニューを表示します。

  3. メニュー内の必要なXSLT要素を選択します。

xsl:ifを使用した条件付き処理

ifコンストラクトを使用すると、値が存在する場合はソース要素をマップし、値が存在しない場合は別の要素の値をマップできます。たとえば、ソースにAccountRepの電話番号が含まれている場合は、その値を使用するとします。AccountRepの電話番号が存在しない場合は、Contactの電話番号を使用します。

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

  2. 「XSLノードの追加」「if」の順に選択します。

  3. あるソース要素をターゲット・ツリー内のif要素に接続します。

  4. あるソース要素をターゲット要素に接続します。

図6-12に結果を示します。

図6-12 xsl:ifを使用した条件付き処理

条件付き処理
「図6-12 xsl:ifを使用した条件付き処理」の説明

xsl:chooseを使用した条件付き処理

chooseコンストラクトを使用すると、ソース要素が存在する場合は、指定したターゲット要素にソース要素をコピーできます。ソース要素が存在しない場合は、別のソース要素をターゲット要素にコピーします。

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

  2. 「XSLノードの追加」「choose」の順に選択します。

  3. ソース要素をターゲット要素に接続して、条件を定義します。

  4. ターゲット・ツリーで「choose」を選択し、右クリックしてコンテキスト依存メニューを表示します。

  5. 「XSLノードの追加」「otherwise」の順に選択します。

  6. ソース要素を「otherwise」の下のターゲット要素に接続します。

図6-13に結果を示します。

図6-13 xsl:chooseを使用した条件付き処理

条件付き処理
「図6-13 xsl:chooseを使用した条件付き処理」の説明

繰返しまたは配列の処理

XSLTマッパーでは、ソースの繰返し要素をターゲットの繰返し要素にコピーできます。

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

  2. 「XSLノードの追加」「for-each」の順に選択します。

  3. 繰返しソース要素をターゲット要素に接続します。

図6-14に結果を示します。

図6-14 繰返しまたは配列の処理

繰返しまたは配列の処理
「図6-14 繰返しまたは配列の処理」の説明


注意:


自動マップを実行すると、xsl:for-eachが自動的に挿入されます。

ノードの自動マップ

リーフ以外のノードのマッピングでは、自動マップ機能が起動します。システムによって、図6-4に示すように、選択したソースとターゲットの下にあるすべての関連ノードの自動リンクが試行されます。

自動マップの動作は、Oracle JDeveloperのプリファレンスの設定を変更するか、トランスフォーメーション・ウィンドウを右クリックし、「自動マップ・プリファレンス」を選択して調整できます。動作の内容は、図6-3に示したウィンドウに表示されます。

このウィンドウでは、自動マッピングを次のようにカスタマイズできます。

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

  • XSLTマッパーで検出されたソースからターゲットへの考えられるすべてのマッピングを表示および確認してから、作成を確定できます。

  • 自動マップの起動前に、自動マップのプリファレンスをカスタマイズするかどうかを尋ねるプロンプトを表示できます。

  • ソース・ノードおよびターゲット・ノードの自動マッピングに対して、「標準」または「詳細」のいずれかの方法を選択できます。この結果、選択したソースとターゲットの下にあるすべての関連ノードの自動リンクを、XSLTマッパーでどのように試行するかをカスタマイズできます。

  • ディクショナリを管理できます。XSLTマッパーでは、ソース要素とターゲット要素の自動マップの試行時に、ディクショナリで定義されているルールが使用されます。


関連項目:


各フィールドの説明は、「自動マップ・プリファレンス」ウィンドウで「ヘルプ」ボタンをクリックして、オンライン・ヘルプを参照してください。

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

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

図6-15の説明は次にあります。
「図6-15 自動マッピング候補」の説明


関連項目:


各フィールドの説明は、「自動マップ」ウィンドウで「ヘルプ」ボタンをクリックして、オンライン・ヘルプを参照してください。

確認を伴う自動マップ

図6-3に示した「自動マップの結果を確定」チェック・ボックスが選択されている場合は、確認ウィンドウが表示されます。一致が検出された場合は、図6-16に示すように、XSLTマッパーで検出されたソースからターゲットへの考えられるマッピングが表示されます。このウィンドウでは、1つ以上のマッピングをフィルタリングできます。

図6-16 確認を伴う自動マップ

確認を伴う自動マップ
「図6-16 確認を伴う自動マップ」の説明


関連項目:


各フィールドの説明は、「自動マップ」ウィンドウで「ヘルプ」ボタンをクリックして、オンライン・ヘルプを参照してください。

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

ソース・ノードに現在マップされていないターゲット・ノードのリストを表示できます。図6-5に示すように、マッパー・ペインで右クリックし、「完了ステータス」を選択します。このウィンドウの下部には、マップされていないターゲット・ノードの数に関する統計が示されます。このウィンドウを使用すると、「XSLマップのテスト」ウィンドウでトランスフォーメーション・マッピング・ロジックをテストする前に、マップされていないノードを識別し、修正できます。リストのターゲット・ノードを選択します。そのノードがハイライト表示されます。チェック・マークは、ターゲット・ノードがマップされる必要があることを示しています。マップされる必要がない場合、そのチェック・ボックスは空です。

図6-17に、「完了ステータス」ウィンドウの例を示します。

図6-17 完了ステータス

図6-17の説明は次にあります。
「図6-17 完了ステータス」の説明

ディクショナリの生成

ディクショナリは、マッピングのためのシノニムを取得するXMLファイルです。図6-5に示したように、マッパー・ペインで右クリックし、「ディクショナリの生成」を選択します。この結果、ディクショナリ名とそのディクショナリを格納するディレクトリの入力を求めるプロンプトが表示されます。

XSLTデータ・マッパーでは、ソース要素とターゲット要素の自動マップの試行時に、ディクショナリに定義されているルールが使用されます。たとえば、発注を発注確認にマップし、そのマップ定義のほとんどを後で再利用する場合があります。

  1. 発注および発注確認に関するすべてのマッピング・ロジックを作成します。

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

  3. 異なる発注および発注確認を使用して新規マップを作成します。

  4. Oracle JDeveloperで「ツール」「設定」「XSLマップ」「自動マップ」の順に選択して、作成したディクショナリをロードします。

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

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

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

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

  • パラメータはソース・ツリーで作成され、グローバルであるため、マッピングのすべての場所で使用できます。

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

    • グローバル変数は<target>ノードの直下、および実際のターゲット・スキーマ(例: POAcknowledge)のすぐ上で定義されます。グローバル変数を作成するには、<target>ノードを右クリックします。

    • ローカル変数は、実際のターゲット・スキーマの下にある特定のノード(例: スキーマPOAcknowledge上のサブノードname)で定義されます。ローカル変数には、それぞれが異なるスコープ内にあるかぎり、同じ名前を設定できます。ローカル変数はそのスコープ内でのみ使用できるのに対して、グローバル変数はマッピング内のすべての場所で使用できます。

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

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

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

    create_parameter_trans.gifの説明は次にあります。
    図版create_parameter_trans.gifの説明

  2. パラメータの情報を指定します。

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

マップ変数の作成

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

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

    create_variable_trans.gifの説明は次にあります。
    図版create_variable_trans.gifの説明

  2. 変数の情報を指定します。

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

ソース・ノードおよびターゲット・ノードの検索

ソース・ノードおよびターゲット・ノードを検索できます。たとえば、Customerというソース・ノードで、Nameというサブノードをすべて検索できます。

ソース・ノードまたはターゲット・ノードを検索する手順は、次のとおりです。

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

  2. 「検索」メニュー項目を選択します。

    「ノード検索」ダイアログが表示されます。

    find_node_trans.gifの説明は次にあります。
    図版find_node_trans.gifの説明

  3. 「検索対象」フィールドに、検索するキーワードを入力します。

  4. 必要に応じて追加の詳細を指定します。次に例を示します。

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

    • 検索の範囲を指定します。ソース・ツリーまたはターゲット・ツリー全体の検索、選択した位置からの検索、または選択したサブツリー内の検索を指定できます。

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

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


    注意:


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

XSLT文書内の要素の無視

ソース・スキーマまたはターゲット・スキーマで見つからない要素が、XSLTマッパーによってXSLT文書内で検出された場合、その要素は処理されず、「無効なソース・ノード・パス({0})」エラーが表示されます。XSLマップの生成は失敗します。Oracle JDeveloperの「ツール」メイン・メニューで「設定」「XSLマップ」の順に選択すると、XSLT解析時に、これらの特定の要素を無視して保持するようにXSLTマッパーに指示するファイルを作成し、インポートできます。

たとえば、事前処理によってmyElementおよびmyOtherElementWithNSという要素が作成される場合があり、これらの要素は、XSLT文書のグラフィカル表示の作成時に、XSLTマッパーによって無視されるようにするとします。無視するこれらの要素を使用し、次の構文で記述したファイルを作成してインポートします。

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

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

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

XSLTマッパーに現在表示されているマップ・ソース・スキーマとマップ・ターゲット・スキーマは置換できます。ソース・パネルまたはターゲット・パネルのいずれかで右クリックし、「スキーマの置換え」を選択します。「ソースとターゲットのスキーマの選択」ウィンドウが開き、使用する新規ソース・スキーマまたはターゲット・スキーマを選択できます。

XSLTマッパーでのインスタンスIDの使用

ESBインスタンスIDを使用して、XSLTマッパーでメッセージ間の関連付けを設定できます。XSLTマッパーのソース・ビューで、次のようにehdr:getInstanceID()関数を使用してESBインスタンスのIDにアクセスできます。

<xsl:value-of select="ehdr:getInstanceID()"/>

次の例にサンプルXSLファイルを示します。

<xsl:template match="/">
   <imp1:Root-Element>
     <imp1:info>
       <xsl:value-of select="concat(/imp1:Root-Element/imp1:Root-Element/imp1:id,'--',
       /imp1:Root-Element/imp1:Root-Element/imp1:appname,'--',/imp1:
       Root-Element/imp1:Root-Element/imp1:operation)"/>
     </imp1:info>
     <imp1:more_info>
      <xsl:value-of select="ehdr:getInstanceID()"/>
     </imp1:more_info>
   </imp1:Root-Element>
</xsl:template>

マッパー・テスト・ユーティリティの使用

XSLTマッパーには、スタイルシートまたはマップをテストするためのテスト・ユーティリティが用意されています。このテスト・ツールは、図6-5に示したように、マッパー・ペインのコンテキスト依存メニューから「テスト」メニュー項目を選択することで起動できます。「テスト」を選択すると、図6-18に示すように、「XSLマップのテスト」ダイアログが表示されます。

指定したテスト設定は保存されるため、次回のテスト時に再度入力する必要はありません。テスト設定は、Oracle JDeveloperを閉じて再度開いた場合、もう一度入力必要があります。

ここでは、次の項目について説明します。

マップのテスト

データ・トランスフォーメーション・マップからのテストには、データ・マッパー・テスト・ユーティリティを使用します。

XSLマップをテストする手順は、次のとおりです。

  1. マッパー・ペインのコンテキスト依存メニューから「テスト」メニュー項目を選択します。

    図6-18に示すように、「XSLマップのテスト」ダイアログが表示されます。

    図6-18 「XSLマップのテスト」ダイアログ

    テスト・ダイアログ
    「図6-18 「XSLマップのテスト」ダイアログ」の説明

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

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

    検証に失敗した場合、トランスフォーメーションは実行されず、画面にメッセージが表示されます。

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

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

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

  5. 「ターゲットXMLファイル」フィールドにファイル名を入力するか、トランスフォーメーションからの結果XML文書が格納されているファイルの名前を参照します。

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

  7. ソースとターゲット両方のXMLを表示する場合は、XMLエディタのレイアウトをカスタマイズできます。「自動レイアウトの有効化」を選択し、いずれかのパターンをクリックします。

    この例では、ソースXMLとターゲットXMLが並んで表示され、その下にXSLマップが表示されています(デフォルト設定)。

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

    図6-19に示すように、テスト結果が表示されます。

    ソースXMLとターゲットXMLが、それぞれOracle JDeveloperのXMLエディタに表示されます。エディタを右クリックして「XMLの検証」を選択すると、ソースまたはターゲットのXMLを、マップのソースまたはターゲットのXSDスキーマと照合して検証できます。

図6-19 テスト・ウィンドウ

テスト・ダイアログ
「図6-19 テスト・ウィンドウ」の説明

レポートの生成

次の情報を備えたHTMLレポートを生成できます。

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

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

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

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

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

図6-20 「レポートの生成」ダイアログ

図6-20の説明は次にあります。
「図6-20 「レポートの生成」ダイアログ」の説明


関連項目:


詳細は、「レポートの生成」ウィンドウで「ヘルプ」ボタンをクリックして、オンライン・ヘルプを参照してください。

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

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

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

  2. 次のセクションに移動します。

    # Set the maximum heap to 512M
    #
    AddVMOption     -Xmx512M
    
  3. 次のように、ヒープのサイズを増やします(例: 1024に変更)。

    AddVMOption     -Xmx1024M
    

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

サンプルXMLの生成

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

  • 繰返し要素の数

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

  • オプション要素の生成

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

  • 最大の深さ

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