ヘッダーをスキップ
Oracle SOA Suite開発者ガイド
10g(10.1.3.1.0)
B31839-01
  目次へ
目次
索引へ
索引

前へ
前へ
 
次へ
次へ
 

7.5 トランスフォーメーションの作成

トランスフォーメーションは、ソース・スキーマの要素をターゲット・スキーマの要素にマップします。通常、Webサービスによって受信データに必要な書式(請求の書式など)が指定されるため、ソース・データ・スキーマ(発注など)をターゲット・データ・スキーマにマップするためのトランスフォーメーションが必要です。

transformアクティビティを使用して、トランスフォーメーション・ロジックをBPELプロセスに追加します。トランスフォーメーションでは、ソース変数とターゲット変数、マップするメッセージ部分およびXSLマップ・ファイルを定義します。図7-12に示すように、ソースおよびターゲット・スキーマのマッピングを指定するには、XSLTマッパーを使用します。

図7-12 XSLTマッパー

図7-12の説明は次にあります。
「図7-12 XSLTマッパー」の説明

XSLマップを作成する際に識別するソースおよびターゲット・スキーマは、XSLTマッパーに表示されます。ソースの属性またはリーフ要素をターゲットの属性またはリーフ要素にコピーするには、ソースをターゲットにドラッグ・アンド・ドロップします。より複雑なマッピングを行うには、関数を(中央の)マッパー・キャンバスにドラッグ・アンド・ドロップし、ソース・ノードとターゲット・ノードに関数を接続します。コンポーネント・パレットから、次のマッピング機能を使用できます。

BPELプロセスとESBプロジェクトでは、同じXSLTを使用できます。

図7-13に示すように、プロパティ・インスペクタには、選択したXSD要素のプロパティが表示されます。

図7-13 プロパティ・インスペクタ

図7-13の説明は次にあります。
「図7-13 プロパティ・インスペクタ」の説明

詳細は、『Oracle BPEL Process Manager開発者ガイド』の次のトランスフォーメーションおよびXSLTマッパーに関する項を参照してください。

7.5.1 トランスフォーメーションの作成方法

トランスフォーメーションを作成するには、transformアクティビティとXSLTマッパーを使用します。XSLTマッパーは、ソース・スキーマの要素をターゲット・スキーマの要素に割り当てます。

トランスフォーメーションを作成する手順は、次のとおりです。

  1. 「Transform」アクティビティをBPELプロセスにドラッグ・アンド・ドロップします。

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

  3. 「Transform」ダイアログ(図7-14を参照)を使用して、ソースおよびターゲットのスキーマ情報を入力します。

    図7-14 トランスフォーメーションの作成

    図7-14の説明は次にあります。
    「図7-14 トランスフォーメーションの作成」の説明

    1. 要素をマップするソース変数を選択します。

    2. マップするソースの変数パート(たとえば、発注リクエストで構成されるペイロード・スキーマ)を選択します。

    3. 要素がマップされるターゲット変数を選択します。

    4. マップされるターゲットの変数パート(たとえば、請求で構成されるペイロード・スキーマ)を選択します。

    5. マッパー・ファイル名を入力するか、デフォルト名をそのまま使用します。あるいは、懐中電灯アイコンを使用してファイルを参照します。

      このファイルには、XSLTマッパー・トランスフォーメーション・ツールを使用して作成したマッピングが格納されます。

    6. 「マッピングの作成」アイコンをクリックします。

    7. 図7-12に示すように、XSLTマッパーを使用して、ソース属性またはリーフ要素をターゲット属性またはリーフ要素にドラッグ・アンド・ドロップします。この作業を簡素化するには、コンポーネント・パレットの関数および自動マップ機能を使用します。

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

XSLTマッパーでソースからターゲットにドラッグする手順については、『Oracle BPEL Process Manager Order Bookingチュートリアル』を参照してください。

7.5.2 トランスフォーメーション作成時の処理内容

XSLTマッパーを使用すると、トランスフォーメーションがXSLマップ・ファイルに取得されます。例7-5に、SOAOrderBooking.wsdlの注文スキーマを、Web注文サービスに必要なデータベース・スキーマにマップする、TransformOrder.xslのソース・コードを示します。

例7-5 TransformOrder.xslのソース・コード

<?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="SOAOrderBooking.wsdl"/>
      <rootElement name="SOAOrderBookingProcessRequest" namespace="http://
        www.globalcompany.com/ns/OrderBooking"/>
    </source>
  </mapSources>
  <mapTargets>
    <target type="XSD">
      <schema location="Order_table.xsd"/>
      <rootElement name="OrdersCollection" namespace="http://
        xmlns.oracle.com/pcbpel/adapter/db/top/Order"/>
    </target>
  </mapTargets>
  <!-- GENERATED BY ORACLE XSL MAPPER 10.1.3.1.0(build 060515.0101) AT [SAT JUL 08 16:58:22 PDT 2006]. -->
?>
<xsl:stylesheet version="1.0"
                xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
                xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
                xmlns:ns1="http://xmlns.oracle.com/SOAOrderBooking"
                xmlns:ns4="http://www.globalcompany.com/ns/OrderBooking/rules"
                xmlns:ns0="http://www.w3.org/2001/XMLSchema"
                xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
                xmlns:xp20="http://www.oracle.com/XSL/Transform/java/
                  oracle.tip.pc.services.functions.Xpath20"
                xmlns:client="http://www.globalcompany.com/ns/OrderBooking"
                xmlns:ns2="http://xmlns.oracle.com/pcbpel/adapter/db/top/Order"
                xmlns:cu="http://www.globalcompany.com/ns/customer"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:po="http://www.globalcompany.com/ns/order"
                xmlns:wf="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"
                exclude-result-prefixes="xsl plnk ns4 ns0 client po ns2 bpws hwf xp20 wf ids orcl">
  <xsl:template match="/">
    <ns3:OrdersCollection>
      <ns3:Orders>
        <ns3:comments>
          <xsl:value-of select="/client:SOAOrderBookingProcessRequest/po:PurchaseOrder/
            po:OrderInfo/po:OrderComments"/>
        </ns3:comments>
        <ns3:itemsCollection>
          <xsl:for-each select="/client:SOAOrderBookingProcessRequest/po:PurchaseOrder/
            po:OrderItems/po:Item">
            <ns3:Items>
              <ns3:partnum>
                <xsl:value-of select="po:partnum"/>
              </ns3:partnum>
              <ns3:price>
                <xsl:value-of select="po:price"/>
              </ns3:price>
              <ns3:productname>
                <xsl:value-of select="po:ProductName"/>
              </ns3:productname>
              <ns3:quantity>
                <xsl:value-of select="po:Quantity"/>
              </ns3:quantity>
            </ns3:Items>
          </xsl:for-each>
        </ns3:itemsCollection>
      </ns3:Orders>
    </ns3:OrdersCollection>
  </xsl:template>
</xsl:stylesheet>