この章では、トランスレーションに使用されるネイティブ・スキーマを作成できる、ネイティブ・フォーマット・ビルダー・ウィザードを説明します。スキーマの使用例やコンストラクトも用意されています。
この章には、次の項が含まれます。
各Oracle JCAアダプタは、様々なエンタープライズ情報システム(EIS)とOracle BPEL Process Manager(Oracle BPEL PM)またはOracle Mediator(メディエータ)の統合を可能にするソフトウェア・コンポーネントです。アダプタは、ネイティブ・メッセージをXMLまたは非XMLフォーマットで受け取り、Oracle BPEL PMまたはメディエータにXMLメッセージとしてパブリッシュします。また、XMLメッセージを受け取り、ネイティブEISフォーマットに変換することもできます。このネイティブ・データ・フォーマットとXMLの間の変換は、定義ファイル(非XMLスキーマ定義)を使用して実行され、定義ファイル自体はXMLスキーマ・フォーマットで定義されます。ネイティブ・フォーマット・ビルダー・ウィザードを使用すると、サンプル・ネイティブ・データを使用し、ネイティブXSD(NXSD)構文をネイティブ・データの変換用に作成できます。
図6-1に示すように、アダプタ構成ウィザードの「メッセージ」ページで「ネイティブ・フォーマットのスキーマの定義」ボタンをクリックすると、ネイティブ・フォーマット・ビルダー・ウィザードが表示されます。「メッセージ」ページは、アダプタ構成ウィザードで「終了」ページの前に表示される最後のページです。
ネイティブ・フォーマット・ビルダー・ウィザードでは、図6-2に示されているファイル形式からのネイティブ・スキーマ・ファイルの作成を支援します。ネイティブ・スキーマを作成するには、選択されたタイプのサンプル・データのファイル形式が必要です。また、このウィザードを使用して作成された既存のネイティブ・スキーマ(Document Type Definition(DTD)またはCOBOLコピーブック・ファイル・タイプから生成されたものを除く)を編集することもできます。ネイティブ・スキーマ・ファイルの編集については、第6.1.2項「ネイティブ・スキーマ・ファイルの編集」を参照してください。
このオプションを選択すると、ユーザーが指定したCOBOLコピーブック定義からネイティブ・スキーマを生成できます。
COBOLメインフレーム・アプリケーションでは、通常COBOLコピーブック・ファイルを使用してデータ・レイアウトを定義します。実行時トランスレータが、関連するデータ・ファイルを解析できるように、コンバータがCOBOLコピーブックからネイティブ・スキーマを作成します。
COBOLコピーブックは、グループ・アイテム(構造)のコレクションです。これらのグループ・アイテムには、グループまたは基本アイテムであるその他のアイテムが含まれます。基本アイテムはそれ以上分割できないアイテムです。例:
01 Purchase-Order
        05 Buyer
                 10 BuyerName PIC X(5) USAGE DISPLAY.
        04 Seller
                 08 SellerName PICTURE XXXXX.
Purchase-orderは、2つの子グループ・アイテム(Buyer、Seller)を持つグループ・アイテムです。01、05、04などの数値は、グループのレベル(そのグループ内のデータの階層)を示します。
グループは、階層の同じレベルに異なるレベル番号を持つように定義することもできます。たとえば、BuyerおよびSellerには異なるレベル番号がありますが、階層内では同じレベルです。グループ・アイテムには、そのグループのレベル番号以下のレベル番号が発生するまで続く、すべてのグループと基本アイテムが含まれます。
各グループ・アイテム(BuyerおよびSeller)には子の基本アイテムがあります。PICまたはPICTURE句でデータ・レイアウトが定義されています。たとえば、BuyerNameではサイズが5文字の英数字が定義されています。SellerNameのデータ・レイアウトはBuyerNameと同じです。
COBOLのグループ・アイテムは、XMLスキーマのcomplexTypeタイプの要素にマップできます。同様に、基本アイテムは、実行時トランスレータが対応するデータ・ファイルを解析するのに役立つ特定のネイティブ・フォーマットの注釈が付けられた単純型タイプの要素にマップできます。たとえば、Buyerアイテムは次の定義にマップできます。
<!--COBOL declaration : 05 Buyer-->
<element name="Buyer">
   <complexType>
      <sequence>
         <!--COBOL declaration : 10 Name PIC X(5)-->
         <element name="Name" type="string" nxsd:style="fixedLength"
            nxsd:padStyle="tail" nxsd:paddedBy=" " nxsd:length="5"/>
         </sequence>
   </complexType>
</element> 
ユーザー入力
生成されるネイティブ・スキーマのターゲット・ネームスペース。
データ・ファイルが生成されたホスト・コンピュータのキャラクタ・セット。デフォルトではEBCDICに設定されます(ebcdic-cp-us)。
データ・ファイルが生成されたホスト・コンピュータのバイト順。デフォルトではビッグ・エンディアンに設定されます。
レコード・デリミタ(通常は改行文字)、デリミタなし、またはユーザー指定の文字列。
生成されたネイティブ・スキーマのコンテナ・タグの名前。デフォルトではRoot-Elementに設定されます。
表6-1に、COBOL句を示します。表6-1に出現する数値タイプは、1桁ごとに1文字として保存されます。句のサポートは次のように定義されています。
Yは、句がサポートされていることを意味します。
Nは、句がサポートされていないことを意味します。
Iは、句が無視されることを意味します。
表6-1 COBOL句(数値タイプを1桁ごとに1文字として保存)
| COBOL句 | 設計時のサポート | 実行時のサポート | サポートされているシノニム | コメント | 
|---|---|---|---|---|
| 
 
  | 
 
  | 
 
  | 
 
  | 
 英数字: コンピュータのキャラクタ・セットで許可されている文字。Xはそれぞれ1バイトに対応します。  | 
| 
 
  | 
 
  | 
 
  | 
 
  | 
 アルファベット: アルファベットまたは空白の任意の文字。Aはそれぞれ1バイトに対応します。  | 
| 
 
  | 
 
  | 
 
  | 
 
  | 
 数字を含む任意の文字位置。9はそれぞれアイテムのサイズに含められます。  | 
| 
 
  | 
 
  | 
 
  | 
 固定長配列。  | 
|
| 
 
  | 
 
  | 
 
  | 
 
  | 
|
| 
 
  | 
 
  | 
 
  | 
 同じコンピュータのメモリー領域を異なるデータ・アイテムで表すことができます。  | 
|
| 
 
  | 
 
  | 
 
  | 
 サイズは、  | 
|
| 
 
  | 
 
  | 
 
  | 
 該当なし  | 
|
| 
 
  | 
 
  | 
 
  | 
 無視されます。  | 
|
| 
 
  | 
 N  | 
 N  | 
 COBOLコピーブックではあまり使用されません。  | 
|
| 
 
  | 
 N  | 
 N  | 
 4バイトの索引です。  | 
|
| 
 
  | 
 
  | 
 I  | 
 
  | 
 該当なし  | 
| 
 
  | 
 
  | 
 
  | 
 該当なし  | 
|
| 
 
  | 
 該当なし  | 
|||
| 
 
  | 
 
  | 
 
  | 
 該当なし  | 
表6-1に出現する数値タイプは、1桁ごとに1文字として保存されます。表6-2に、より効率的に保存される数値タイプを示します。
表6-2 COBOL句(より効率的に保存される数値タイプ)
| COBOL句 | 設計時のサポート | 実行時のサポート | サポートされているシノニム | コメント | 
|---|---|---|---|---|
| 
 
  | 
 Y  | 
 Y  | 
 これらのキーワードはどちらもオプションです。  | 
|
| 
 
  | 
 Y  | 
 Y  | 
 
  | 
 
 
  | 
| 
 
  | 
 Y  | 
 Y  | 
 
  | 
 4バイトの長さの単精度の浮動小数点数。  | 
| 
 
  | 
 
  | 
 
  | 
 
  | 
 8バイトの長さの倍精度の浮動小数点数。  | 
| 
 
  | 
 
  | 
 
  | 
 
  | 
 2つの数字は各バイトに保存されます。最後のその他の半バイトは、値が無署名でも署名用に割り当てられます。  | 
| 
 
  | 
 
  | 
 
  | 
 
  | 
 
  | 
| 
 
  | 
 
  | 
 
  | 
 ネイティブ・バイナリ表現の容量。  | 
|
| 
 
  | 
 
  | 
 
  | 
 
  | 
 デフォルトで、最も右端のニブルに署名します。  | 
| 
 
  | 
 
  | 
 
  | 
 
  | 
|
| 
 
  | 
 
  | 
 
  | 
 該当なし  | 
|
| 
 
  | 
 
  | 
 
  | 
 長さは  | 
|
| 
 
  | 
 
  | 
 
  | 
 長さは、  | 
SIGN IS LEADING
署名されたゾーンの数値とともに使用します。
SIGN IS TRAILING
署名されたゾーンの数値とともに使用します。
SIGN IS LEADING SEPARATE
文字Sがサイズに含まれます。
SIGN IS TRAILING SEPARATE
文字Sがサイズに含まれます。
| 
 注意: 数値がIBM COBOLフォーマットで保存されることを前提としています。異なるデータ保存フォーマットのその他のプラットフォーム用に生成されている場合は、そのタイプのカスタム・データ・ハンドラを記述する必要があります。 | 
表6-3に、ピクチャ編集タイプを示します。
表6-3 編集済ピクチャ
| 編集済ピクチャ | サポートされている編集タイプ | サポートされていない編集タイプ | 
|---|---|---|
| 
 編集済英数字  | 
 単純な挿入: B(空白)  | 
|
| 
 編集済浮動数値  | 
 特殊な挿入:   | 
|
| 
 編集済数値  | 
  | 
  | 
編集済ピクチャは、プレゼンテーション目的でデータ・ファイルではほとんど使用されません。記号の編集もデータで行うことを前提としています。たとえば、次のようなフィールドがあるとします。
05 AMOUNT PIC 999.99
このフィールドの幅は6バイトで、データに小数点があります。
単純、特殊および固定挿入はこの方法で処理されます。浮動挿入、ゼロ抑止および置換挿入はサポートされていません。
デリミタ付き、固定長または複合タイプのファイルをサンプリングすることで、ネイティブ・フォーマット・ビルダー・ウィザードを使用して生成された既存のネイティブ・スキーマを編集できます。既存のネイティブ・スキーマを編集するには、ネイティブ・フォーマット・ビルダー・ウィザードの「タイプの選択」ページで「既存ファイルの編集」オプションを選択し、「参照」をクリックして既存のスキーマ・ファイルの場所にナビゲートし、編集対象のネイティブ・スキーマ・ファイルを選択します。ネイティブ・フォーマット・ビルダー・ウィザードに表示される指示に従って、ネイティブ・スキーマ・ファイルを編集します。
| 
 注意: Document Type Definition(DTD)またはCOBOLコピーブック・ファイル・タイプから生成されたネイティブ・スキーマは編集できません。 | 
図6-3に、「ネイティブ・フォーマット・ビルダー - タイプの選択」ページで「既存ファイルの編集」オプションが選択されている様子を示します。
ネイティブ・スキーマ・ファイルを編集する前に、スキーマ内の注釈で指定されているサンプル・ファイルが存在することを確認する必要があります。この注釈は、ネイティブ・スキーマがサンプル・ファイルから初めて生成される際に自動的に追加されます。
たとえば、注釈で指定されたサンプル・ファイルのパスが<!--NXSDWIZ:C:\Temp\Book1Out.csv:-->の場合に、このファイルが指定のパスに存在しなければ、ウィザードでエラーが表示されます。
この項では、ネイティブ・フォーマット・データをXMLに変換するために使用するネイティブ・スキーマの各種コンストラクトの概要と、これらのネイティブ・スキーマ・コンストラクトの使用方法について説明します。
この項には、次の項目が含まれます。
表6-4に、<schema>タグにのみ適用可能なコンストラクトを示します。
表6-4 <schema>タグにのみ適用可能なコンストラクト
| 構文 | 説明 | 
|---|---|
| 
 ネイティブ・データのバイト順。  | 
|
| 
 実際のデータが格納されるエンコーディング。通常は、相互運用性とUnicodeがサポートされているため、UTF-8をお薦めします。Javaランタイム環境でサポートされている有効なエンコーディングは、いずれも指定できます。サポートされるエンコーディングの完全なリストは、  | 
|
| 
 
  | 
 アウトバウンドでネイティブの非xmlデータを強制的に引用符で囲む必要がある場合は、trueに設定します。  | 
| 
 ネイティブ・データの変換前にスキップする行数を指定する正の整数。  | 
|
| 
 ネイティブ・データの変換前に指定された文字列までスキップします。  | 
|
| 
 宣言されている場合、  | 
|
| 
 データが文字とバイトのどちらで保存されるかを示します。許可された値は  | 
|
| 
 メッセージが大量にある場合に、ネイティブ・データの一意のメッセージ・セパレータを指定する文字列。  | 
|
| 
 ネイティブ・データのタイプ。可能な値は  | 
|
| 
 宣言されている場合、  | 
|
| 
 アウトバウンド・メッセージに挿入するヘッダー値を指定する文字列。  | 
|
| 
 ネイティブ・ファイルで処理する行数を指定する整数。  | 
|
| 
 
 注意: フィールド  | 
|
| 
 
  | 
|
| 
 
  | 
|
| 
 
  | 
|
| 
 
  | 
|
| 
 
  | 
表6-5に、<schema>タグ以外のすべてのタグに適用可能なコンストラクトを示します。
表6-5 <schema>タグ以外のすべてのタグに適用可能なコンストラクト
| 構文 | 説明 | 
|---|---|
| 
 指定された長さを占有しているネイティブ・データに保存される配列の長さ。  | 
|
| 
 このコンストラクトの値は、配列の長さとして使用されます。また、有効な数値に解決される変数の場合もあります。この値は、それが指定されているパーティクルの nxsd:style="array" nxsd:arrayLength="10" これは、配列の長さが  | 
|
| 
 指定された文字列で終了する配列の最後のアイテム。  | 
|
| 
 宣言されている変数に値を割り当てます。  | 
|
| 
 指定された文字列で区切られるネイティブ・データの配列のセル。  | 
|
| 
 
  | 
|
| 
 
  | 
|
| 
 
  | 
 このコンストラクトに指定された値は、データ全体ではなくデータの一部のみを変換するために使用されます。  | 
| 
 ネイティブ・データの日付を表すJava日付フォーマット。  | 
|
| 
 実際のデータの長さが保存されている文字数およびバイト数。  | 
|
| 
 指定された文字列で区切られているリストのアイテム。  | 
|
| 
 囲まれているネイティブ・データ。  | 
|
| 
 読み取られるネイティブ・データの長さ。固定長スタイルで使用されます。  | 
|
| 
 指定された文字列で終了するリストの最後のアイテム。  | 
|
| 
 入力ストリームの現在の位置よりも先の一致を検索します。一致が検出されると、このコンストラクトが指定されているノードが処理され、検出されない場合はスキップされます。この機能は次のように使用します。 nxsd:lookAhead="20" nxsd:lookFor="abc" これは、  | 
|
| 
 余白に使用される文字列。  | 
|
| 
 
  | 
|
| 
 指定された文字列で囲まれるネイティブ・データ。 デフォルトでは、指定された文字列は  | 
|
| 
 指定されたバイト数または文字数をスキップします。  | 
|
| 
 指定された行数をスキップします。  | 
|
| 
 指定された文字列までスキップします。  | 
|
| 
 ネイティブ・データの指定された文字列を検索します。存在する場合は、それが指定されている要素の処理を続行し、存在しない場合はスキップして次の要素を処理します。  | 
|
| 
 入力ストリームからのネイティブ・データの読取りに使用されるスタイル。許可された値は  | 
|
| 
 指定された文字列で囲まれるネイティブ・データ。  | 
|
| 
 指定された文字列で終了するネイティブ・データ。  | 
|
| 
 単一の変数を宣言します。  | 
|
| 
 一連の変数を宣言するか、宣言されている変数に有効な値を割り当てます。  | 
この項には、次の項目が含まれます。
ネイティブ・フォーマットの固定長データは、固定長スタイルを使用してネイティブ・スキーマに定義できます。固定長には次の3つのタイプがあります。
余白あり
余白なし
ネイティブ・データから実際の長さも読み取られるタイプ
変換されるネイティブ・データ・フォーマット: 余白あり
実際のデータが指定された長さに満たない場合があります。この場合には、headまたはtailとしてpaddedByおよびpadStyleを指定できます。データが読み取られると、余白はそれに従って削除されます。変換対象のサンプルのネイティブ・データを次に示します。
GBP*UK000012550.00
ネイティブ・スキーマ: 余白あり
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="fixedlength">
  <complexType>
    <sequence>
      <element name="currency_code" nxsd:style="fixedLength" nxsd:length="4"
         nxsd:padStyle="tail" nxsd:paddedBy="*">
        <simpleType>
          <restriction base="string">
            <maxLength value="4" />
          </restriction>
        </simpleType>
      </element>
      <element name="country_code" nxsd:style="fixedLength" nxsd:length="2"
         nxsd:padStyle="none">
        <simpleType>
          <restriction base="string">
            <length value="2" />
          </restriction>
        </simpleType>
      </element>
      <element name="to_usd_rate" nxsd:style="fixedLength" nxsd:length="12"
         nxsd:padStyle="head" nxsd:paddedBy="0">
        <simpleType>
          <restriction base="string">
            <maxLength value="12" />
          </restriction>
        </simpleType>
      </element>
    </sequence>
  </complexType>
</element>
 
</schema>
ネイティブ・スキーマを使用して変換したXML: 余白あり
<fixedlength xmlns="http://www.oracle.com/ias/processconnect"> <currency_code>GBP</currency_code> <country_code>UK</country_code> <to_usd_rate>12550.00</to_usd_rate> </fixedlength>
変換されるネイティブ・データ・フォーマット: 余白なし
ネイティブ・スキーマに固定長データを定義するには、固定長スタイルを使用できます。実際のデータが指定された長さに満たない場合、空白は削除されません。変換対象のサンプルのネイティブ・データを次に示します。
GBP*UK000012550.00
ネイティブ・スキーマ: 余白なし
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="fixedlength">
  <complexType>
    <sequence>
      <element name="currency_code" nxsd:style="fixedLength" nxsd:length="4">
        <simpleType>
          <restriction base="string">
            <maxLength value="4" />
          </restriction>
        </simpleType>
      </element>
      <element name="country_code" nxsd:style="fixedLength" nxsd:length="2">
        <simpleType>
          <restriction base="string">
            <length value="2" />
          </restriction>
        </simpleType>
      </element>
      <element name="to_usd_rate" nxsd:style="fixedLength" nxsd:length="12">
        <simpleType>
          <restriction base="string">
            <maxLength value="12" />
          </restriction>
        </simpleType>
      </element>
    </sequence>
  </complexType>
</element>
 
</schema>
ネイティブ・スキーマを使用して変換したXML: 余白なし
<fixedlength xmlns="http://www.oracle.com/ias/processconnect"> <currency_code>GBP*</currency_code> <country_code>UK</country_code> <to_usd_rate>000012550.00</to_usd_rate> </fixedlength>
変換されるネイティブ・データ・フォーマット: ネイティブ・データから実際の長さも読み取られる場合
データの長さもネイティブ・ストリームに保存される場合、まず長さの読取り、次に読み取られた長さに応じたデータの読取りにこのスタイルが使用されます。変換対象のサンプルのネイティブ・データを次に示します。
03joe13DUZac.1HKVmIY
ネイティブ・スキーマ: ネイティブ・データから実際の長さも読み取られる場合
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="fixedlength">
  <complexType>
    <sequence>
      <element name="user" type="string" nxsd:style="fixedLength"
         nxsd:identifierLength="2" />
      <element name="encr_user" type="string" nxsd:style="fixedLength"
         nxsd:identifierLength="2" />
    </sequence>
  </complexType>
</element>
 
</schema>
ネイティブ・スキーマを使用して変換したXML: ネイティブ・データから実際の長さも読み取られる場合
<fixedlength xmlns="http://www.oracle.com/ias/processconnect"> <user>joe</user> <encr_user>DUZac.1HKVmIY</encr_user> </fixedlength>
このフォーマットは、終了マーク自体をデリミタではなく、実際のデータとして処理する場合に使用されます。マークが実際のデータの一部であるかどうかが不明な場合は、念のためにnxsd:quotedByを使用できます。nxsd:quotedByを指定すると、対応するネイティブ・データが引用符で囲まれる場合と囲まれない場合があります。囲まれている場合、実際のデータは、nxsd:quotedByでの指定に応じて開始の引用符から終了の引用符まで読み取られます。囲まれていない場合は、terminatedBy文字が検出されるまで読み取られます。
デフォルトでは、終了マークは"(")です。データにこの文字が含まれている場合は、フィールドが引用符で囲まれていない場合にも、このデフォルトを上書きする必要があります。詳細は、「変換されるネイティブ・データ・フォーマット: デフォルトの引用符文字を含むデータ」を参照してください。
以降の各項では、引用符付き(オプション)と引用符なしのシナリオ、およびデフォルトの引用符文字を含むシナリオを示します。
変換されるネイティブ・データ・フォーマット: 引用符付き(オプション)
変換対象のサンプルのネイティブ・データを次に示します。
Fred,"2 Old Street, Old Town,Manchester",20-08-1954,0161-499-1718
ネイティブ・スキーマ: 引用符付き(オプション)
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="terminated">
  <complexType>
    <sequence>
      <element name="PersonName" type="string" nxsd:style="terminated"
         nxsd:terminatedBy="," />
      <element name="Address" type="string" nxsd:style="terminated"
         nxsd:terminatedBy="," nxsd:quotedBy="""/>
      <element name="DOB" type="string" nxsd:style="terminated"
         nxsd:terminatedBy="," />
      <element name="Telephone" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="${eol}" />
    </sequence>
  </complexType>
</element>
ネイティブ・スキーマを使用して変換したXML: 引用符付き(オプション)
<terminated xmlns="http://www.oracle.com/ias/processconnect"> <PersonName>Fred</PersonName> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <Telephone>0161-499-1718</Telephone> </terminated>
変換されるネイティブ・データ・フォーマット: 引用符なし
データが特定の文字列または文字で終了する場合に使用されます。変換対象のサンプルのネイティブ・データを次に示します。
1020,16,18,,1580.00
ネイティブ・スキーマ: 引用符なし
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="terminated">
  <complexType>
    <sequence>
      <element name="product" type="string" nxsd:style="terminated"
         nxsd:terminatedBy="," />
      <element name="ordered" type="string" nxsd:style="terminated"
         nxsd:terminatedBy="," />
      <element name="inventory" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="," />
      <element name="backlog" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="," />
      <element name="listprice" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="${eol}" />
    </sequence>
  </complexType>
</element>
 
</schema>
ネイティブ・スキーマを使用して変換したXML: 引用符なし
<terminated xmlns="http://www.oracle.com/ias/processconnect"> <product>1020</product> <ordered>16</ordered> <inventory>18</inventory> <backlog></backlog> <listprice>1580.00</listprice> </terminated>
変換されるネイティブ・データ・フォーマット: デフォルトの引用符文字を含むデータ
変換対象のサンプルのネイティブ・データを次に示します。
aaa,"bbbbb,[cccc
この場合、フィールドはカンマで終了し、"文字は2番目のフィールドのデータに含まれ、[文字は3番目のフィールドのデータに含まれています。
デフォルトのnxsd:quotedBy終了マークは"(")であるため、このフィールドがカンマ文字で終了すると指定しても、Oracleファイル・アダプタはフィールド2の変換に失敗します。このデータを正常に変換するには、デフォルトのnxsd:quotedBy終了マークに、このフィールドのデータに含まれていない任意の文字を上書きする必要があります。この例では、<(<)はフィールド2に含まれないことがわかっているため、デフォルトのnxsd:quotedBy終了マークをこの文字に上書きします。
<element name="FieldTwo" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="<"/>
対照的に、フィールド3については、[文字はデフォルトのnxsd:quotedBy終了マークと競合しないため、指定する必要があるのはnxsd:terminatedBy=","のみとなります。
<element name="FieldThree" type="string" nxsd:style="terminated" nxsd:terminatedBy="," />
ネイティブ・スキーマ: デフォルトの引用符文字を含むデータ
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="terminated">
  <complexType>
    <sequence>
      <element name="FieldOne" type="string" nxsd:style="terminated"
         nxsd:terminatedBy="," />
      <element name="FieldTwo" type="string" nxsd:style="terminated"
         nxsd:terminatedBy="," nxsd:quotedBy="<"/>
      <element name="FieldThree" type="string" nxsd:style="terminated"
         nxsd:terminatedBy="," />
    </sequence>
  </complexType>
</element>
ネイティブ・スキーマを使用して変換したXML: デフォルトの引用符文字を含むデータ
<terminated xmlns="http://www.oracle.com/ias/processconnect"> <FieldOne>aaa</FieldOne> <FieldTwo>"bbbbb</FieldTwo> <FieldThree>[cccc</FieldThree> </terminated>
ネイティブ・データがマークで囲まれている場合に使用されます。
囲みデータには次のタイプがあります。
左右の囲みマークが異なる場合
左右の囲みマークが同じ場合
変換されるネイティブ・データ・フォーマット: 左右の囲みマークが異なる場合
左右の囲みマークが異なる場合に変換対象となるサンプルのネイティブ・データを次に示します。
(Ernest Hemingway Museum){Whitehead St.}
ネイティブ・スキーマ: 左右の囲みマークが異なる場合
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        xmlns:tns="http://www.oracle.com/ias/processconnect"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
<element name="limstring">
  <complexType>
    <sequence>
      <element name="Landmark" type="string" nxsd:style="surrounded" nxsd:leftSurroundedBy="(" nxsd:rightSurroundedBy=")" />
      <element name="Street" type="string" nxsd:style="surrounded" nxsd:leftSurroundedBy="{" nxsd:rightSurroundedBy="}" />
    </sequence>
  </complexType>
</element>
</schema>
ネイティブ・スキーマを使用して変換したXML: 左右の囲みマークが異なる場合
<limstring xmlns="http://www.oracle.com/ias/processconnect"> <Landmark>Ernest Hemingway Museum</Landmark> <Street>Whitehead St.</Street> </limstring>
変換されるネイティブ・データ・フォーマット: 左右の囲みマークが同じ場合
左右の囲みマークが同じ場合に変換対象となるサンプルのネイティブ・データを次に示します。
.FL..Florida Keys.+Key West+
ネイティブ・スキーマ: 左右の囲みマークが同じ場合
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        xmlns:tns="http://www.oracle.com/ias/processconnect"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
<element name="limstring">
  <complexType>
    <sequence>
      <element name="State" type="string" nxsd:style="surrounded" nxsd:surroundedBy="."/>
      <element name="Region" type="string" nxsd:style="surrounded" nxsd:surroundedBy="." />
      <element name="City" type="string" nxsd:style="surrounded" nxsd:surroundedBy="+" />
    </sequence>
  </complexType>
</element>
</schema>
ネイティブ・スキーマを使用して変換したXML: 左右の囲みマークが同じ場合
<limstring xmlns="http://www.oracle.com/ias/processconnect"> <State>FL</State> <Region>Florida Keys</Region> <City>Key West</City> </limstring>
このフォーマットは、次の特性のあるリストに適用されます。
すべてのアイテムが同じマークで区切られているが最後のアイテムが異なるマークで終了している場合(バインド済)
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
125,200,255
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        xmlns:tns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
 
<element name="list" type="tns:Colors" />
 
<complexType name="Colors" nxsd:style="list" nxsd:itemSeparatedBy=","
   nxsd:listTerminatedBy="${eol}">
  <sequence>
    <element name="Red" type="string" />
    <element name="Green" type="string" />
    <element name="Blue" type="string" />
  </sequence>
</complexType>
 
</schema>
ネイティブ・スキーマを使用して変換したXML
<list xmlns="http://www.oracle.com/ias/processconnect"> <Red>125</Red> <Green>200</Green> <Blue>255</Blue> </list>
最後のアイテムを含みすべてのアイテムが同じマークで区切られている場合(バインドなし)
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
configure;startup;runtest;shutdown;
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        xmlns:tns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="list" type="tns:CommandSet" />
 
<complexType name="CommandSet" nxsd:style="list" nxsd:itemSeparatedBy=";">
  <sequence>
    <element name="Cmd1" type="string" />
    <element name="Cmd2" type="string" />
    <element name="Cmd3" type="string" />
    <element name="Cmd4" type="string" />
  </sequence>
</complexType>
 
</schema>
ネイティブ・スキーマを使用して変換したXML
<list xmlns="http://www.oracle.com/ias/processconnect"> <Cmd1>configure</Cmd1> <Cmd2>startup</Cmd2> <Cmd3>runtest</Cmd3> <Cmd4>shutdown</Cmd4> </list>
これは、個々のセルが区切り文字で区切られていて、配列の最後のセルが終了文字で終了している複合型の配列用です。
配列タイプの例を次に示します。
すべてのセルが同じマークで区切られているが最後のセルが異なるマークで終了している場合(バインド済)
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
"Smith, John","1 Old Street, Old Town, Manchester",,"0161-499-1717". Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718". "Smith, Bob",,,0161-499-1719.#
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD"
>
<element name="array">
  <complexType>
    <sequence>
      <element name="Member" maxOccurs="unbounded" 
               nxsd:style="array" nxsd:cellSeparatedBy="${eol}"
 nxsd:arrayTerminatedBy="#">
        <complexType>
          <sequence>
            <element name="Name" type="string" nxsd:style="terminated"
 nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="Address" type="string" nxsd:style="terminated"
 nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="DOB" type="string" nxsd:style="terminated"
 nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="Telephone" type="string" nxsd:style="terminated"
 nxsd:terminatedBy="." nxsd:quotedBy='"'/>
          </sequence>
        </complexType>
      </element>
    </sequence>
  </complexType>
</element>
 
</schema>
ネイティブ・スキーマを使用して変換したXML
<array xmlns="http://www.oracle.com/ias/processconnect">
   <Member>
      <Name>Smith, John</Name>
      <Address>1 Old Street, Old Town, Manchester</Address>
      <DOB></DOB>
      <Telephone>0161-499-1717</Telephone>
   </Member>
   <Member>
      <Name>Fred</Name>
      <Address>2 Old Street, Old Town,Manchester</Address>
      <DOB>20-08-1954</DOB>
      <Telephone>0161-499-1718</Telephone>
   </Member>
   <Member>
      <Name>Smith, Bob</Name>
      <Address></Address>
      <DOB></DOB>
      <Telephone>0161-499-1719</Telephone>
   </Member>
</array>
最後のセルを含み、すべてのセルが同じマークで区切られている場合(バインドなし)
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
"Smith, John","1 Old Street, Old Town, Manchester",,"0161-499-1717". Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718". "Smith, Bob",,,0161-499-1719.
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="array">
  <complexType>
    <sequence>
      <element name="Member" maxOccurs="unbounded" 
               nxsd:style="array" nxsd:cellSeparatedBy="\r\n">
        <complexType>
          <sequence>
            <element name="Name" type="string" nxsd:style="terminated"
               nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="Address" type="string" nxsd:style="terminated"
               nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="DOB" type="string" nxsd:style="terminated"
               nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="Telephone" type="string" nxsd:style="terminated"
               nxsd:terminatedBy="." nxsd:quotedBy='"'/>
          </sequence>
        </complexType>
      </element>
    </sequence>
  </complexType>
</element>
 
</schema>
ネイティブ・スキーマを使用して変換したXML
<array xmlns="http://www.oracle.com/ias/processconnect">
   <Member>
      <Name>Smith, John</Name>
      <Address>1 Old Street, Old Town, Manchester</Address>
      <DOB></DOB>
      <Telephone>0161-499-1717</Telephone>
   </Member>
   <Member>
      <Name>Fred</Name>
      <Address>2 Old Street, Old Town,Manchester</Address>
      <DOB>20-08-1954</DOB>
      <Telephone>0161-499-1718</Telephone>
   </Member>
   <Member>
      <Name>Smith, Bob</Name>
      <Address></Address>
      <DOB></DOB>
      <Telephone>0161-499-1719</Telephone>
   </Member>
</array>
セルはマークで区切られていないが最後のセルがマークで終了している場合(バインド済)
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
"Smith, John","1 Old Street, Old Town, Manchester",,"0161-499-1717" Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718" "Smith, Bob",,,0161-499-1719 #
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="array">
  <complexType>
    <sequence>
      <element name="Member" maxOccurs="unbounded" 
               nxsd:style="array" nxsd:arrayTerminatedBy="#">
        <complexType>
          <sequence>
            <element name="Name" type="string" nxsd:style="terminated"
                nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="Address" type="string" nxsd:style="terminated"
                nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="DOB" type="string" nxsd:style="terminated"
                nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="Telephone" type="string" nxsd:style="terminated"
                nxsd:terminatedBy="\r\n" nxsd:quotedBy='"'/>          </sequence>
        </complexType>
      </element>
    </sequence>
  </complexType>
</element>
 
</schema>
ネイティブ・スキーマを使用して変換したXML
<array xmlns="http://www.oracle.com/ias/processconnect">
   <Member>
      <Name>Smith, John</Name>
      <Address>1 Old Street, Old Town, Manchester</Address>
      <DOB></DOB>
      <Telephone>0161-499-1717</Telephone>
   </Member>
   <Member>
      <Name>Fred</Name>
      <Address>2 Old Street, Old Town,Manchester</Address>
      <DOB>20-08-1954</DOB>
      <Telephone>0161-499-1718</Telephone>
   </Member>
   <Member>
      <Name>Smith, Bob</Name>
      <Address></Address>
      <DOB></DOB>
      <Telephone>0161-499-1719</Telephone>
   </Member>
</array>
ネイティブ・データからセルの数が読み取られる場合
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
3"Smith, John","1 Old Street, Old Town, Manchester",,"0161-499-1717" Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718" "Smith, Bob",,,0161-499-1719
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
<element name="arrayidentifierlength">
  <complexType>
    <sequence>
      <element name="Member" maxOccurs="unbounded" nxsd:style="array"
          nxsd:arrayIdentifierLength="1">
        <complexType>
          <sequence>
            <element name="Name" type="string" nxsd:style="terminated"
               nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="Address" type="string" nxsd:style="terminated"
               nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="DOB" type="string" nxsd:style="terminated"
               nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="Telephone" type="string" nxsd:style="terminated"
               nxsd:terminatedBy="\r\n" nxsd:quotedBy='"'/>
          </sequence>
        </complexType>
      </element>
    </sequence>
  </complexType>
</element>
 
</schema> 
ネイティブ・スキーマを使用して変換したXML
<arrayidentifierlength xmlns="http://www.oracle.com/ias/processconnect">
   <Member>
      <Name>Smith, John</Name>
      <Address>1 Old Street, Old Town, Manchester</Address>
      <DOB></DOB>
      <Telephone>0161-499-1717</Telephone>
   </Member>
   <Member>
      <Name>Fred</Name>
      <Address>2 Old Street, Old Town,Manchester</Address>
      <DOB>20-08-1954</DOB>
      <Telephone>0161-499-1718</Telephone>
   </Member>
   <Member>
      <Name>Smith, Bob</Name>
      <Address></Address>
      <DOB></DOB>
      <Telephone>0161-499-1719</Telephone>
   </Member>
</arrayidentifierlength>
明示的な配列長
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
3;John;Steve;Paul;Todd;
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
<element name="array">
  <annotation>
    <appinfo>
      <nxsd:variables>
        <nxsd:variable name="len" />
      </nxsd:variables>
    </appinfo>
  </annotation>
  <complexType>
    <sequence>
      <element name="TotalMembers" type="string" nxsd:style="terminated"
nxsd:terminatedBy=";">
        <annotation>
          <appinfo>
            <nxsd:variables>
              <nxsd:assign name="len" value="${0}" />
            </nxsd:variables>
          </appinfo>
        </annotation>
      </element>
      <element name="Member" type="string" minOccurs="0" maxOccurs="unbounded" 
              nxsd:style="array,terminated" nxsd:arrayLength="${len}"
nxsd:terminatedBy=";" />
    </sequence>
  </complexType>
</element>
</schema>
ネイティブ・スキーマを使用して変換したXML
<array xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <TotalMembers>3</TotalMembers> <Member>John</Member> <Member>Steve</Member> <Member>Paul</Member> </array>
この項では、条件付き処理に関する次のような例が用意されています。
条件に基づきchoiceモデル・グループ内の1つの要素を処理する場合
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
PO28/06/2004^|ABCD Inc.|Oracle OracleApps025070,000.00 Database 021230,000.00 ProcessCon021040,000.00 PO01/07/2004^|EFGH Inc.|Oracle Websphere 025070,000.00 DB2 021230,000.00 Eclipse 021040,000.00 SO29/06/2004|Oracle Apps|5 Navneet Singh PO28/06/2004^|IJKL Inc.|Oracle Weblogic 025070,000.00 Tuxedo 021230,000.00 JRockit 021040,000.00 IN30/06/2004;Navneet Singh;Oracle;Oracle Apps;5;70,000.00;350,000.00
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        xmlns:tns="http://www.oracle.com/ias/processconnect"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="container">
 
  <complexType>
    <choice maxOccurs="unbounded" nxsd:choiceCondition="fixedLength"
 nxsd:length="2">
    
      <element ref="tns:PurchaseOrder" nxsd:conditionValue="PO" />
      
      <element ref="tns:SalesOrder" nxsd:conditionValue="SO" />
      
      <element ref="tns:Invoice" nxsd:conditionValue="IN" />
      
    </choice>
  </complexType>
</element>
 
<!-- PO -->
<element name="PurchaseOrder" type="tns:POType"/>
 
<complexType name="POType">
  <sequence>
 
    <element name="Date" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="^" />
    <element name="Buyer" type="string" nxsd:style="surrounded"
       nxsd:surroundedBy="|" />
    <element name="Supplier" type="string" nxsd:style="terminated"
 nxsd:terminatedBy="${eol}" />
    <element name="Items">
      <complexType>
        <sequence>
          <element name="Line-Item" minOccurs="3" maxOccurs="3">
            <complexType>
              <group ref="tns:LineItems" />
            </complexType>
          </element>
        </sequence>
      </complexType>
    </element>
  </sequence>
</complexType>
 
<group name="LineItems">
  <sequence>
    <element name="Id" type="string" nxsd:style="fixedLength" nxsd:length="10"
        nxsd:padStyle="none"/>
    <element name="Quantity" type="string" nxsd:style="fixedLength"
        nxsd:identifierLength="2" />
    <element name="Price" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="${eol}" />
  </sequence>
</group>
 
<!-- SO -->
<element name="SalesOrder" type="tns:SOType" />
 
<complexType name="SOType">
  <sequence>
    <element name="Date" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="|" />
    <element name="Item" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="|" />
    <element name="Quantity" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="${eol}" />
    <element name="Buyer" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="${eol}" />
  </sequence>
</complexType>
 
<!-- INV -->
<element name="Invoice" type="tns:INVType" />
 
<complexType name="INVType">
  <sequence>
    <element name="Date" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Purchaser" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Seller" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Item" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Price" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Quantity" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="TotalPrice" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" />
  </sequence>
</complexType>
 
</schema>
ネイティブ・スキーマを使用して変換したXML
<container xmlns="http://www.oracle.com/ias/processconnect">
   <PurchaseOrder>
      <Date>28/06/2004</Date>
      <Buyer>ABCD Inc.</Buyer>
      <Supplier>Oracle</Supplier>
      <Items>
         <Line-Item>
            <Id>OracleApps</Id>
            <Quantity>50</Quantity>
            <Price>70,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>Database  </Id>
            <Quantity>12</Quantity>
            <Price>30,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>ProcessCon</Id>
            <Quantity>10</Quantity>
            <Price>40,000.00</Price>
         </Line-Item>
      </Items>
   </PurchaseOrder>
   <PurchaseOrder>
      <Date>01/07/2004</Date>
      <Buyer>EFGH Inc.</Buyer>
      <Supplier>Oracle</Supplier>
      <Items>
         <Line-Item>
            <Id>Websphere </Id>
            <Quantity>50</Quantity>
            <Price>70,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>DB2       </Id>
            <Quantity>12</Quantity>
            <Price>30,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>Eclipse   </Id>
            <Quantity>10</Quantity>
            <Price>40,000.00</Price>
         </Line-Item>
      </Items>
   </PurchaseOrder>
   <SalesOrder>
      <Date>29/06/2004</Date>
      <Item>Oracle Apps</Item>
      <Quantity>5</Quantity>
      <Buyer>Navneet Singh</Buyer>
   </SalesOrder>
   <PurchaseOrder>
      <Date>28/06/2004</Date>
      <Buyer>IJKL Inc.</Buyer>
      <Supplier>Oracle</Supplier>
      <Items>
         <Line-Item>
            <Id>Weblogic  </Id>
            <Quantity>50</Quantity>
            <Price>70,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>Tuxedo    </Id>
            <Quantity>12</Quantity>
            <Price>30,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>JRockit   </Id>
            <Quantity>10</Quantity>
            <Price>40,000.00</Price>
         </Line-Item>
      </Items>
   </PurchaseOrder>
   <Invoice>
      <Date>30/06/2004</Date>
      <Purchaser>Navneet Singh</Purchaser>
      <Seller>Oracle</Seller>
      <Item>Oracle Apps</Item>
      <Price>5</Price>
      <Quantity>70,000.00</Quantity>
      <TotalPrice>350,000.00</TotalPrice>
   </Invoice>
</container>
条件に基づきsequenceモデル・グループ内の複数の要素を処理する場合
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
PO28/06/2004^|ABCD Inc.|Oracle OracleApps025070,000.00 Database 021230,000.00 ProcessCon021040,000.00 PO01/07/2004^|EFGH Inc.|Oracle Websphere 025070,000.00 DB2 021230,000.00 Eclipse 021040,000.00 SO29/06/2004|Oracle Apps|5 Navneet Singh PO28/06/2004^|IJKL Inc.|Oracle Weblogic 025070,000.00 Tuxedo 021230,000.00 JRockit 021040,000.00 IN30/06/2004;Navneet Singh;Oracle;Oracle Apps;5;70,000.00;350,000.00
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        xmlns:tns="http://www.oracle.com/ias/processconnect"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="container">
 
  <complexType>
    <sequence maxOccurs="unbounded">
    
      <element ref="tns:PurchaseOrder" minOccurs="0" nxsd:startsWith="PO" />
      
      <element ref="tns:SalesOrder" minOccurs="0" nxsd:startsWith="SO" />
      
      <element ref="tns:Invoice" minOccurs="0" nxsd:startsWith="IN" />
      
    </sequence>
  </complexType>
</element>
 
<!-- PO -->
<element name="PurchaseOrder" type="tns:POType"/>
 
<complexType name="POType">
  <sequence>
 
    <element name="Date" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="^" />    <element name="Buyer" type="string" nxsd:style="surrounded"
       nxsd:surroundedBy="|" />
    <element name="Supplier" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" />
    <element name="Items">
      <complexType>
        <sequence>
          <element name="Line-Item" minOccurs="3" maxOccurs="3">
            <complexType>
              <group ref="tns:LineItems" />
            </complexType>
          </element>
        </sequence>
      </complexType>
    </element>
  </sequence>
</complexType>
 
<group name="LineItems">
  <sequence>
    <element name="Id" type="string" nxsd:style="fixedLength" nxsd:length="10"
        nxsd:padStyle="none"/>
    <element name="Quantity" type="string" nxsd:style="fixedLength"
        nxsd:identifierLength="2" />
    <element name="Price" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="${eol}" />
  </sequence>
</group>
 
<!-- SO -->
<element name="SalesOrder" type="tns:SOType" />
 
<complexType name="SOType">
  <sequence>
    <element name="Date" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="|" />
    <element name="Item" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="|" />
    <element name="Quantity" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" />
    <element name="Buyer" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" />  </sequence>
</complexType>
 
<!-- INV -->
<element name="Invoice" type="tns:INVType" />
 
<complexType name="INVType">
  <sequence>
    <element name="Date" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Purchaser" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Seller" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Item" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />    <element name="Price" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Quantity" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="TotalPrice" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" />
  </sequence>
</complexType>
 
</schema>
ネイティブ・スキーマを使用して変換したXML
<container xmlns="http://www.oracle.com/ias/processconnect">
   <PurchaseOrder>
      <Date>28/06/2004</Date>
      <Buyer>ABCD Inc.</Buyer>
      <Supplier>Oracle</Supplier>
      <Items>
         <Line-Item>
            <Id>OracleApps</Id>
            <Quantity>50</Quantity>
            <Price>70,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>Database  </Id>
            <Quantity>12</Quantity>
            <Price>30,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>ProcessCon</Id>
            <Quantity>10</Quantity>
            <Price>40,000.00</Price>
         </Line-Item>
      </Items>
   </PurchaseOrder>
   <PurchaseOrder>
      <Date>01/07/2004</Date>
      <Buyer>EFGH Inc.</Buyer>
      <Supplier>Oracle</Supplier>
      <Items>
         <Line-Item>
            <Id>Websphere </Id>
            <Quantity>50</Quantity>
            <Price>70,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>DB2       </Id>
            <Quantity>12</Quantity>
            <Price>30,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>Eclipse   </Id>
            <Quantity>10</Quantity>
            <Price>40,000.00</Price>
         </Line-Item>
      </Items>
   </PurchaseOrder>
   <SalesOrder>
      <Date>29/06/2004</Date>
      <Item>Oracle Apps</Item>
      <Quantity>5</Quantity>
      <Buyer>Navneet Singh</Buyer>
   </SalesOrder>
   <PurchaseOrder>
      <Date>28/06/2004</Date>
      <Buyer>IJKL Inc.</Buyer>
      <Supplier>Oracle</Supplier>
      <Items>
         <Line-Item>
            <Id>Weblogic  </Id>
            <Quantity>50</Quantity>
            <Price>70,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>Tuxedo    </Id>
            <Quantity>12</Quantity>
            <Price>30,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>JRockit   </Id>
            <Quantity>10</Quantity>
            <Price>40,000.00</Price>
         </Line-Item>
      </Items>
   </PurchaseOrder>
   <Invoice>
      <Date>30/06/2004</Date>
      <Purchaser>Navneet Singh</Purchaser>
      <Seller>Oracle</Seller>
      <Item>Oracle Apps</Item>
      <Price>5</Price>
      <Quantity>70,000.00</Quantity>
      <TotalPrice>350,000.00</TotalPrice>
   </Invoice>
</container>
この例では日付の定義方法を示します。
変換されるネイティブ・データ・フォーマット:
11/16/0224/11/02 11-20-2002 23*11*2002 01/02/2003 01:02 01/02/2003 03:04:05
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="dateformat">
  <complexType>
    <sequence>
      <element name="StartDate" type="dateTime" nxsd:dateFormat="MM/dd/yy"  
         nxsd:style="fixedLength" nxsd:length="8" />
      <element name="EndDate" type="dateTime"   nxsd:dateFormat="dd/MM/yy"  
         nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      <element name="Milestone" type="dateTime" nxsd:dateFormat="MM-dd-yyyy"
         nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      <element name="DueDate" type="dateTime"   nxsd:dateFormat="dd*MM*yyyy"
         nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      <element name="Date" type="dateTime"   nxsd:dateFormat="MM/dd/yyyy hh:mm"
         nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      <element name="Date" type="dateTime"   nxsd:dateFormat="MM/dd/yyyy hh:mm:ss"
         nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
    </sequence>
  </complexType>
</element>
 
</schema>
ネイティブ・スキーマを使用して変換したXML
<dateformat xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <StartDate>2002-11-16T00:00:00</StartDate> <EndDate>2002-11-24T00:00:00</EndDate> <Milestone>2002-11-20T00:00:00</Milestone> <DueDate>2002-11-23T00:00:00</DueDate> <Date>2003-01-02T01:02:00</Date> <Date>2003-01-02T03:04:05</Date> </dateformat>
| 
 注意: 既存の日付フォーマットにnxsd:dateParsingMode="lax/strict"およびロケール・サポートが追加されています。 | 
次の例に、nxsd:dateParsingMode="lax/strict"およびロケール・サポートの使用方法を示します。
変換されるネイティブ・データ・フォーマット:
11/16/0224/11/02 11-20-2002 23*11*2002 01/02/2003 01:02 01/02/2003 03:04:05 Thu, 26 May 2005 15:50:11 India Standard Time Do, 26 Mai 2005 15:43:10 Indische Normalzeit 20063202
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
<element name="dateformat">
  <complexType>
    <sequence>
      <element name="StartDate" type="date" nxsd:dateFormat="MM/dd/yy"
nxsd:localeLanguage="en" nxsd:style="fixedLength" nxsd:length="8" />
      <element name="EndDate" type="date"   nxsd:dateFormat="dd/MM/yy"
nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      <element name="Milestone" type="dateTime" nxsd:dateFormat="MM-dd-yyyy"
nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      <element name="DueDate" type="dateTime"   nxsd:dateFormat="dd*MM*yyyy"
nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      
      <element name="Date" type="dateTime"   nxsd:dateFormat="MM/dd/yyyy hh:mm"
nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      <element name="Date" type="dateTime"   nxsd:dateFormat="MM/dd/yyyy hh:mm:ss"
nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      
      <element name="LongDateInEnglish" type="dateTime"   nxsd:dateFormat="EEE, d
MMM yyyy HH:mm:ss zzzz" nxsd:localeLanguage="en" nxsd:localeCountry="US"
nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      <element name="LongDateInGerman" type="dateTime"   nxsd:dateFormat="EEE, d
MMM yyyy HH:mm:ss zzzz" nxsd:localeLanguage="de" nxsd:style="terminated"
nxsd:terminatedBy="${eol}" />
      
      <element name="InvalidDate" type="dateTime"   nxsd:dateParsingMode="lax"
nxsd:dateFormat="yyyyMMdd" nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      
    </sequence>
  </complexType>
</element>
</schema>
変換済のXML
<dateformat xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <StartDate>2002-11-16</StartDate> <EndDate>2002-11-24</EndDate> <Milestone>2002-11-20T00:00:00</Milestone> <DueDate>2002-11-23T00:00:00</DueDate> <Date>2003-01-02T01:02:00</Date> <Date>2003-01-02T03:04:05</Date> <LongDateInEnglish>2005-05-26T15:50:11</LongDateInEnglish> <LongDateInGerman>2005-05-26T15:43:10</LongDateInGerman> <InvalidDate>2008-08-02T00:00:00</InvalidDate> </dateformat>
この例では変数の使用方法を示します。
変換されるネイティブ・データ・フォーマット:
{,;}Fred,"2 Old Street, Old Town,Manchester","20-08-1954";"0161-499-1718"
phone-2
phone-3
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 <element name="variable">
  <annotation>
    <documentation>
      1. var1 - variable declaration
      2. var2 - variable declaration with default value
      3. EOL - variable declaration with referencing a system variable
    </documentation>
    <appinfo>
      <junkies/>
      <nxsd:variables>
        <nxsd:variable name="var1" />
        <nxsd:variable name="var2" value="," />
        <nxsd:variable name="SystemEOL" value="${system.line.separator}" />
      </nxsd:variables>
      <junkies/>
      <junkies/>
      <junkies/>
    </appinfo>
  </annotation>
  
  <complexType>
    <sequence>
      <element name="delims" type="string" nxsd:style="surrounded"
          nxsd:leftSurroundedBy="{" nxsd:rightSurroundedBy="}" >
         <annotation>
           <appinfo>
             <junkies/>
             <junkies/>
             <junkies/>
             <nxsd:variables>
              <nxsd:assign name="var1" value="${0,1}"/>
              <nxsd:assign name="var2" value="${1}" />
             </nxsd:variables>
           </appinfo>
         </annotation>
      </element>
 
      <element name="PersonName" type="string" nxsd:style="terminated"
          nxsd:terminatedBy="${var1}" nxsd:quotedBy=""" />
      <element name="Address" type="string" nxsd:style="terminated"
          nxsd:terminatedBy="${var1}" nxsd:quotedBy="""/>
      <element name="DOB" type="string" nxsd:style="terminated"
          nxsd:terminatedBy="${var2}" nxsd:quotedBy='"'/>
      <element name="Telephone1" type="string" nxsd:style="terminated"
          nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/>
      <element name="Telephone2" type="string" nxsd:style="terminated"
          nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/>
      <element name="Telephone3" type="string" nxsd:style="terminated"
          nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/>
    </sequence>
  </complexType>
</element>
 
</schema>
ネイティブ・スキーマを使用して変換したXML
<variable xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <delims>,;</delims> <PersonName>Fred</PersonName> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <Telephone1>0161-499-1718</Telephone1> <Telephone2>phone-2</Telephone2> <Telephone3>phone-3</Telephone3> </variable>
ネイティブ・フォーマットでは、データが読み取られるときに、次の例に示すように、指定のデータに接頭辞または接尾辞、あるいはその両方が追加されます。
変換されるネイティブ・データ
     Fred,  "2 Old Street, Old Town,Manchester","20-08-1954",0161-499-1718
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD"
        >
<element name="terminated">
  <complexType>
    <sequence>
      <element name="PersonName" type="string" nxsd:prefixWith="Mr."
       nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" />
      <element name="Address" type="string" nxsd:suffixWith="]]"
       nxsd:prefixWith="[[" nxsd:style="terminated" nxsd:terminatedBy=","
       nxsd:quotedBy="""/>
      <element name="DOB" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy='"'/>
      <element name="Telephone" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/>
    </sequence>
  </complexType>
</element>
</schema>
ネイティブ・スキーマを使用して変換したXML
<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <PersonName>Mr.Fred</PersonName> <Address>[[2 Old Street, Old Town,Manchester]]</Address> <DOB>20-08-1954</DOB> <Telephone>0161-499-1718</Telephone> </terminated>
トランスレータは、次の例に示すように、skipModeコンストラクトに応じてデータの読取り前または読取り後にスキップします。
変換されるネイティブ・データ
     Fred,   "2 Old Street, Old Town,Manchester","20-08-1954",0161-499-1718
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD"
        >
<element name="terminated">
  <complexType>
    <sequence>
      <element name="PersonName" type="string" nxsd:skip="5"
       nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" />
      <element name="Address" type="string" nxsd:skipMode="before" nxsd:skip="3"
       nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="""/>
      <element name="DOB" type="string" nxsd:skipMode="after" nxsd:skip="6"
       nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/>
      <element name="Telephone" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/>
    </sequence>
  </complexType>
</element>
</schema>
ネイティブ・スキーマを使用して変換したXML
<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <PersonName>Fred</PersonName> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <Telephone>99-1718</Telephone> </terminated>
nxsd注釈を付けずに要素を宣言し、値fixedまたはdefaultを指定すると、トランスレータは指定された値を使用し、例外をスローしません。
変換されるネイティブ・データ
Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718"
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
<element name="terminated">
  <annotation>
    <appinfo>
      <nxsd:variables>
        <nxsd:variable name="x" value="hello" />
      </nxsd:variables>
      <junkies/>
      <junkies/>
      <junkies/>
    </appinfo>
  </annotation>
  <complexType>
    <sequence>
      <element name="PersonName" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy=""" />
      <element name="Age" type="string" fixed="16"  />
      <element name="Address" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy="""/>
      <element name="DOB" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy='"'/>
      <element name="salutation" type="string" default="${x}"  />
      <element name="Telephone" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/>
    </sequence>
  </complexType>
</element>
</schema>
ネイティブ・スキーマを使用して変換したXML
<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <PersonName>Fred</PersonName> <Age>16</Age> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <salutation>hello</salutation> <Telephone>0161-499-1718</Telephone> </terminated>
writeコンストラクトは、実際のデータの書込み前または書込み後に、出力ストリームの現在位置にリテラルを書き込みます。
入力XML
<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <PersonName>Fred</PersonName> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <Telephone>0161-499-1718</Telephone> </terminated>
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD"
        >
<element name="terminated">
  <complexType>
    <sequence>
      <element name="PersonName" type="string" nxsd:writeMode="before"
       nxsd:write="Mr." nxsd:style="terminated" nxsd:terminatedBy=","
       nxsd:quotedBy=""" />
      <element name="Address" type="string" nxsd:writeMode="after"
       nxsd:write="Over." nxsd:style="terminated" nxsd:terminatedBy=","
       nxsd:quotedBy="""/>
      <element name="DOB" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy='"'/>
      <element name="Telephone" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/>
    </sequence>
  </complexType>
</element>
</schema>
ネイティブ・スキーマを使用して変換したデータ
Mr.Fred,"2 Old Street, Old Town,Manchester",Over.20-08-1954,0161-499-1718
LookAheadコンストラクトには次のタイプがあります。
タイプ1: LookAhead X charsは、スタイルを使用して位置から値を読み取り、指定のリテラルと照合します。
タイプ2: LookAhead X charsは、スタイルを使用して位置から値を読み取り、その値を後で使用できるように変数に格納します。
LookAhead: タイプ1
LookAhead X charsは、スタイルを使用して位置から値を読み取り、指定のリテラルと照合します。
変換されるネイティブ・データ・フォーマット:
Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718",YES
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
<element name="LookAhead">
  <complexType>
    <sequence minOccurs="0" nxsd:lookAhead="70" nxsd:lookFor="YES">
      <element name="PersonName" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy=""" />
      <element name="Address" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy="""/>
      <element name="DOB" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy='"'/>
      <element name="Telephone" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy='"'/>
    </sequence>
  </complexType>
</element>
</schema>
ネイティブ・スキーマを使用して変換したXML
<LookAhead xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <PersonName>Fred</PersonName> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <Telephone>0161-499-1718</Telephone> </LookAhead>
LookAhead: タイプ2
ネイティブ・スキーマではLookAhead X charsは、スタイルを使用して位置から値を読み取り、その値を後で使用できるように変数に格納します。
変換されるネイティブ・データ・フォーマット:
Name1,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", YES Name2,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", NO Name3,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", NO Name4,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", YES
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
<!--
nxsd:lookAhead="70" nxsd:scan="3"
-->
<element name="LookAhead">
  <complexType>
    <choice maxOccurs="unbounded" nxsd:choiceCondition="${x}" nxsd:lookAhead="70"
       nxsd:scanLength="3" nxsd:assignTo="${x}">
      <element name="Record1" type="string" nxsd:conditionValue="YES"
       nxsd:style="terminated" nxsd:terminatedBy="," nxsd:skipMode="after"
       nxsd:skipUntil="${eol}" />
      <element name="Record2" type="string" nxsd:conditionValue="NO "
       nxsd:style="terminated" nxsd:terminatedBy="," nxsd:skipMode="after"
       nxsd:skipUntil="${eol}" />
    </choice>
  </complexType>
</element>
</schema>
ネイティブ・スキーマを使用して変換したXML
<LookAhead xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <Record1>Name1</Record1> <Record2>Name2</Record2> <Record2>Name3</Record2> <Record1>Name4</Record1> </LookAhead>
outboundHeaderの実際の内容には変数(特に${eol})を使用できます。headerLinesおよびoutboundHeaderの両方が使用可能な場合、アウトバウンドではoutboundHeaderが優先されます。
| 
 注意: インバウンド方向では、ヘッダー・スキップ機能がサポートされています。他の変数はアクセスできないか、リテラルのみが含まれているため、ヘッダーで使用できるのは事前定義済の変数のみです。 | 
入力XML
<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <PersonName>Fred</PersonName> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <Telephone>0161-499-1718</Telephone> </terminated>
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD"
        nxsd:hasHeader="true"
        nxsd:outboundHeader="This is a header ${eol}">
<element name="terminated">
  <complexType>
    <sequence>
      <element name="PersonName" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy=""" />
      <element name="Address" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy="""/>
      <element name="DOB" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy='"'/>
      <element name="Telephone" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/>
    </sequence>
  </complexType>
</element>
</schema>
変換されたデータ
This is a header Fred,"2 Old Street, Old Town,Manchester",20-08-1954,0161-499-1718
choiceConditionコンストラクトとともにconditionValueコンストラクトを使用すると、ブール演算子ANDおよびORとともに「等しい」(==)または「等しくない」(!=)などの一致基準を指定して、読み取った値とconditionValueコンストラクトに指定した値を比較できます。
変換されるネイティブ・データ・フォーマット:
Order, ID41678, 20May2000 Item1, GigaWidget, 60, $75 Item2, MegaBucket, 48, $125 Cust1, Hopkins Associates, ID26490 Order, ID41680, 20May2000 Item3, Rt.Clopper, 40, $100 Item4, Lt.Clopper, 50, $100 Cust2, Jersey WebInovaters, ID46786
ネイティブ・スキーマ:
<?xml version="1.0" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/extensions/SampleNS"
            xmlns:tns="http://xmlns.oracle.com/pcbpel/nxsd/extensions/SampleNS"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified" nxsd:encoding="US-ASCII"
nxsd:stream="chars" nxsd:version="NXSD">
<xsd:element name="Container">
    <xsd:complexType>
      <xsd:choice minOccurs="1" maxOccurs="unbounded"
       nxsd:choiceCondition="terminated" nxsd:terminatedBy=",">
        <xsd:element name="Customer" nxsd:conditionValue="(== Cust1) or (== Cust2)
         and (!= emp)">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="C1" type="xsd:string" nxsd:style="terminated"
               nxsd:terminatedBy="," nxsd:quotedBy=""">
              </xsd:element>
              <xsd:element name="C2" type="xsd:string" nxsd:style="terminated"
               nxsd:terminatedBy="${eol}" nxsd:quotedBy=""">
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="Item" nxsd:conditionValue="(== Item1) or (== Item2) or
         (==Item3) or (== Item4)">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="C1" type="xsd:string" nxsd:style="terminated"
               nxsd:terminatedBy="," nxsd:quotedBy=""">
              </xsd:element>
              <xsd:element name="C2" type="xsd:string" nxsd:style="terminated"
               nxsd:terminatedBy="," nxsd:quotedBy=""">
              </xsd:element>
              <xsd:element name="C3" type="xsd:string" nxsd:style="terminated"
               nxsd:terminatedBy="${eol}" nxsd:quotedBy=""">
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="Order" nxsd:conditionValue="Order">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="C1" type="xsd:string" nxsd:style="terminated"
               nxsd:terminatedBy="," nxsd:quotedBy=""">
              </xsd:element>
              <xsd:element name="C2" type="xsd:string" nxsd:style="terminated"
               nxsd:terminatedBy="${eol}" nxsd:quotedBy=""">
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
ネイティブ・スキーマを使用して変換したXML
<Container xmlns="http://xmlns.oracle.com/pcbpel/nxsd/extensions/SampleNS">
   <Order>
      <C1> ID41678</C1>
      <C2> 20May2000</C2>
   </Order>
   <Item>
      <C1> GigaWidget</C1>
      <C2> 60</C2>
      <C3> $75</C3>
   </Item>
   <Item>
      <C1> MegaBucket</C1>
      <C2> 48</C2>
      <C3> $125</C3>
   </Item>
   <Customer>
      <C1> Hopkins Associates</C1>
      <C2> ID26490</C2>
   </Customer>
   <Order>
      <C1> ID41680</C1>
      <C2> 20May2000</C2>
   </Order>
   <Item>
      <C1> Rt.Clopper</C1>
      <C2> 40</C2>
      <C3> $100</C3>
   </Item>
   <Item>
      <C1> Lt.Clopper</C1>
      <C2> 50</C2>
      <C3> $100</C3>
   </Item>
   <Customer>
      <C1> Jersey WebInovaters</C1>
      <C2> ID46786</C2>
   </Customer>
</Container>
choiceConditionコンストラクトは、フィールドが複数タイプのデリミタで区切られている複雑なレコードに対し、conditionValueコンストラクトとともに使用されます。複数タイプ以外にchoiceConditionに使用できるタイプは、FixedLength、VariableおよびAd hocです。次の例に、variableタイプのchoiceConditionを示します。
変換されるネイティブ・データ・フォーマット:
Name1,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", YES Name2,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", NO
ネイティブ・スキーマ:
<element name="LookAhead">
  <complexType>
    <choice maxOccurs="unbounded" nxsd:choiceCondition="${x}" nxsd:lookAhead="70" nxsd:scanLength="3" nxsd:assignTo="${x}">
      <element name="Record1" type="string" nxsd:conditionValue="YES" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:skipMode="after" nxsd:skipUntil="${eol}" />
      <element name="Record2" type="string" nxsd:conditionValue="NO " nxsd:style="terminated" nxsd:terminatedBy="," nxsd:skipMode="after" nxsd:skipUntil="${eol}" />
    </choice>
  </complexType>
</element>
ネイティブ・スキーマを使用して変換したXML
<LookAhead xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <Record1>Name1</Record1> <Record2>Name2</Record2> </LookAhead>
データ全体ではなくデータの一部のみを変換することが要件の場合は、dataLinesコンストラクトを使用して、ファイルの先頭を基準として無視する行数とその位置から変換する行数を指定できます。
変換されるネイティブ・データ・フォーマット:
Fred,addr,20-08-1954,0161-499-1718 Tam,addr,20-08-1954,0161-499-1718 Albert,addr,20-08-1954,0161-499-1718 Bill,addr,20-08-1954,0161-499-1718 Phil,addr,20-08-1954,0161-499-1718
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD"
        
        nxsd:headerLines="1"
        nxsd:dataLines="1">
<element name="terminated">
  <complexType>
    <sequence maxOccurs="unbounded">
      <element name="PersonName" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," />
      <element name="Address" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," />
      <element name="DOB" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," />
      <element name="Telephone" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" />
    </sequence>
  </complexType>
</element>
</schema>
ネイティブ・スキーマを使用して変換したXML
<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <PersonName>Tam</PersonName> <Address>addr</Address> <DOB>20-08-1954</DOB> <Telephone>0161-499-1718</Telephone> </terminated>
トランスレータでは、日付または時刻がタイムゾーンに関連付けられている必要があります。トランスレータでは、ネイティブ・データの日付とXMLの日付の両方について、タイムゾーンを使用した日付書式がサポートされています。
日付/時間文字列の変換時には、2つの部分があります。第1の部分はネイティブ・データの日付の書式(dateformat)で、第2の部分は第1の部分の解析に使用するタイムゾーン(timeZoneまたはuseTimeZone)です。トランスレータでは、これらの詳細が日付/時間文字列の解析中に使用されます。
デフォルトでは、解析後に日付文字列がXMLのISO-8601フォーマットに変換されます。このデフォルトは、XMLDateFormatとXMLTimeZoneまたはuseTimeZoneを使用してオーバーライドできます。
変換されるネイティブ・データ・フォーマット:
11/16/0224/11/02 11-20-2002 23*11*2002 01/02/2003 01:02 01/02/2003 03:04:05 Thu, 26 May 2005 15:50:11 India Standard Time Do, 26 Mai 2005 15:43:10 Indische Normalzeit 20063202 11/16/02
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
<element name="dateformat">
  <complexType>
    <sequence>
      <element name="StartDate" type="date" nxsd:dateFormat="MM/dd/yy"  
       nxsd:localeLanguage="en" nxsd:style="fixedLength" nxsd:length="8" />
      <element name="EndDate" type="date"   nxsd:dateFormat="dd/MM/yy"  
       nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      <element name="Milestone" type="dateTime" nxsd:useTimeZone="UTC"
       nxsd:dateFormat="MM-dd-yyyy" nxsd:style="terminated"        nxsd:terminatedBy="${eol}" />
      <element name="DueDate" type="dateTime" nxsd:useTimeZone="UTC"
       nxsd:dateFormat="dd*MM*yyyy" nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      
      <element name="Date" type="dateTime" nxsd:useTimeZone="UTC"
       nxsd:dateFormat="MM/dd/yyyy hh:mm" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" />
      <element name="Date" type="dateTime" nxsd:useTimeZone="UTC"
       nxsd:dateFormat="MM/dd/yyyy hh:mm:ss" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" />
      
      <element name="LongDateInEnglish" type="dateTime" 
       nxsd:displayTimeZone="true" nxsd:useTimeZone="IST" nxsd:dateFormat="EEE, d MMM
       yyyy HH:mm:ss zzzz" nxsd:localeLanguage="en" nxsd:localeCountry="US"
       nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      <element name="LongDateInGerman"  type="dateTime" 
       nxsd:displayTimeZone="true" nxsd:useTimeZone="IST" nxsd:dateFormat="EEE, d MMM
       yyyy HH:mm:ss zzzz" nxsd:localeLanguage="de" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" />
      
      <element name="InvalidDate" type="dateTime" nxsd:useTimeZone="UTC"
       nxsd:dateParsingMode="lax" nxsd:dateFormat="yyyyMMdd" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" />
      <element name="MyFormatDate" type="string" nxsd:dateFormat="MM/dd/yy" 
       nxsd:xmlDateFormat="dd-MM-yyyy" nxsd:localeLanguage="en" nxsd:style="fixedLength"
       nxsd:length="8" />
      
    </sequence>
  </complexType>
</element>
</schema>
ネイティブ・スキーマを使用して変換したXML
<dateformat xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <StartDate>2002-11-16</StartDate> <EndDate>2002-11-24</EndDate> <Milestone>2002-11-20T00:00:00</Milestone> <DueDate>2002-11-23T00:00:00</DueDate> <Date>2003-01-02T01:02:00</Date> <Date>2003-01-02T03:04:05</Date> <LongDateInEnglish>2005-05-26T15:50:11+05:30</LongDateInEnglish> <LongDateInGerman>2005-05-26T15:43:10+05:30</LongDateInGerman> <InvalidDate>2008-08-02T00:00:00</InvalidDate> <MyFormatDate>16-11-2002</ MyFormatDate > </dateformat>
Oracle JCAアダプタは、変換中の検証を実装するように構成する必要があります。検証により、Oracle JCAアダプタにより変換中に無効なメッセージがパブリッシュされないことを保証できます。
次のタイプの検証の一方または両方を実装できます。
ペイロード検証では、Oracle JCAアダプタにより処理される入力と出力のXMLメッセージを検証する必要があります。ペイロード検証は、次のいずれかのレベルで設定できます。
トップレベル検証
トップレベル検証では、DOMResult(Document Object Model形式の結果)がXMLスキーマと対照して検証されます。この形式の検証は、インバウンド・ペイロードとアウトバウンド・ペイロードの両方について実装されます。また、この形式の検証では、無効なレコードのパブリッシュを制御してXML検証エラーに関する情報を提供できます。ただし、変換コンテキストは提供されません。たとえば、ネイティブ・ストリーム内でエラーが発生した行と列の情報は、トップレベル検証では提供されません。
XMLメッセージのトップレベル検証を実装するには、次のようにします。
メッセージのnxsdネームスペースを次のように設定する必要があります。
xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
検証フラグを次のようにtrueに設定する必要があります。
nxsd:validation="true"
例:
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD" nxsd:validation="true" >
フィールドレベル検証
フィールドレベル検証では、個々のフィールドがXMLスキーマと対照して検証されます。この形式の検証はインバウンド・ペイロードについてのみ実装され、アウトバウンド・ペイロードについては実装されません。
XMLメッセージがXMLスキーマに準拠していない場合は、エラーが発生した正確な行と文字に関する情報が表示されます。
XMLメッセージのフィールドレベル検証を実装するには、次のようにします。
メッセージのnxsdネームスペースを次のように設定する必要があります。
xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
検証フラグを次のようにtrueに設定する必要があります。
nxsd:fieldValidation="true"
例:
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD" nxsd:fieldValidation="true" >
スキーマ検証では、Oracle JCAアダプタによる変換対象のネイティブまたはXMLデータ・フォーマットに対して定義したスキーマ(ネイティブ・スキーマまたはXMLスキーマ)を検証する必要があります。
スキーマ検証を有効化するには、次のようにします。
メッセージのnxsdネームスペースを次のように設定する必要があります。
xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
nxsd検証フラグを次のようにtrueに設定する必要があります。
nxsd:validateNxsd="true"
例:
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD" nxsd: validateNxsd ="true" >
| 
 注意: nxsd:validateNxsd="true"検証フラグは、ペイロード・レベルの検証に影響しません。 | 
バイト順マーク(BOM)は、バイト・シーケンスのエンコーディングを記述する特殊なU+FEFF Unicode文字です。ネイティブ・フォーマット・トランスレータは、ネイティブ入力データのキャラクタ・エンコーディングの判別にBOMを使用するように構成できます。デフォルトでは、BOMは使用されません。入力データにBOMが使用される場合は、ネイティブ・スキーマ内でnxsd:parseBom属性をtrueに設定します。このように設定しなければ、トランスレータでは解析エラーがスローされます。
サンプルのnxsdファイルを次に示します。
<?xml version= '1.0' encoding= 'UTF-8' ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
             xmlns:tns="http://TargetNamespace.com/InboundService"
             targetNamespace="http://TargetNamespace.com/InboundService"
             elementFormDefault="qualified" attributeFormDefault="unqualified"
             nxsd:parseBom="true" nxsd:version="NXSD" nxsd:stream="chars"
 nxsd:encoding="UTF8">
     <xsd:element name="Root-Element">
         <xsd:complexType>
             <xsd:sequence>
                 <xsd:element name="mydata" minOccurs="1" maxOccurs="unbounded"
                     nxsd:style="array"
                     nxsd:cellSeparatedBy="${eol}">
                     <xsd:complexType>
                         <xsd:sequence>
                             <xsd:element name="C1" type="xsd:string"
                                nxsd:style="fixedLength"
                                nxsd:length="3"/>
                         </xsd:sequence>
                     </xsd:complexType>
                 </xsd:element>
             </xsd:sequence>
         </xsd:complexType>
     </xsd:element>
 </xsd:schema>
トランスレータXPath関数では、データをネイティブ・フォーマット(CSV、固定長、タブ区切り、COBOLコピーブックなどのフォーマット)からXMLフォーマットに、およびXMLフォーマットからネイティブ・フォーマットに変換できます。トランスレータXPath関数には、ストリーミングと非ストリーミングの2タイプがあります。違いは、ストリーミング・トランスレータXPath関数はバッチ処理によるトランスフォーメーション・アプローチを実行するのに対して、非ストリーミングXPath関数はこのアプローチを実行しないことです。バッチ処理によるトランスフォーメーション・アプローチでは、数GB程度のファイルをメモリー問題が発生することなく処理できます。
この項には、次の項目が含まれます。
この項では、トランスレータXPath関数の使用について理解しておく必要のある用語を説明します。
添付要素
他の場所にあり"href"属性で参照される実際のコンテンツを、添付要素と呼ぶことがあります。実際のコンテンツは、ファイルシステムやデータベース表などに存在します。添付は通常、次のスキーマ・コンストラクトを使用して表現されます。
<element name="hrefelement">
    <complexType>
        <attribute name="href" type="string"/>
    </complexType>
</element>
"href"属性には、参照されるデータの実際の場所を指定します。ファイルシステム内のファイルへのパスや、データベース・エンティティへのポインタ(主キー)を指定できます。
スケーラブルなDOM
スケーラブルなDOM(SDOM)は、Oracle XML Developer Kit(Oracle XDK)に含まれていて、DOMがスケーラブルかつプラッガブルにサポートされます。このため、メモリーの不足およびスケーラビリティの制限という問題が解消され、DOM構成の制御が可能になります。Oracle XDKは、遅延実体化メカニズムを使用して、アクセスされるノードを作成し、未使用のノードをメモリーから解放するだけです。この機能により、アプリケーションはスケーラビリティが向上し、非常に大きいXMLドキュメントを処理できるようになります。
ファイルの読取りおよび書込み中にトランスレータが必要になる場合があります。この項では、次のトランスレータXPath関数について説明します。
doTranslateFromNative XPath関数は、入力データをXMLに変換します。入力データとしては、文字列、添付要素またはbase64Binary要素を使用できます。
ora:dotranslateFromNative('input','nxsdTemplate','nxsdRoot','targetType','attachment element?')
次の表では、前述の構文で使用されているこの関数のパラメータについて説明します。
| パラメータ | 説明 | 
|---|---|
input | 
XPath関数の入力データ。データとしては、変換する必要がある文字列データ、Oracleファイル/FTPアダプタの添付、外部ファイル・パスを参照する添付、またはbase64Binary要素を使用できます。 | 
| nxsdTemplate | 入力データからXMLフォーマットへの変換に使用するNXSDスキーマ。 | 
| nxsdRoot | NXSDスキーマ内のルート要素。 | 
| targetType | このパラメータは、XPath関数がネイティブ・データをXMLに変換する方法を指定します。'DOM'、'ATTACHMENT'または'SDOM'に設定する必要があります。次のように、targetTypeパラメータの設定に応じた処理が行われます。
  | 
| attachmentElement | このパラメータはオプションです。これは、返されるXMLファイルの添付です。 | 
例6-1 XPath関数の構成: 入力データが文字列タイプで、XML DOMに変換する必要がある場合
<variables>
     <variable…/>
    <variable name="csv_data" type="xsd:string"/>
  </variables>
<assign name="assignCSVData">
      <copy>
        <from expression="'this, is, csv, data…'"/>
        <to variable="csv_data"/>
      </copy>
</assign>
 
<assign name="doTranslateFromNativeCall">
      <copy>
        <from expression="ora: doTranslateFromNative (bpws:getVariableData('csv_data'),'xsd/address-csv.xsd','Root-Element','DOM')"/>
        <to variable="returnVariable" query="/ns1:Root-Element"/>
      </copy>
    </assign>
この例の内容は次のとおりです。
csv_dataは、XMLに変換するCSVデータを含んでいるBPEL変数です。
xsd/address-csv.xsdは、プロジェクト内のNXSDスキーマへの相対パスです。
Root-Elementは、NXSDスキーマ内のルート要素です(オプション)。
returnVariableは、DOMとして返されるXMLデータです。
例6-2 入力データが添付で、DOMに変換する必要がある場合
attachmentElementをBPELプロセスのスキーマに次のように定義します。
<schema targerNamespace="…">
        <element name="attachmentElement">
            <complexType>
                <attribute name="href" type="string"/>
            </complexType>
        </element>
</schema>
タイプが添付要素の変数をBPELプロセスのスキーマに次のように作成します。
  <variables>
     <variable…/>
    <variable name="attachmentVariable" type="client:attachmentElement"/>
  </variables>
変換する必要があるソース・ファイルのパスを次のように割り当てます。
<assign name="AssignAttachmentReference">
  <copy>
    <from expression="'/tmp/xpath/in/address.csv'"/>
    <to variable="attachmentVariable"
            query="/client:attachmentElement/@href"/>
  </copy>
</assign>
XPath関数を次のようにコールします。
<assign name="xlateFromNative">
  <copy>
    <from expression="ora:doTranslateFromNative(bpws:getVariableData('attachmentVariable'),'xsd/address-csv.xsd', 'Root-Element', 'DOM')"/>
    <to variable="returnVariable" query="/ns1:Root-Element"/>
  </copy>
</assign>
この例の内容は次のとおりです。
attachmentVariableは、ソース・ファイルのパスを参照するBPEL内の添付変数です。
xsd/address-csv.xsdは、プロジェクト内のNXSDスキーマへの相対パスです。
Root-Elementは、NXSDスキーマ内のルート要素です。
returnVariableは、DOMとして返されるXMLデータです。
例6-3 XPath関数の構成: 入力データがBase64でエンコードされていて、DOMに変換する必要がある場合
base64でエンコードされている要素をBPELプロセスのスキーマに次のように定義します。
<schema targerNamespace="…"> <element name="mtomElement" type="base64Binary"/> </schema>
タイプがmtom要素の変数をBPELプロセスのスキーマに次のように作成します。
<variables>
     <variable…/>
    <variable name="encodedData" type="client:mtomElement"/>
</variables>
変換する必要があるソース・ファイルのパスを次のように割り当てます。
<assign name="assignBase64EncodedData"> <copy> <from expression="'b3JhY2xl'"/> <to variable="encodedData" query="/client:mtomElement"/> </copy> </assign> <assign name="doTranslateFromNativeCall"> <copy> <from expression="ora: doTranslateFromNative (bpws:getVariableData('encodedData'),'xsd/address-csv.xsd','Root-Element','DOM')"/> <to variable="returnVariable" query="/ns1:Root-Element"/> </copy> </assign>
この例の内容は次のとおりです。
mtomElementは、XMLに変換するbase64エンコード・データを含んでいるBPEL変数です。
xsd/address-csv.xsdは、プロジェクト内のNXSDスキーマへの相対パスです。
Root-Elementは、NXSDスキーマ内のルート要素です。
returnVariableは、DOMとして返されるXMLデータです。
例6-4 XPath関数の構成: 入力データが文字列タイプで、ファイル・パスで参照される添付に変換する必要がある場合
attachmentElementをBPELプロセスのスキーマに次のように定義します。
<schema targerNamespace="…">
        <element name="attachmentElement">
            <complexType>
                <attribute name="href" type="string"/>
            </complexType>
        </element>
</schema>
タイプが文字列の入力変数と、タイプが添付の出力変数を、BPELプロセスのスキーマに次のように作成します。
<variables>
    <variable…/>
    <variable name="csv_data" type="xsd:string"/> 
    <variable name="returnAttachmentVariable" type="client:attachmentElement"/> 
</variables>
変換する必要があるCSVデータを次のように割り当てます。
<assign name="assignCSVData">
    <copy>
      <from expression="'this, is, csv, data…'"/>
      <to variable="csv_data"/>
    </copy>
</assign>
変換したデータを格納するファイルのパスを次のように添付に移入します。
<assign name="AssignAttachmentReferenceForOutput">
    <copy>
      <from expression="'/tmp/xpath/output/address.xml'"/>
      <to variable=" returnAttachmentVariable "
            query="/client:attachmentElement/@href"/>
    </copy>
</assign>
XPath関数を次のようにコールします。
<assign name="doTranslateFromNativeCall">
    <copy>
      <from expression="ora: doTranslateFromNative (bpws:getVariableData('csv_data'),'xsd/address-csv.xsd','Root-Element','ATTACHMENT', bpws:getVariableData('returnAttachmentVariable'))"/>
      <to variable="returnAttachmentVariable"/>
    </copy>
</assign>
この例の内容は次のとおりです。
csv_dataは、XMLに変換するCSVデータを含んでいるBPEL文字列変数です。
xsd/address-csv.xsdは、プロジェクト内のNXSDスキーマへの相対パスです。
Root-Elementは、NXSDスキーマ内のルート要素です。
returnAttachmentVariableは、返された添付です。
注意: この例では、targetTypeはATTACHMENTに設定され、returnAttachmentVariableは変換したXMLが書き込まれるファイル・パスを指しています。
ただし、5つ目のパラメータ(bpws:getVariableData('returnAttachmentVariable'))はオプションです。このパラメータが未指定の場合、XPath関数ではデータベース・ベースの添付を作成し、これを返します。これを行うには、XPath関数を次のように構成します。
attachmentElementをBPELプロセスのスキーマに次のように定義します。
<schema targerNamespace="…">
        <element name="attachmentElement">
            <complexType>
                <attribute name="href" type="string"/>
            </complexType>
        </element>
</schema>
タイプが文字列の入力変数と、タイプが添付の出力変数を、BPELプロセスのスキーマに次のように作成します。
<variables>
    <variable…/>
    <variable name="csv_data" type="xsd:string"/> 
    <variable name="returnAttachmentVariable" type="client:attachmentElement"/> 
</variables>
変換する必要があるCSVデータを次のように割り当てます。
<assign name="assignCSVData">
    <copy>
      <from expression="'this, is, csv, data…'"/>
      <to variable="csv_data"/>
    </copy>
</assign>
<assign name="doTranslateFromNativeCall">
      <copy>
        <from expression="ora: doTranslateFromNative (bpws:getVariableData('csv_data'),'xsd/address-csv.xsd','Root-Element','ATTACHMENT')"/>
        <to variable="returnAttachmentVariable"/>
      </copy>
    </assign>
XPathコールが返された後、データベース・ベースの添付を表すGUIDを指すhref属性がreturnAttachmentVariable変数に移入されます。
注意: 変換中のデータが大きい場合は、XPath関数のtargetTypeパラメータとしてATTACHMENTまたはSDOMを使用する必要があります。
doTranslateToNative XPath関数は、入力DOMを文字列データまたは添付に変換します。
構文:
ora:dotranslateToNative('input','nxsdTemplate','nxsdRoot','targetType','attachmentElement?')
次の表では、前述の構文で使用されているこの関数のパラメータについて説明します。
| パラメータ | 説明 | 
|---|---|
input | 
XPath関数の入力データ。データとしては、CSVなどのネイティブ・フォーマットに変換する必要があるDOMまたはSDOMデータを使用できます。 | 
nxsdTemplate | 
入力データからXMLフォーマットへの変換に使用するNXSDスキーマ。 | 
nxsdRoot | 
NXSDスキーマ内のルート要素の名前。 | 
targetType | 
このパラメータは、XPath関数がXMLデータをネイティブ・フォーマットに変換する方法を指定します。'STRING'または'ATTACHMENT'に設定する必要があります。次のように、targetTypeパラメータの設定に応じた処理が行われます。
  | 
attachmentElement | 
このパラメータはオプションです。これは、変換したデータが書き込まれる添付です。 | 
例6-5 XPath関数の構成: 入力データがXMLフォーマットで、CSV文字列フォーマットに変換する必要がある場合
<variables>
     <variable…/>
   <variable name="inputDOM" type="ns1:Root-Element"/> <!- - data that needs to be translated into native - ->
    <variable name="returned_csv_data" type="xsd:string"/>
  </variables>
 
<assign name="doTranslateToNativeCall">
      <copy>
        <from expression="ora: doTranslateToNative (bpws:getVariableData('inputDOM'),'xsd/address-csv.xsd','Root-Element','STRING')"/>
        <to variable="returned_csv_data"/>
      </copy>
    </assign>
この例の内容は次のとおりです。
inputDOMは、変換したCSVを表す文字列データに変換するXMLデータを含んでいるBPEL DOM変数です。
xsd/address-csv.xsdは、プロジェクト内のNXSDスキーマへの相対パスです。
Root-Elementは、NXSDスキーマ内のルート要素です。
return_csv_dataは、変換されたCSVデータを含んでいる文字列変数です。
例6-6 XPath関数の構成: 入力XML DOMを、変換したCSVのターゲット・ファイルのパスを表す添付に変換する場合
attachmentElementをBPELプロセスのスキーマに次のように定義します。
<schema targerNamespace="…">
        <element name="attachmentElement">
            <complexType>
                <attribute name="href" type="string"/>
            </complexType>
        </element>
</schema>
タイプがattachmentElementの入力変数をBPELプロセスのスキーマに次のように作成します。
<variables>
     <variable…/>
    <variable name="inputDOM" type="ns1:Root-Element"/>
    <variable name="attachmentVariable" type="client:attachmentElement"/>
  </variables>
変換したCSVを書き込むターゲット・ファイルのパスを次のように割り当てます。
<assign name="AssignAttachmentReference">
  <copy>
     <from expression="'/tmp/xpath/out/address.csv'"/>
     <to variable="attachmentVariable"
            query="/client:attachmentElement/@href"/>
  </copy>
</assign>
XPath関数を次のようにコールします。
<assign name="xlateToNative">
      <copy>
        <from expression="ora:doTranslateToNative(bpws:getVariableData('inputDOM'),'xsd/address-csv.xsd', 'Root-Element', 'ATTACHMENT', bpws:getVariableData(' attachmentVariable'))"/>
        <to variable="attachmentVariable"/>
      </copy>
    </assign>
この例の内容は次のとおりです。
inputDOMは、/tmp/xpath/out/address.csvで表されるCSV出力ファイルに変換するXMLデータを含んでいるBPEL DOM変数です。
xsd/address-csv.xsdは、プロジェクト内のNXSDスキーマへの相対パスです。
Root-Elementは、NXSDスキーマ内のルート要素です。
AttachmentElementは、/tmp/xpath/out/address.csvで表されるターゲット出力ファイルへのパスです。
注意: この例では、targetTypeはATTACHMENTに設定され、AttachmentVariableは変換したCSVファイルが書き込まれるファイル・パスを指しています。
ただし、5つ目のパラメータ(bpws:getVariableData('attachmentVariable'))はオプションです。このパラメータが未指定の場合、XPath関数ではデータベース・ベースの添付を作成し、これを返します。これを行うには、XPath関数を次のように構成します。
attachmentElementをBPELプロセスのスキーマに次のように定義します。
<schema targerNamespace="…">
        <element name="attachmentElement">
            <complexType>
                <attribute name="href" type="string"/>
            </complexType>
        </element>
</schema>
タイプがattachmentElementの入力変数をBPELプロセスのスキーマに次のように作成します。
<variables>
     <variable…/>
    <variable name="inputDOM" type="ns1:Root-Element"/>
    <variable name="attachmentVariable" type="client:attachmentElement"/>
  </variables>
XPath関数を次のようにコールします。
<assign name="xlateToNative">
      <copy>
        <from expression="ora:doTranslateToNative(bpws:getVariableData('inputDOM'),'xsd/address-csv.xsd', 'Root-Element', 'ATTACHMENT')"/>
        <to variable="attachmentVariable"/>
      </copy>
    </assign>
XPathコールが返された後、データベース・ベースの添付を表すGUIDを指すhref属性がattachmentVariableに移入されます。
XPath関数は、バッチ処理によるトランスフォーメーション・アプローチを実行します。このアプローチでは、数GB程度のファイルをメモリー問題が発生することなく処理できます。トランスフォーメーション・エンジンはトランスフォーメーションの結果をそのメモリーに格納しないため、任意の大きさのペイロードを処理できます。トランスフォーメーション・エンジンは、大きなファイルの要素のバッチ処理後に、メモリーをフラッシュします。デフォルトのバッチ・サイズは要素数10000で、トランスフォーメーション・エンジンはこの数の要素を処理するとメモリーをフラッシュします。このパラメータはオプションであり、内部で使用されます。
| 
 注意: バッチ処理によるトランスフォーメーション・アプローチは、繰返し構造のXMLドキュメントに対してのみサポートされています。 | 
構文:
ora:doStreamingTranslate('input','streamingXpathContext','targetType','attachmentElement?')
次の表では、前述の構文で使用されているこの関数のパラメータについて説明します。
| パラメータ | 説明 | 
|---|---|
input | 
XPath関数の入力データ。データとしては、SDOMまたは添付要素を使用できます。 | 
| streamingXpathContext | XPathコンテキストを表すDOM。 | 
| targetType | このパラメータは、XPath関数が入力データを添付に変換する方法を指定します。SDOMまたはATTACHMENTに設定する必要があります。 | 
| attachmentElement | このパラメータはオプションです。これは、データがストリームされる添付です。 | 
streamingXPathContextパラメータは、ストリーミング・トランスフォーメーションのコンテキストを指定し、次のスキーマ要素に一致する必要があります。
<schema  targetNamespace="…">
    <element name="streamingcontext">
        complexType>
            <sequence>
                <element name="sourceSchema" type="string"/>
                <element name="sourceRootElement" type="string"/>
                <element name="sourceType" type="string"/>
                <element name="xsl" type="string"/>
                <element name="targetSchema" type="string"/>
                <element name="targetRootElement" type="string"/>
                <element name="targetType" type="string"/>
                <element name="batchSize" type="string"/>
            </sequence>
        </complexType>
    </element>        
</schema>
このコンテキストの内容は次のとおりです。
| スキーマ要素 | 説明 | 
|---|---|
sourceSchema | 
ネイティブ・データからXMLへの変換に使用するソースNXSDスキーマ。 | 
sourceRootElement | 
ソースNXSDスキーマ内のルート要素の名前。 | 
sourceType | 
入力データに応じてxmlまたはnativeに設定します。 | 
xsl | 
XSLファイルの相対パス。 | 
targetSchema | 
XMLからネイティブ・データへの変換に使用するターゲットNXSDスキーマ。 | 
targetRootElement | 
ターゲットNXSDスキーマ内のルート要素の名前。 | 
targetType | 
出力データに応じてxmlまたはnativeに設定します。 | 
batchSize | 
トランスフォーメーション・エンジンがメモリーをフラッシュするまでに処理する要素数。 | 
この項では、バッチ処理によるトランスフォーメーションが持つ次の特徴を説明します。
適用性
バッチ処理によるトランスフォーメーションの適用対象は次のとおりです。
繰返し構造のドキュメント
ドキュメント全体の集計が不要なXSLT
XSLTエンジンのバッチ起動
XSLTエンジンのバッチ起動の主な手順は次のとおりです。
ソース・ドキュメントを、1つ以上のレコードを含む複数のバッチに分割します。
1度に1つのバッチについてXSLTトランスフォーメーションを実行します。
XSLT起動の結果を単一のターゲット・ドキュメントに結合します。
分割または結合の即時実行
ソース・ドキュメントの分割と分割結果のターゲット・ドキュメントへの結合は、次のように実行されます。
中間メモリーやディスク記憶域は使用しません。
SAXイベントのパイプラインまたはインターセプトが行われます。
小さくて済む、メモリーでのフットプリント
バッチ処理によるトランスフォーメーションでは、次のタスクにメモリーをあまり使用しません。
任意の大きさ(ターゲット・システムによって制約あり)のXMLドキュメントの変換
スタンドアロン・テストでは、540MBの変換は3分未満で完了
例6-7では、ストリーミング・トランスフォーメーションXPath関数を使用して、FlatStructure FileAdapterサンプルを実装します。このサンプルの使用例では、インバウンドのネイティブ添付をCSVフォーマットからXMLフォーマットに変換してから、生成されたXMLファイルにユーザー指定のXSLファイルを適用します。これにより、変換済XMLファイルは、添付が表す固定長コンテンツに変換されます。
例6-7 ストリーミング・トランスフォーメーションXPath関数の使用
attachmentElementを次のように定義します。
<schema targerNamespace="…">
    <element name="attachmentElement">
        <complexType>
           <attribute name="href" type="string"/>
        </complexType>
    </element>
</schema>
インバウンドcsvファイルを参照する入力添付と、出力固定長ファイルを参照する出力添付に使用する、変数を作成します。ストリーミング・コンテキストに対応する変数を作成します。この変数への移入は、XPath関数をコールする前に行う必要があります。
  <variables>
    <variable name="xlationContext" element="client:streamingcontext"/>
    <variable name="inputAttachment" element="client:attachmentElement"/>
    <variable name="returnAttachment" element="client:attachmentElement"/>
  </variables>
 
 <!- - Assign the input and output attachments - ->
    <assign name="assignValuesForAttachments">
      <copy>
        <from expression="'/tmp/xpath/in/address.csv' "/>
        <to variable="inputAttachment" query="/client:attachmentElement/@href"/>
      </copy>
      <copy>
        <from expression="'/tmp/xpath/out/address_fixedLength.txt' "/>
        <to variable="returnAttachment"
            query="/client:attachmentElement/@href"/>
      </copy>
    </assign>
<!- - Assign the streaming context - ->
    <assign name="AssignStreamingContext">
      <copy>
        <from expression="'xsd/address-csv.xsd'"/>
        <to variable="xlationContext"
            query="/client:streamingcontext/client:sourceSchema"/>
      </copy>
      <copy>
        <from expression="'Root-Element'"/>
        <to variable="xlationContext"
            query="/client:streamingcontext/client:sourceRootElement"/>
      </copy>
      <copy>
        <from expression="'native'"/>
        <to variable="xlationContext"
            query="/client:streamingcontext/client:sourceType"/>
      </copy>
      <copy>
        <from expression="'xsd/address-fixedLength.xsd'"/>
        <to variable="xlationContext"
            query="/client:streamingcontext/client:targetSchema"/>
      </copy>
      <copy>
        <from expression="'Root-Element'"/>
        <to variable="xlationContext"
            query="/client:streamingcontext/client:targetRootElement"/>
      </copy>
      <copy>
        <from expression="'native'"/>
        <to variable="xlationContext"
            query="/client:streamingcontext/client:targetType"/>
      </copy>
      <copy>
        <from expression="'xsl/addr1Toaddr2.xsl'"/>
        <to variable="xlationContext"
            query="/client:streamingcontext/client:xsl"/>
      </copy>
      <copy>
        <from expression="'10000'"/>
        <to variable="xlationContext"
            query="/client:streamingcontext/client:batchSize"/>
      </copy>
    </assign>
<!- - call the XPath function - ->
    <assign name="executeStreamingXPath">
      <copy>
        <from expression="ora:doStreamingTranslate(bpws:getVariableData('inputAttachment','/client:attachmentElement'),
bpws:getVariableData('xlationContext'), 'ATTACHMENT', bpws:getVariableData('returnAttachment'))"/>
        <to variable="returnAttachment" query="/client:attachmentElement"/>
      </copy>
    </assign>
この項には、次の項目が含まれます。
| 
 注意: 現在、ネイティブ・フォーマット・ビルダーでは、複数文字のデリミタを含むデータのサンプリングはサポートされていません。この種のデータをサンプリングするには、適切なDelimited By文字列を使用してNXSDをハンド・コーディングします。 | 
カンマ区切り値(CSV)ファイルは、一般的なXML以外のファイル構造です。
このネイティブ・ファイルのXMLスキーマを作成する際には、ネイティブ・フォーマット・ビルダー・ウィザードの「デリミタ」オプションを使用します。
nxsd:headerLines="1"スキーマ属性は、ネイティブ・データの1行目をヘッダー行として処理してスキップしてから、残りのデータに対して実際の変換を行う必要があることを意味します。nxsd:stream="chars"スキーマ属性は、データが文字として読み取られることを意味します。nxsd:stream="bytes"のようにnxsd:streamがbytesに設定されている場合は、このスキーマ属性は、ネイティブ・データがバイトとして読み取られることを意味します。対応するスカラー・データを持つName、Street、City、State、Countryの各要素の宣言では、nxsd:style="terminated"属性によって対応するデータがterminatedスタイルで保存されていることが定義されています。実際の終了文字は、コンストラクトに指定されているnxsd:terminatedBy=","属性で定義されています。terminatedスタイルの詳細は、第6.2.2.2項「終了データの定義」を参照してください。
この使用例では、ネイティブ・フォーマット・ビルダーにより、名前、番地、市区町村、都道府県および国などの住所詳細を含んだデリミタ付きサンプル・ファイル・タイプが使用されます。このサンプル・ネイティブ・ファイル内の要素は、すべてカンマ(,)で区切られています。対応するNXSDを生成し、同様にテストできます。この使用例を実行する手順は、次のとおりです。
サンプル・テキスト・ファイルaddress-csv.txt内のデータは、次のとおりです。
Name,Street1,Street2,City,State,Country Oracle India Private Limited, Lexington Towers Prestige St. John's Woods, 2nd Cross Road Chikka Audugodi, Bangalore, Karnataka, India Intel Technology India Private Limited, Survey #23-56 P Devarabeesanahalli Village, Outer Ring Road Varthur Hobli, Bangalore, Karnataka, India
図6-4に示すように、アダプタ構成ウィザードの「メッセージ」ページにナビゲートし、「ネイティブ・フォーマットのスキーマの定義」ボタンをクリックします。
図6-5に示すように、「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
「次へ」をクリックします。図6-6に示すように、「タイプの選択」ページが表示されます。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。
図6-7に示すように、「参照」をクリックしてaddress-csv.txtファイルを選択します。
「次へ」をクリックします。図6-8に示すように、「レコード編成」ページが表示されます。
「ファイルはマルチ・レコード・インスタンスを含む」→「1つのタイプの複数レコード」と選択し、「次へ」をクリックします。「要素の指定」ページが表示されます。
図6-9に示すように、「複数レコードを含む要素名の入力」フィールドにAddressBookと入力し、「レコードを表す要素名の入力」フィールドにAddressと入力します。
「次へ」をクリックします。図6-10に示すように、「デリミタの指定」ページが表示されます。
「デリミタ」フィールドで「カンマ(,)」オプションが選択されていることを確認し、「次へ」をクリックします。図6-11に示すように、「フィールド・プロパティ」ページが表示されます。
図6-11 「ネイティブ・フォーマット・ビルダー・ウィザード - フィールド・プロパティ」ページ

「フィールド名として最初のレコードを使用」を選択し、「次へ」をクリックします。図6-12に示すように、「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
| 
 注意: 最初のレコードはフィールド名として使用され、変換時にはヘッダー・レコードとして処理されてスキップされます。 | 
図6-12 「ネイティブ・フォーマット・ビルダー・ウィザード - 生成されたネイティブ・フォーマット・ファイル」ページ

対応するネイティブ・スキーマの定義は次のとおりです。
<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
            xmlns:tns="http://TargetNamespace.com/Read"
            targetNamespace="http://TargetNamespace.com/Read"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified"
            nxsd:version="NXSD"
            nxsd:stream="chars"
            nxsd:encoding="ASCII"
            nxsd:hasHeader="true"
            nxsd:headerLines="1"
            nxsd:headerLinesTerminatedBy="${eol}"
>
  <xsd:element name="AddressBook">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Address" minOccurs="1" maxOccurs="unbounded">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="Name" type="xsd:string"
               nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" />
              <xsd:element name="Street1" type="xsd:string"
               nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" />
              <xsd:element name="Street2" type="xsd:string"
               nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" />
              <xsd:element name="City" type="xsd:string"
               nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" />
              <xsd:element name="State" type="xsd:string"
               nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" />
              <xsd:element name="Country" type="xsd:string"
               nxsd:style="terminated" nxsd:terminatedBy="${eol}" nxsd:quotedBy=""" />
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
「テスト」をクリックします。図6-13に示すように、「NXSDスキーマのテスト」ダイアログが表示されます。
「XMLの生成」アイコンをクリックします。図6-14に示すように、生成されたXMLが「NXSDスキーマのテスト」ダイアログの「結果XML」ペインに表示されます。
対応するネイティブ・スキーマ・フォーマットを使用したネイティブ・データは、次のXMLに変換されます。
<?xml version = '1.0' encoding = 'UTF-8'?>
<AddressBook xmlns="http://TargetNamespace.com/ReadFile">
   <Address>
      <Name>Oracle India Private Limited</Name>
      <Street1> Lexington Towers Prestige St. John's Woods</Street1>
      <Street2> 2nd Cross Road Chikka Audugodi</Street2>
      <City> Bangalore</City>
      <State> Karnataka</State>
      <Country> India</Country>
   </Address>
   <Address>
      <Name>Intel Technology India Private Limited</Name>
      <Street1> Survey #23-56 P Devarabeesanahalli Village</Street1>
      <Street2> Outer Ring Road Varthur Hobli</Street2>
      <City> Bangalore</City>
      <State> Karnataka</State>
      <Country> India</Country>
   </Address>
</AddressBook>
「OK」をクリックします。図6-12に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示されます。
「次へ」をクリックします。図6-15に示すように、「ネイティブ・フォーマット・ビルダー: 終了」ページが表示されます。
「終了」をクリックします。図6-16に示すように、生成されたNXSDを含んだアダプタ構成ウィザードの「メッセージ」ページが表示されます。
前述の例で定義された使用例は、*SVクラスの一例です。ワイルド・カードは、任意の文字または文字列に置き換えられます。たとえば、プラス(+)で区切られた値を含むネイティブ・データの場合、ワイルド・カードをプラス(+)文字で置き換えます。
このネイティブ・ファイルのXMLスキーマを作成する際には、ネイティブ・フォーマット・ビルダー・ウィザードの「デリミタ」タイプ・オプションを使用します。
変換されるネイティブ・データ・フォーマット
次のようなネイティブ・データ・フォーマットがあります。
a+b+c+d+e f+g+h+i+j
ネイティブ・スキーマ
nxsd:terminatedBy=","のかわりにterminated byフォーマットをnxsd:terminatedBy="+"として定義することを除き、対応するネイティブ・スキーマ定義は前の使用例と似ています。terminatedスタイルの詳細は、第6.2.2.2項「終了データの定義」を参照してください。
この例では、使用されるネイティブ・データはCSVの場合と同じですが、データのタイプはCSVではなく固定長です。
このネイティブ・ファイルのXMLスキーマを作成するには、ネイティブ・フォーマット・ビルダー・ウィザードの「固定長」オプションを使用します。
この使用例では、ネイティブ・フォーマット・ビルダーにより、名前、番地、市区町村、都道府県および国などの住所詳細を含んだaddressという固定長ファイル・タイプが使用されます。このaddressネイティブ・ファイル内の要素は、すべて固定長です。対応するNXSDを生成し、同様にテストできます。この使用例を実行する手順は、次のとおりです。
サンプル・テキスト・ファイルaddress.txt内のデータは、次のとおりです。
Name Street City State Country ABC Private Limited Street1 Bangalore Karnataka India XYZ Private Limited Street1 Bangalore Karnataka India
図6-4に示すように、アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。図6-5に示すように、「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
「次へ」をクリックします。「タイプの選択」ページが表示されます。
図6-17に示すように、ファイル・タイプとして「固定長」を選択します。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。
図6-18に示すように、「参照」をクリックしてaddress.txtファイルを選択します。
「次へ」をクリックします。図6-19に示すように、「レコード編成」ページが表示されます。
「1つのタイプの複数レコード」を選択して「次へ」をクリックします。「要素の指定」ページが表示されます。
図6-20に示すように、「複数レコードを含む要素名の入力」フィールドにAddressBookと入力し、「レコードを表す要素名の入力」フィールドにAddressと入力します。
「次へ」をクリックします。「マルチ・レコード・ファイルのフィールド長」ページが表示されます。
図6-21に示すように、必要な位置でルーラーをクリックしてサンプル・テキスト領域のフィールドをマーク付けし、「次へ」をクリックします。「フィールド・プロパティ」ページが表示されます。
図6-21 「ネイティブ・フォーマット・ビルダー・ウィザード - マルチ・レコード・ファイルのフィールド長」ページ

図6-22に示すように、「フィールド名として最初のレコードを使用」を選択します。
図6-22 「ネイティブ・フォーマット・ビルダー・ウィザード - フィールド・プロパティ」ページ

「次へ」をクリックします。図6-23に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示されます。
図6-23 「ネイティブ・フォーマット・ビルダー・ウィザード - 生成されたネイティブ・フォーマット・ファイル」ページ

対応するネイティブ・スキーマ定義はCSVファイルの定義と似ていますが、固定長スタイルの関連する属性とともに、styleがnxsd:style="terminated"からnxsd:style="fixedLength"に変わります。固定長スタイルでは、必須属性はlength: nxsd:lengthです。nxsd:lengthの値は、読み取られる実際のデータの長さです。
<?xml version="1.0" encoding="UTF-8" ?>
 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
            xmlns:tns="http://TargetNamespace.com/FileIn_1"
            targetNamespace="http://TargetNamespace.com/FileIn_1"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified"
 
            nxsd:version="NXSD"
            nxsd:stream="chars"
            nxsd:encoding="ASCII"
            nxsd:hasHeader="true"
            nxsd:headerLines="1"
            nxsd:headerLinesTerminatedBy="${eol}"
 
  <xsd:element name="AddressBook">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Address" minOccurs="1" maxOccurs="unbounded" nxsd:style="array" nxsd:cellSeparatedBy="${eol}">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="Name" type="xsd:string" nxsd:style="fixedLength" nxsd:length="22" />
              <xsd:element name="Street" type="xsd:string" nxsd:style="fixedLength" nxsd:length="8" />
              <xsd:element name="City" type="xsd:string" nxsd:style="fixedLength" nxsd:length="12" />
              <xsd:element name="State" type="xsd:string" nxsd:style="fixedLength" nxsd:length="10" />
              <xsd:element name="Country" type="xsd:string" nxsd:style="fixedLength" nxsd:length="7" />
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
 
</xsd:schema>
「テスト」をクリックします。図6-24に示すように、「NXSDスキーマのテスト」ダイアログが表示されます。
「XMLの生成」アイコンをクリックします。図6-25に示すように、生成されたXMLが「NXSDスキーマのテスト」ダイアログの「結果XML」ペインに表示されます。
対応するネイティブ・スキーマ・フォーマットを使用したネイティブ・データは、次のXMLに変換されます。
<?xml version = '1.0' encoding = 'UTF-8'?>
<AddressBook xmlns="http://TargetNamespace.com/Read">
   <Address>
      <Name>ABC Private Limited   </Name>
      <Street>Street1  </Street>
      <City> Bangalore </City>
      <State>Karnataka </State>
      <Country>India</Country>
   </Address>
   <Address>
      <Name>XYZ Private Limited   </Name>
      <Street>Street1  </Street>
      <City> Bangalore </City>
      <State>Karnataka </State>
      <Country>India </Country>
   </Address>
</AddressBook>
「OK」をクリックします。図6-23に示すように、「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
「次へ」をクリックします。図6-15に示すように、「ネイティブ・フォーマット・ビルダー: 終了」ページが表示されます。
「終了」をクリックします。図6-16に示すように、生成されたNXSDを含んだアダプタ構成ウィザードの「メッセージ」ページが表示されます。
請求書のファイル構造は、前述の使用例で説明したCSV、*SVおよび固定長のファイルの構造よりも複雑です。通常、請求書には購入者の情報、販売者の情報および明細項目が含まれます。これらの各要素には、複合タイプを使用できます。たとえば、購入者要素をpartner-typeとして定義し、partner-typeをid、nameおよびaddressという3つの要素で構成できます。
このネイティブ・ファイルのXMLスキーマを作成する際には、ネイティブ・フォーマット・ビルダー・ウィザードの「複合タイプ」オプションを使用します。
この使用例では、ネイティブ・フォーマット・ビルダーにより、buyer、seller、itemsなどの複数のレコードを含んだinvoiceという複合ファイル・タイプのinvoice.txtが使用されます。この使用例を使用すると、NXSDを生成してテストすることもできます。この使用例を実行する手順は、次のとおりです。
サンプル・テキスト・ファイルinvoice.txt内のデータは、次のとおりです。
6335722^Company One^First Street   999       San Jose       95129USCA650-801-6250
       ^Oracle^Bridge Parkway 1600      Redwood Shores 94065USCA650-506-7000
001|BPEL Process Manager Enterprise Edition|20000,2,+40000+
002|BPEL Process Manager Standard Edition|10000,5,+50000+
003|BPEL Process Manager Developer Edition|1000,20,+20000+#110000
図6-4に示すように、アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。図6-5に示すように、「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
「次へ」をクリックします。図6-26に示すように、「タイプの選択」ページが表示されます。
「複合タイプ(フィールドそのものがレコードで複数のデリミタ・タイプを持つ可能性があるレコードが含まれています)」を選択します。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。
図6-27に示すように、「参照」をクリックしてinvoice.txtファイルを選択し、「ルート要素」フィールドにInvoiceと入力します。
「次へ」をクリックします。図6-28に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」が表示されます。
partner-type複合タイプの作成
invoice.txtサンプルを使用して作成できるスキーマ構造は、次のとおりです。
Invoice
Buyer => partner-type
Seller => partner-type
Items => item-type
Invoice-total => double
ネイティブ・データの1行目は購入者の詳細で構成され、販売者の詳細、明細項目および明細項目の合計が続きます。購入者要素と販売者要素の両方が、次のように同じ複雑な構造を持っています。
最初の7文字はUIDです。
これには、「^」で囲まれた購入者/販売者の名前が続きます。
この後には、行末まで住所が続きます。
「複合タイプの追加」アイコンをクリックします。図6-29に示すように、「スキーマ・ツリー」でInvoiceの下に複合タイプ<new_complex_type>が作成されます。
「サンプル・ファイル」セクションの右ペインからサンプル・テキストの1行目を選択し、「<new_complex_type>」ノードにドラッグ・アンド・ドロップします。「複合タイプ詳細」ダイアログが表示されます。
図6-30に示すように、「複合タイプ名」フィールドにpartner-typeと入力します。
図6-30 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ: 「複合タイプ詳細」ダイアログ

必要な位置でルーラーをクリックしてサンプル・テキスト領域のフィールドをマーク付けし、「フィールドの生成」ボタンをクリックします。定義したフィールドのデータのスタイルの解析が試行されます。
| 
 注意: 「固定長」または「混在」デリミタ・タイプ・オプションを選択した場合は、ルーラー・ベースのテキスト領域が表示されます。ルーラーを使用して、サンプル・テキスト内のフィールドを識別する必要があります。デリミタ付きデータの場合は、「デリミタ」フィールドで該当するデリミタを選択または入力します。 | 
図6-31に示すように、「名前」フィールドにid、nameおよびaddressと入力します。
各フィールドの横にある鉛筆アイコンをクリックし、対応する「フィールド詳細の編集」ダイアログを表示します。このダイアログでフィールド・プロパティを編集できます。たとえば、「name」フィールドの横にある鉛筆アイコンをクリックします。図6-32に示すように、「フィールド詳細の編集」ダイアログが表示されます。
図6-32に示すように、次のフィールド・プロパティを編集します。
タイプ: サンプル・テキストのデータ型。「タイプ」リストで「String」を選択します。
スタイル: 複合タイプ要素のスタイルを表します。次の4つのオプションから選択できます。
固定長
surrounded
terminated
左囲み/右囲み
この例では、surroundedを選択します。
囲み: このオプションが表示されるのは、「スタイル」オプションでsurroundedを選択した場合です。この例では、「囲み」フィールドにカレット(^)を入力します。
このパネルに表示されるフィールド・プロパティは、スキーマに使用されているNXSD属性に対応しています。
「OK」をクリックします。選択したフィールド・プロパティを含んだ「複合タイプ詳細」ダイアログが表示されます。
idおよびaddress名前フィールドのフィールド・プロパティを確認または編集します。
「複合タイプ詳細」ダイアログで「OK」をクリックします。図6-33に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
図6-33 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ: partner-type複合タイプ

address-type複合タイプの作成
address要素を、さらに固定長の番地、市区町村などを含んだ別のcomplex-typeとして定義できます。
「スキーマ・ツリー」に「<new_complex_type>」ノードをもう1つ作成します。「partner-type複合タイプの作成」のステップ1を参照してください。
サンプル・テキストの1行目のaddressパートを複合タイプ<new_complex_type>にドラッグ・アンド・ドロップします。「複合タイプ詳細」ダイアログが表示されます。
「複合タイプ名」フィールドにaddress-typeと入力します。
ルーラーをクリックしてサンプル・テキスト領域のフィールドをマーク付けし、「フィールドの生成」ボタンをクリックします。次に、図6-34に示すように、「名前」フィールドにstreet1、street2、city、zip、country、stateおよびphoneと入力します。
図6-34 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ: 「複合タイプ詳細」ダイアログ

「OK」をクリックします。図6-35に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
partner-type複合タイプのaddressフィールドへのaddress-type複合タイプの割当て
partner-type複合タイプのaddressフィールドに、address-type複合タイプを割り当てる必要があります。次のいずれかの方法で要素に複合タイプを割り当てることができます。
address-typeノードをpartner-type複合タイプのaddressフィールド・ノードにドラッグ・アンド・ドロップします。これにより、addressフィールド要素にaddress-typeが即時に割り当てられます。
partner-type複合タイプのaddressフィールド・ノードを選択し、鉛筆アイコンをクリックします。
図6-36に示すように、「フィールド詳細の編集」ダイアログが表示されます。
「タイプ」リストで「address-type」オプションを選択し、「OK」をクリックします。図6-37に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページでaddressフィールド要素にaddress-typeオプションが割り当てられます。
buyerおよびsellerグローバル要素の作成
「Invoice」を選択し、「要素の追加」アイコンをクリックします。「スキーマ・ツリー」で、ルート要素「Invoice」の下に要素<new_element>が作成されます。
名前をbuyerに変更します。
再び「Invoice」を選択し、「要素の追加」アイコンをクリックします。「スキーマ・ツリー」で、「Invoice」の下に要素<new_element>が作成されます。
名前をsellerに変更します。
次に、各buyerおよびsellerノード上にpartner-typeノードをドラッグ・アンド・ドロップして、これらのノードにpartner-type複合タイプを割り当てます。図6-38に示すように、「スキーマ・ツリー」が表示されます。
item-type複合タイプとitemsおよびinvoice-total要素ノードの作成
items要素はitem-typeの配列とみなすことができます。ネイティブ・ファイル内の最後の明細項目では、番号記号(#)の後に明細項目の合計が続いて終了しています。
「Invoice」を選択し、「要素の追加」アイコンをクリックします。「スキーマ・ツリー」で、「Invoice」の下に要素<new_element>が作成されます。
名前をitemsに変更します。
図6-39に示すように、item-type複合タイプを作成してフィールド・プロパティを定義します。
item-type複合タイプをitems要素にドラッグ・アンド・ドロップして、この要素にitem-typeを割り当てます。
items - item-typeを選択して鉛筆アイコンをクリックします。「要素の詳細」ダイアログが表示されます。
図6-40に示すように、「要素の詳細」ダイアログで次のプロパティを設定します。
「最大発生数」を「バインドなし」に設定します。
「配列」を選択します。「セル・セパレータ」および「配列セパレータ」が有効になります。
「セル・セパレータ」を「${eol}」に設定します。
「配列セパレータ」を「#」に設定します。
| 
 注意: 要素itemsはitem-typeの配列として定義されます。 | 
「OK」をクリックします。
invoice-total要素を作成し、サンプル・テキスト(110000)を<new_element>ノードにドラッグ・アンド・ドロップします。「要素の詳細」ダイアログが表示されます。
「要素名」フィールドにinvoice-totalと入力し、「フィールドの生成」をクリックします。図6-41に示すように、「アラート」メッセージが表示されます。
グローバル要素のサンプル・データで単一フィールドが識別されている場合、このデータのプロパティがグローバル要素自体に適用されます。
「アラート」メッセージで「OK」をクリックします。「要素の詳細」ダイアログが表示されます。
「データ型」リストで「double」を選択し、「OK」をクリックします。図6-42に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
図6-42 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ: 完成したスキーマ・ツリー

「次へ」をクリックします。図6-43に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示され、ネイティブ・フォーマット・ファイルが表示されます。
図6-43 「ネイティブ・フォーマット・ビルダー・ウィザード - 生成されたネイティブ・フォーマット・ファイル」ページ

前述のネイティブ・データに対応するネイティブ・スキーマの定義は、次のように定義できます。
<schema attributeFormDefault="qualified" elementFormDefault="qualified" 
                targetNamespace="http://xmlns.oracle.com/ias/pcbpel/fatransschema/demo"
                xmlns:tns="http://xmlns.oracle.com/ias/pcbpel/fatransschema/demo"
                xmlns="http://www.w3.org/2001/XMLSchema" 
                xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" 
              nxsd:version="NXSD" nxsd:stream="chars">
 
    <element name="invoice" type="tns:invoiceType" />
 
    <complexType name="invoiceType"> 
       <sequence>
          <element name="purchaser" type="tns:partnerType" />
          <element name="seller" type="tns:partnerType" />
          <element name="line-item" type="tns:line-itemType" 
              maxOccurs="unbounded" nxsd:style="array" 
                nxsd:cellSeparatedBy="${eol}" nxsd:arrayTerminatedBy="#"/>
          <element name="total" type="double" nxsd:style="terminated"
                nxsd:terminatedBy="${eol}"/>
       </sequence>
    </complexType>
 
    <complexType name="partnerType"> 
       <sequence>
          <element name="uid" type="string" nxsd:style="fixedLength"
             nxsd:length="7" nxsd:padStyle="tail" nxsd:paddedBy=" "/> 
          <element name="name" type="string" nxsd:style="surrounded"
             nxsd:surroundedBy="^"/>        
          <element name="address" type="tns:addressType" />
       </sequence>
    </complexType>  
       
 
    <complexType name="addressType"> 
       <sequence>
          <element name="street1" type="string" nxsd:style="fixedLength"
             nxsd:length="15" nxsd:padStyle="tail" nxsd:paddedBy=" "/>
          <element name="street2" type="string" nxsd:style="fixedLength"
             nxsd:length="10" nxsd:padStyle="tail" nxsd:paddedBy=" "/>
          <element name="city" type="string" nxsd:style="fixedLength"
             nxsd:length="15" nxsd:padStyle="tail" nxsd:paddedBy=" "/>
          <element name="postal-code" type="string" nxsd:style="fixedLength"
             nxsd:length="5" nxsd:padStyle="none"/>
          <element name="country" type="string" nxsd:style="fixedLength"
             nxsd:length="2" nxsd:padStyle="none"/>
          <element name="state" type="string" nxsd:style="fixedLength"
             nxsd:length="2" nxsd:padStyle="none"/>
          <element name="phone" type="string" nxsd:style="terminated"
             nxsd:terminatedBy="${eol}"/>
       </sequence>
    </complexType>
    <complexType name="line-itemType"> 
       <sequence>
          <element name="uid" type="string" nxsd:style="fixedLength"
             nxsd:length="3" nxsd:padStyle="none"/>     
          <element name="description" type="string" nxsd:style="surrounded"
             nxsd:surroundedBy="|"/>
          <element name="price" type="double" nxsd:style="terminated"
               nxsd:terminatedBy=","/>
          <element name="quantity" type="integer" nxsd:style="terminated"
               nxsd:terminatedBy=","/>
          <element name="line-total" type="double" nxsd:style="surrounded"
               nxsd:surroundedBy="+"/>
       </sequence>
    </complexType>
 
</schema>
「テスト」をクリックします。図6-44に示すように、「NXSDスキーマのテスト」ダイアログが表示されます。
「XMLの生成」アイコンをクリックします。図6-45に示すように、「NXSDスキーマのテスト」ダイアログの右ペインに「結果XML」が表示されます。
変換されたXMLは次のようになります。
<invoice xmlns="http://xmlns.oracle.com/pcbpel/demoSchema/invoice-nxsd">
  <purchaser>
    <uid>6335722</uid>
    <name>Company One</name>
    <address>
      <street1>First Street</street1>
      <street2>999</street2>
      <city>San Jose</city>
      <postal-code>95129</postal-code>
      <country>US</country>
      <state>CA</state>
      <phone>650-801-6250</phone>
    </address>
  </purchaser>
  <seller>
    <uid/>
    <name>Oracle</name>
    <address>
      <street1>Bridge Parkway</street1>
      <street2>1600</street2>
      <city>Redwood Shores</city>
      <postal-code>94065</postal-code>
      <country>US</country>
      <state>CA</state>
      <phone>650-506-7000</phone>
    </address>
  </seller>
  <line-item>
    <uid>001</uid>
    <description>BPEL Process Manager Enterprise Edition</description>
    <price>20000</price>
    <quantity>2</quantity>
    <line-total>40000</line-total>
  </line-item>
  <line-item>
    <uid>002</uid>
    <description>BPEL Process Manager Standard Edition</description>
    <price>10000</price>
    <quantity>5</quantity>
    <line-total>50000</line-total>
  </line-item>
  <line-item>
    <uid>003</uid>
    <description>BPEL Process Manager Developer Edition</description>
    <price>1000</price>
    <quantity>20</quantity>
    <line-total>20000</line-total>
  </line-item>
  <total>110000</total>
</invoice>
「OK」をクリックします。図6-43に示すように、「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
「次へ」をクリックします。図6-15に示すように、「ネイティブ・フォーマット・ビルダー: 終了」ページが表示されます。
「終了」をクリックします。図6-16に示すように、生成されたNXSDを含んだアダプタ構成ウィザードの「メッセージ」ページが表示されます。
ネイティブ・データがXMLでそのXMLにネームスペースがない場合は、ネイティブ・フォーマット・トランスレータを使用してインバウンドXMLドキュメントにネームスペースを追加できます。また、アウトバウンドXMLドキュメントからネームスペースを削除することもできます。
次のいずれかに該当する場合、XMLにはネームスペースがありません。
XMLに対応するXMLスキーマがあり、そのXMLスキーマにターゲット・ネームスペースが指定されていない場合。
XMLに対応するDTDがあり、それがXMLスキーマに変換されたDTDである場合。
どちらの場合も、targetNamespaceが指定されたラッパー・スキーマを作成し、そのラッパー・スキーマに実際のスキーマを含める必要があります。また、ラッパー・スキーマにはDTDに設定されたnxsd:version属性も必要です。例:
--wrapper.xsd <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="myNamespace" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" nxsd:version="DTD"> <include schemaLocation="actual.xsd"/> </schema>
| 
 注意: 実際のスキーマにelementFormDefault="qualified"が指定されていることを確認してください。 | 
元の.xsdファイルのかわりにこのwrapper.xsdファイルを使用すると、インバウンドXMLにmyNamespaceネームスペースが追加され、アウトバウンドXMLからmyNamespaceネームスペースが削除されます。
この使用例では、ネイティブ・フォーマット・ビルダーにより、order、customer、itemsなどの複数のレコード・タイプを含んだorder.txtという複合タイプのファイルが使用されます。この使用例を使用すると、NXSDを生成してテストすることもできます。この使用例を実行する手順は、次のとおりです。
サンプル・テキスト・ファイルorder.txt内のデータは、次のとおりです。
Order, ID41678, 20May2000 Item1, GigaWidget, 60, $75 Item2, MegaBucket, 48, $125 Cust1, Hopkins Associates, ID26490 Order, ID41680, 20May2000 Item3, Rt.Clopper, 40, $100 Item4, Lt.Clopper, 50, $100 Cust2, Jersey WebInovaters, ID46786
order、customerおよびitemのネイティブ・データごとに1行をドラッグして、次の複合タイプを作成します。
OrderType
ItemType
CustomerType
複合タイプの作成の詳細は、第6.4.3項「複雑なファイル構造のスキーマの定義」を参照してください。
図6-46に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
「選択ノードの追加」をクリックします。「選択オプション・タイプ」ダイアログが表示されます。
「選択オプション・タイプ」ダイアログで、図6-47に示すようにオプションを設定して「OK」をクリックします。
「choice」を選択し、「要素の追加」アイコンをクリックします。choiceノードに「<new_element>」が追加されます。
新規に追加した要素の名前をOrderChoiceに変更し、「OrderType」複合タイプ要素を「OrderChoice」にドラッグ・アンド・ドロップします。
「OrderChoice - string」を選択して「ノードの編集」アイコンをクリックします。「要素の詳細」ダイアログが表示されます。
図6-48に示すように、「選択値」フィールドにOrderと入力して「OK」をクリックします。
| 
 注意: 「長さ」フィールドの値が4に設定されているため、「選択値」フィールドでは4文字を指定する必要があります。 | 
ステップ5から8に従って、ItemTypeデータ型のItemChoice選択複合タイプとCustomerTypeデータ型のCustomerChoice選択複合タイプを作成します。図6-49に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ダイアログが表示されます。
「次へ」をクリックします。図6-50に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示され、ネイティブ・フォーマット・ファイルが表示されます。
ネイティブ・スキーマ
前述のネイティブ・データに対応するネイティブ・スキーマの定義は、次のように定義できます。
<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
            xmlns:tns="http://TargetNamespace.com/test"
            targetNamespace="http://TargetNamespace.com/test"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified"
            nxsd:version="NXSD"
            nxsd:stream="chars"
            nxsd:encoding="ASCII"
>
  <xsd:element name="Root-Element">
    <xsd:complexType>
      <xsd:choice minOccurs="1" maxOccurs="unbounded"
 nxsd:choiceCondition="fixedLength" nxsd:length="4">
        <xsd:element name="OrderChoice" type="tns:OrderType"
 nxsd:conditionValue="Orde" />
        <xsd:element name="ItemChoice" type="tns:ItemType"
 nxsd:conditionValue="Item" />
        <xsd:element name="CustomerChoice" type="tns:customerType"
 nxsd:conditionValue="Cust" />
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>
  <xsd:complexType name="customerType">
    <xsd:sequence>
      <xsd:element name="C1" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="," />
      <xsd:element name="C2" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="," />
      <xsd:element name="C3" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="${eol}" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="ItemType">
    <xsd:sequence>
      <xsd:element name="C1" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="," />
      <xsd:element name="C2" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="," />
      <xsd:element name="C3" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="," />
      <xsd:element name="C4" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="${eol}" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="OrderType">
    <xsd:sequence>
      <xsd:element name="C1" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="," />
      <xsd:element name="C2" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="," />
      <xsd:element name="C3" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="${eol}" />
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>
「テスト」をクリックします。「NXSDスキーマのテスト」ダイアログが表示されます。
「XMLの生成」アイコンをクリックします。図6-51に示すように、「NXSDスキーマのテスト」ダイアログの右ペインに「結果XML」が表示されます。
ネイティブ・スキーマを使用して変換したXML
変換されたXMLは次のようになります。
<?xml version = '1.0' encoding = 'UTF-8'?>
<Root-Element xmlns="http://TargetNamespace.com/test">
   <OrderChoice>
      <C1>r</C1>
      <C2> ID41678</C2>
      <C3> 20May2000</C3>
   </OrderChoice>
   <ItemChoice>
      <C1>1</C1>
      <C2> GigaWidget</C2>
      <C3> 60</C3>
      <C4> $75</C4>
   </ItemChoice>
   <ItemChoice>
      <C1>2</C1>
      <C2> MegaBucket</C2>
      <C3> 48</C3>
      <C4> $125</C4>
   </ItemChoice>
   <CustomerChoice>
      <C1>1</C1>
      <C2> Hopkins Associates</C2>
      <C3> ID26490</C3>
   </CustomerChoice>
   <OrderChoice>
      <C1>r</C1>
      <C2> ID41680</C2>
      <C3> 20May2000</C3>
   </OrderChoice>
   <ItemChoice>
      <C1>3</C1>
      <C2> Rt.Clopper</C2>
      <C3> 40</C3>
      <C4> $100</C4>
   </ItemChoice>
   <ItemChoice>
      <C1>4</C1>
      <C2> Lt.Clopper</C2>
      <C3> 50</C3>
      <C4> $100</C4>
   </ItemChoice>
   <CustomerChoice>
      <C1>2</C1>
      <C2> Jersey WebInovaters</C2>
      <C3> ID46786</C3>
   </CustomerChoice>
</Root-Element>
「OK」をクリックします。「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「終了」ページが表示されます。
この使用例では、ネイティブ・フォーマット・ビルダーにより、異なるaddressを持つ複数のレコードを含んだaddress.txtという複合タイプのファイルが使用されます。この使用例では2つのレコード・タイプを持つスキーマを作成します。RecOneレコードはテキスト「YES」で終わるレコードのデータを取得し、RecTwoレコードはテキスト「NO」で終わるレコードのデータを取得します。
この使用例を使用すると、NXSDを生成してテストすることもできます。この使用例を実行する手順は、次のとおりです。
サンプル・テキスト・ファイルaddress.txt内のデータは、次のとおりです。
Name1,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", YES Name2,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", NO Name3,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", NO Name4,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", YES
アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
「次へ」をクリックします。「タイプの選択」ページが表示されます。
「複合タイプ」を選択して「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。
「参照」をクリックしてaddress.txtファイルを選択し、「ルート要素」フィールドにAddressと入力します。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
「複合タイプの追加」アイコンをクリックします。「スキーマ・ツリー」で、「Address」の下に複合タイプ<new_complex_type>が作成されます。
「サンプル・ファイル」セクションの右ペインからサンプル・テキストの1行目を選択し、「<new_complex_type>」ノードにドラッグ・アンド・ドロップします。「複合タイプ詳細」ダイアログが表示されます。
「複合タイプ名」フィールドにRECORD1と入力し、「デリミタ」リストで「カンマ(,)」を選択します。
「OK」をクリックします。図6-52に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
同様に、RECORD2という別の複合タイプ・ノードを作成します。図6-53に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
「選択ノードの追加」をクリックします。「選択オプション・タイプ」ダイアログが表示されます。
「選択オプション・タイプ」ダイアログで、図6-54に示すようにオプションを設定して「OK」をクリックします。
「choice」を選択し、「要素の追加」アイコンをクリックします。choiceノードに「<new_element>」が追加されます。
「ノードの編集」アイコンをクリックします。「要素の詳細」ダイアログが表示されます。
「要素名」フィールドにRECONEと入力し、データ型として「RECORD1」を選択し、選択条件として「YES」を設定し、「OK」をクリックします。
ステップ14から16に従って、choiceノードのRECTWO選択要素を作成し、選択条件として「NO 」を設定します。
| 
 注意: 合計文字数を3文字にする必要があるため、文字「NO」の後に空白を1個挿入しています。 | 
図6-55に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ダイアログが表示されます。
RECORD1複合タイプをchoiceの下のRECONE要素にドラッグ・アンド・ドロップし、RECORD2複合タイプをchoiceの下のRECTWO要素にドラッグ・アンド・ドロップします。ネイティブ・フォーマット・ビルダーの「設計スキーマ」ダイアログが表示されます。
「次へ」をクリックします。図6-56に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示され、ネイティブ・フォーマット・ファイルが表示されます。
ネイティブ・スキーマ
前述のネイティブ・データに対応するネイティブ・スキーマの定義は、次のように定義できます。
<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
            xmlns:tns="http://TargetNamespace.com/tesNew"
            targetNamespace="http://TargetNamespace.com/tesNew"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified"
            nxsd:version="NXSD"
            nxsd:stream="chars"
            nxsd:encoding="ASCII"
>
  <xsd:element name="Root-Element">
    <xsd:complexType>
      <xsd:choice minOccurs="1" maxOccurs="unbounded"
 nxsd:choiceCondition="${X}" nxsd:lookAhead="70" nxsd:scanLength="3"
 nxsd:assignTo="${X}">
        <xsd:element name="RECTWO" type="tns:RECORD2" nxsd:conditionValue="NO "
 />
        <xsd:element name="RECONE" type="tns:RECORD1" nxsd:conditionValue="YES"
 />
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>
  <xsd:complexType name="RECORD2">
    <xsd:sequence>
      <xsd:element name="C1" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="," />
      <xsd:element name="C2" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="," />
      <xsd:element name="C3" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="," />
      <xsd:element name="C4" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="," />
      <xsd:element name="C5" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="${eol}" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="RECORD1">
    <xsd:sequence>
      <xsd:element name="C1" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="," />
      <xsd:element name="C2" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="," />
      <xsd:element name="C3" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="," />
      <xsd:element name="C4" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="," />
      <xsd:element name="C5" type="xsd:string" nxsd:style="terminated"
 nxsd:terminatedBy="${eol}" />
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>
「テスト」をクリックします。「NXSDスキーマのテスト」ダイアログが表示されます。
「XMLの生成」アイコンをクリックします。図6-57に示すように、「NXSDスキーマのテスト」ダイアログの右ペインに「結果XML」が表示されます。
ネイティブ・スキーマを使用して変換したXML
変換されたXMLは次のようになります。
<?xml version = '1.0' encoding = 'UTF-8'?>
<Root-Element xmlns="http://TargetNamespace.com/tesNew">
   <RECONE>
      <C1>Name1</C1>
      <C2>2 Old Street, Old Town,Manchester</C2>
      <C3>20-08-1954</C3>
      <C4>0161-499-1718</C4>
      <C5> YES</C5>
   </RECONE>
   <RECTWO>
      <C1>Name2</C1>
      <C2>2 Old Street, Old Town,Manchester</C2>
      <C3>20-08-1954</C3>
      <C4>0161-499-1718</C4>
      <C5> NO </C5>
   </RECTWO>
   <RECTWO>
      <C1>Name3</C1>
      <C2>2 Old Street, Old Town,Manchester</C2>
      <C3>20-08-1954</C3>
      <C4>0161-499-1718</C4>
      <C5> NO </C5>
   </RECTWO>
   <RECONE>
      <C1>Name4</C1>
      <C2>2 Old Street, Old Town,Manchester</C2>
      <C3>20-08-1954</C3>
      <C4>0161-499-1718</C4>
      <C5> YES</C5>
   </RECONE>
</Root-Element>
| 
 注意: RECONEおよびRECTWOという2つのレコード・タイプがあります。RECONEは文字YESで終わるレコードを取得し、RECTWOは文字NOで終わるレコードを取得します。 | 
「OK」をクリックします。「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「終了」ページが表示されます。
この使用例では、ネイティブ・フォーマット・ビルダーにより、項目の配列を含んだarray.txtという複合タイプのファイルが使用されます。サンプル・データには、4つの名前をセミコロンで区切って末尾にピリオド1個を付けたものが含まれています。この使用例では、メンバー名がセミコロンで区切られて配列がピリオド1個で終了する配列タイプを使用したスキーマを作成します。この使用例を使用すると、NXSDを生成してテストすることもできます。
この使用例を実行する手順は、次のとおりです。
サンプル・テキスト・ファイルarray.txt内のデータは、次のとおりです。
John;Steve;Paul;Todd.
アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
「次へ」をクリックします。「タイプの選択」ページが表示されます。
「複合タイプ」を選択して「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。
図6-58に示すように、「参照」をクリックしてarray.txtファイルを選択します。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
NewArrayというグローバル要素を作成し、このグローバル要素にネイティブ・データをドラッグ・アンド・ドロップします。
図6-59に示すように、「NewArray」を選択して「ノードの編集」アイコンをクリックします。「要素の詳細」ダイアログが表示されます。
「要素の詳細」ダイアログで、図6-60に示すようにオプションを設定して「OK」をクリックします。
ネイティブ・フォーマット・ビルダーの「設計スキーマ」ダイアログが表示されます。
「次へ」をクリックします。図6-61に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示され、ネイティブ・フォーマット・ファイルが表示されます。
ネイティブ・スキーマ
前述のネイティブ・データに対応するネイティブ・スキーマの定義は、次のように定義できます。
<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
            xmlns:tns="http://TargetNamespace.com/testnewArray"
            targetNamespace="http://TargetNamespace.com/testnewArray"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified"
            nxsd:version="NXSD"
            nxsd:stream="chars"
            nxsd:encoding="ASCII"
>
  <xsd:element name="Root-Element">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="NewArray" type="xsd:string" maxOccurs="unbounded"
 nxsd:style="array" nxsd:cellSeparatedBy=";" nxsd:arrayTerminatedBy="." />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
「テスト」をクリックします。「NXSDスキーマのテスト」ダイアログが表示されます。
「XMLの生成」アイコンをクリックします。図6-62に示すように、「NXSDスキーマのテスト」ダイアログの右ペインに「結果XML」が表示されます。
ネイティブ・スキーマを使用して変換したXML
変換されたXMLは次のようになります。
<?xml version = '1.0' encoding = 'UTF-8'?> <Root-Element xmlns="http://TargetNamespace.com/testnewArray"> <NewArray>John</NewArray> <NewArray>Steve</NewArray> <NewArray>Paul</NewArray> <NewArray>Todd</NewArray> </Root-Element>
「OK」をクリックします。「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「終了」ページが表示されます。
この使用例では、DTDファイルというネイティブ・データ・タイプのスキーマを定義する手順を説明します。
このネイティブ・ファイルのXMLスキーマを作成する際には、ネイティブ・フォーマット・ビルダー・ウィザードの「XSDに変換するDTD」オプションを使用します。
この使用例では、ネイティブ・フォーマット・ビルダーにより、DTDファイル・タイプ*.dtdが使用されます。対応するNXSDを生成し、同様にテストできます。この使用例を実行する手順は、次のとおりです。
任意のDTDファイルを使用します。
図6-4に示すように、アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。図6-5に示すように、「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
「次へ」をクリックします。図6-26に示すように、「タイプの選択」ページが表示されます。
「XSDに変換するDTD」を選択します。図6-63に示すように、「タイプの選択」ページが表示されます。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「DTDの説明」ページが表示されます。
図6-64に示すように、「参照」をクリックしてdb.dtdファイルを選択し、「ルート要素」リストから「DatabaseInventory」を選択します。
「次へ」をクリックします。図6-65に示すように、「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
図6-65 「ネイティブ・フォーマット・ビルダー・ウィザード - フィールド・プロパティ」ページ

生成されたサンプル・ネイティブ・スキーマを次に示します。
<?xml version="1.0" encoding="UTF-8" ?>
<!--This Schema has been generated from a DTD. A target namespace has been
added to the schema.-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://TargetNamespace.com/ReadUI"
xmlns="http://TargetNamespace.com/ReadUI" nxsd:version="DTD"
 xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd">
   <xs:element name="GlobalDatabaseName" type="xs:string"/>
   <xs:element name="DatabaseAttributes">
      <xs:complexType>
         <xs:attribute name="Type" use="required">
            <xs:simpleType>
               <xs:restriction base="xs:NMTOKEN">
                  <xs:enumeration value="Production"/>
                  <xs:enumeration value="Development"/>
                  <xs:enumeration value="Testing"/>
               </xs:restriction>
            </xs:simpleType>
         </xs:attribute>
         <xs:attribute name="Version" use="optional" default="9i">
            <xs:simpleType>
               <xs:restriction base="xs:NMTOKEN">
                  <xs:enumeration value="7"/>
                  <xs:enumeration value="8"/>
                  <xs:enumeration value="8i"/>
                  <xs:enumeration value="9i"/>
               </xs:restriction>
            </xs:simpleType>
         </xs:attribute>
      </xs:complexType>
   </xs:element>
   <xs:element name="Comments" type="xs:string"/>
   <xs:element name="Administrator">
      <xs:complexType>
         <xs:simpleContent>
            <xs:extension base="xs:string">
               <xs:attribute name="EmailAlias" use="required"
 type="xs:string"/>
               <xs:attribute name="Extension" use="optional" type="xs:string"/>
            </xs:extension>
         </xs:simpleContent>
      </xs:complexType>
   </xs:element>
   <xs:element name="OracleSID" type="xs:string"/>
   <xs:element name="DatabaseName">
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="GlobalDatabaseName"/>
            <xs:element ref="OracleSID"/>
            <xs:element ref="DatabaseDomain"/>
            <xs:element maxOccurs="unbounded" ref="Administrator"/>
            <xs:element ref="DatabaseAttributes"/>
            <xs:element ref="Comments"/>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
   <xs:element name="DatabaseDomain" type="xs:string"/>
   <xs:element name="DatabaseInventory">
      <xs:complexType>
         <xs:sequence>
            <xs:element maxOccurs="unbounded" ref="DatabaseName"/>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
</xs:schema>
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「終了」ページが表示されます。
「終了」をクリックします。生成されたNXSDを含んだアダプタ構成ウィザードの「メッセージ」ページが表示されます。
この使用例は、変換用のネイティブ・スキーマ・ファイルを作成するために、Oracleファイル/FTPアダプタが(ネイティブ・フォーマット・ビルダー・ウィザードを使用して)COBOLコピーブック・フォーマットのファイルをどのように処理するかを示しています。
次のCOBOLコピーブックの例も提供されています。
COBOLコピーブックには、複数のルート・レベルを含めることができます。すべてのルート・レベルが01のレベルの場合、各グループは暗黙的に他のグループを再定義します。
この使用例では、ネイティブ・フォーマット・ビルダーにより、購入者名、住所および項目などの注文書詳細を含んだpo-ccb.cpyという固定長ファイル・タイプが使用されます。このpo-ccb.cpyネイティブ・ファイル内の要素は、すべて固定長です。サンプル・テキスト・ファイルpo-ccb.cpy内のデータは、次のとおりです。
05 PO-RECORD. 10 PO-BUYER. 15 PO-UID PIC 9(7). 15 PO-NAME PIC X(15). 15 PO-ADDRESS. 20 PO-STREET PIC X(15). 20 PO-CITY PIC X(10). 20 PO-ZIP PIC 9(5). 20 PO-STATE PIC X(2). 10 PO-ITEM. 15 POITEM OCCURS 3 TIMES. 20 PO-LINE-ITEM. 25 PO-ITEM-ID PIC 9(3). 25 PO-ITEM-NAME PIC X(40). 25 PO-ITEM-QUANTITY PIC 9(2). 25 PO-ITEM-PRICE PIC 9(5)V9(2). 10 PO-TOTALPIC 9(7)V9(2).
対応するNXSDを生成し、同様にテストできます。この使用例を実行する手順は、次のとおりです。
Adapters-105CobolCopyBookサンプルに含まれているartifacts.zipファイルから次のファイルを取得します。
artifacts/samples/po-ccb.cpy
artifacts/samples/po-ebcdic.data
Adapters-105CobolCopyBookサンプルを入手するには、Oracle SOA Sample Codeサイトにアクセスし、「Adapters」タブを選択します。
これらのファイルをサンプル・ディレクトリにコピーします。
図6-4に示すように、アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。図6-5に示すように、「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
「次へ」をクリックします。図6-26に示すように、「タイプの選択」ページが表示されます。
「ネイティブ・フォーマットに変換するCOBOLコピーブック」を選択します。図6-66に示すように、「タイプの選択」ページが表示されます。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「COBOLコピーブックの説明」ページが表示されます。
図6-67に示すように、「参照」をクリックしてpo-ccb.cpyファイルを選択します。
「Root-Element」フィールドにPurchaseOrderと入力して「次へ」をクリックします。図6-68に示すように、「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
図6-68 「ネイティブ・フォーマット・ビルダー・ウィザード - 生成されたネイティブ・フォーマット・ファイル」ページ

最上位のペイロード・レコードは、choiceモデル・グループに囲まれています。各ペイロード・レコードには、実行時のデータ・ファイルの処理中におけるレコード・タイプの識別に役立つnxsd:lookAheadおよびnxsd:lookForの2つの属性もあります。そのため、これらの属性に値を追加する必要があります。たとえば、PAYROLL-F-TRANS-CODEフィールドの値がFRのときに、PAYROLL-F-RECORDが発生するとします。その後、レコード要素は次のようになります。
<xsd:element name="PAYROLL-F-RECORD" nxsd:lookAhead="10" nxsd:lookFor="FR">
値10はlookaheadフィールドの位置を示します。次のCOBOLコピーブックでは、05レベルに複数のルート要素があります。
05 ORG-NUM PIC 99. 05 EMP-RECORD. 10 EMP-SSN PIC 9(4)V(6). 10 EMP-WZT PIC 9(6).
ネイティブ・スキーマ
<?xml version="1.0" encoding="UTF-8" ?>
<!--Native format was generated from COBOL copybook : C:\Documents and
 Settings\vdinesh\Desktop\sample_files\po-ccb.cpy-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
 xmlns:extn="http://xmlns.oracle.com/pcbpel/nxsd/extensions"
 targetNamespace="http://TargetNamespace.com/Read"
xmlns:tns="http://TargetNamespace.com/Read" elementFormDefault="qualified"
 attributeFormDefault="unqualified" nxsd:version="NXSD" nxsd:encoding="cp037"
 nxsd:byteOrder="bigEndian" nxsd:stream="chars">
   <xsd:element name="PurchaseOrder">
      <xsd:complexType>
         <xsd:sequence>
            <!--COBOL declaration : 05 PO-RECORD-->
            <xsd:element name="PO-RECORD" minOccurs="1" maxOccurs="unbounded">
               <xsd:complexType>
                  <xsd:sequence>
                     <!--COBOL declaration : 10 PO-BUYER-->
                     <xsd:element name="PO-BUYER">
                        <xsd:complexType>
                           <xsd:sequence>
                              <!--COBOL declaration : 15 PO-UID PIC 9(7)-->
                              <xsd:element name="PO-UID" type="xsd:long"
                                nxsd:style="fixedLength" nxsd:padStyle="head"
                                nxsd:paddedBy="0"
                                nxsd:length="7"/>
                              <!--COBOL declaration : 15 PO-NAME PIC X(15)-->
                              <xsd:element name="PO-NAME" type="xsd:string"
                                nxsd:style="fixedLength" nxsd:padStyle="tail"
                                nxsd:paddedBy=" "
                                nxsd:length="15"/>
                              <!--COBOL declaration : 15 PO-ADDRESS-->
                              <xsd:element name="PO-ADDRESS">
                                 <xsd:complexType>
                                    <xsd:sequence>
                                       <!--COBOL declaration : 20 PO-STREET PIC X(15)-->
                                       <xsd:element name="PO-STREET"
                                        type="xsd:string"
                                        nxsd:style="fixedLength"
                                        nxsd:padStyle="tail"
                                        nxsd:paddedBy=" " nxsd:length="15"/>
                                       <!--COBOL declaration : 20 PO-CITY PIC X(10)-->
                                       <xsd:element name="PO-CITY"
                                        type="xsd:string"
                                        nxsd:style="fixedLength"
                                        nxsd:padStyle="tail"
                                        nxsd:paddedBy=" " nxsd:length="10"/>
                                       <!--COBOL declaration : 20 PO-ZIP PIC 9(5)-->
                                       <xsd:element name="PO-ZIP"
                                        type="xsd:long"
                                        nxsd:style="fixedLength"
                                        nxsd:padStyle="head"
                                        nxsd:paddedBy="0" nxsd:length="5"/>
                                       <!--COBOL declaration : 20 PO-STATE PIC
 X(2)-->
                                       <xsd:element name="PO-STATE"
                                        type="xsd:string"
                                        nxsd:style="fixedLength"
                                        nxsd:padStyle="tail"
                                        nxsd:paddedBy=" " nxsd:length="2"/>
                                    </xsd:sequence>
                                 </xsd:complexType>
                              </xsd:element>
                           </xsd:sequence>
                        </xsd:complexType>
                     </xsd:element>
                     <!--COBOL declaration : 10 PO-ITEM-->
                     <xsd:element name="PO-ITEM">
                        <xsd:complexType>
                           <xsd:sequence>
                              <!--COBOL declaration : 15 POITEM OCCURS 3 TIMES-->
                              <xsd:element name="POITEM" minOccurs="3" maxOccurs="3">
                                 <xsd:complexType>
                                    <xsd:sequence>
                                       <!--COBOL declaration : 20 PO-LINE-ITEM-->
                                       <xsd:element name="PO-LINE-ITEM">
                                          <xsd:complexType>
                                             <xsd:sequence>
                               <!--COBOL declaration : 25 PO-ITEM-ID PIC 9(3)-->
                               <xsd:element name="PO-ITEM-ID"
                               type="xsd:long"
                               nxsd:style="fixedLength" nxsd:padStyle="head"
                               nxsd:paddedBy="0" nxsd:length="3"/>
                              <!--COBOL declaration : 25 PO-ITEM-NAME PIC X(40)-->
                               <xsd:element name="PO-ITEM-NAME"
                               type="xsd:string" 
                               nxsd:style="fixedLength"
                               nxsd:padStyle="tail" 
                               nxsd:paddedBy=" 
                              " nxsd:length="40"/>
                               <!--COBOL declaration : 25 PO-ITEM-QUANTITY PIC 9(2)-->
                                      <xsd:element name="PO-ITEM-QUANTITY"
                                        type="xsd:long"
                                        nxsd:style="fixedLength"
                                        nxsd:padStyle="head" 
                                        nxsd:paddedBy="0" 
                                        nxsd:length="2"/>
                               <!--COBOL declaration : 25 PO-ITEM-PRICE PIC 9(5)V9(2)-->
                                         <xsd:element name="PO-ITEM-PRICE"
                                          type="xsd:decimal"
                                          nxsd:style="virtualDecimal"
                                 extn:assumeDecimal="5" extn:picSize="7"/>
                                             </xsd:sequence>
                                          </xsd:complexType>
                                       </xsd:element>
                                    </xsd:sequence>
                                 </xsd:complexType>
                              </xsd:element>
                           </xsd:sequence>
                        </xsd:complexType>
                     </xsd:element>
                     <!--COBOL declaration : 10 PO-TOTAL PIC 9(7)V9(2)-->
                     <xsd:element name="PO-TOTAL" 
                       type="xsd:decimal"
                       nxsd:style="virtualDecimal" extn:assumeDecimal="7" extn:picSize="9"/>
                  </xsd:sequence>
               </xsd:complexType>
            </xsd:element>
         </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
</xsd:schema>
「テスト」をクリックします。「NXSDスキーマのテスト」ダイアログが表示されます。
「参照」をクリックし、「ファイル名」フィールドでpo-ebcdic.dataファイルを選択します。図6-69に示すように、「NXSDスキーマのテスト」ダイアログが表示されます。
「XMLの生成」アイコンをクリックします。図6-70に示すように、「NXSDスキーマのテスト」ダイアログの右ペインに「結果XML」が表示されます。
対応するネイティブ・スキーマ・フォーマットを使用したネイティブ・データは、次のXMLに変換されます。
<?xml version = '1.0' encoding = 'UTF-8'?>
<PurchaseOrder xmlns="http://TargetNamespace.com/Read">
   <PO-RECORD>
      <PO-BUYER>
         <PO-UID>6335722</PO-UID>
         <PO-NAME>Company One</PO-NAME>
         <PO-ADDRESS>
            <PO-STREET>First Street</PO-STREET>
            <PO-CITY>San Jose</PO-CITY>
            <PO-ZIP>95129</PO-ZIP>
            <PO-STATE>CA</PO-STATE>
         </PO-ADDRESS>
      </PO-BUYER>
      <PO-ITEM>
         <POITEM>
            <PO-LINE-ITEM>
               <PO-ITEM-ID>1</PO-ITEM-ID>
               <PO-ITEM-NAME>BPEL Process Manager Enterprise
 Edition</PO-ITEM-NAME>
               <PO-ITEM-QUANTITY>2</PO-ITEM-QUANTITY>
               <PO-ITEM-PRICE>40000.0</PO-ITEM-PRICE>
            </PO-LINE-ITEM>
         </POITEM>
         <POITEM>
            <PO-LINE-ITEM>
               <PO-ITEM-ID>2</PO-ITEM-ID>
               <PO-ITEM-NAME>BPEL Process Manager Standard
 Edition</PO-ITEM-NAME>
               <PO-ITEM-QUANTITY>5</PO-ITEM-QUANTITY>
               <PO-ITEM-PRICE>50000.0</PO-ITEM-PRICE>
            </PO-LINE-ITEM>
         </POITEM>
         <POITEM>
            <PO-LINE-ITEM>
               <PO-ITEM-ID>3</PO-ITEM-ID>
               <PO-ITEM-NAME>BPEL Process Manager Developer
 Edition</PO-ITEM-NAME>
               <PO-ITEM-QUANTITY>20</PO-ITEM-QUANTITY>
               <PO-ITEM-PRICE>20000.0</PO-ITEM-PRICE>
            </PO-LINE-ITEM>
         </POITEM>
      </PO-ITEM>
      <PO-TOTAL>730000.0</PO-TOTAL>
   </PO-RECORD>
</PurchaseOrder>
この場合(01レベル以外の場合)、バインドされていない一連のルート・レベル・アイテムが生成されます。
「OK」をクリックします。「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「終了」ページが表示されます。
「終了」をクリックします。生成されたNXSDを含んだアダプタ構成ウィザードの「メッセージ」ページが表示されます。
単一のルート・レベル、仮想小数点、固定長配列
次のCOBOLコピーブックには、単一のルート・レベル・アイテムPO-RECORDがあります。単一のルート・レベルの場合には、コンバータの動作は同じであるためレベル番号は問題ではありません。このCOBOLコピーブックでは、仮想小数点として宣言されたフィールド(PO-ITEM-PRICE)の例も示しています。
05 PO-RECORD. 
      10 PO-BUYER. 
        15 PO-UID    PIC 9(7). 
        15 PO-NAME   PIC X(15). 
        15 PO-ADDRESS. 
            20 PO-STREET PIC X(15). 
            20 PO-CITY   PIC X(10). 
            20 PO-ZIP    PIC 9(5). 
            20 PO-STATE  PIC X(2). 
      10 PO-ITEM. 
        15 POITEM OCCURS 3 TIMES. 
            20 PO-LINE-ITEM. 
              25 PO-ITEM-ID       PIC 9(3). 
              25 PO-ITEM-NAME     PIC X(40). 
              25 PO-ITEM-QUANTITY PIC 9(2). 
              25 PO-ITEM-PRICE    PIC 9(5)V9(2). 
      10 PO-TOTAL PIC  9(7)V9(2). 
生成されるスキーマは次のようになります。
<?xml version="1.0" encoding="UTF-8" ?> 
<!--Native format was generated from COBOL copybook : D:\work\
jDevProjects\CCB\Copybooks\po-ccb.cpy--> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" 
       xmlns:extn="http://xmlns.oracle.com/pcbpel/nxsd/extensions" 
       targetNamespace="http://TargetNamespace.com/ccb/singleRoot" 
       xmlns:tns="http://TargetNamespace.com/ccb/singleRoot" 
       elementFormDefault="qualified" attributeFormDefault="unqualified" 
       nxsd:version="NXSD" nxsd:encoding="cp037" nxsd:byteOrder="bigEndian" 
       nxsd:stream="chars"> 
 <xsd:element name="Root-Element"> 
  <xsd:complexType> 
   <xsd:sequence> 
    <!--COBOL declaration : 05 PO-RECORD --> 
    <xsd:element name="PO-RECORD" minOccurs="1" maxOccurs="unbounded"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <!--COBOL declaration : 10 PO-BUYER--> 
       <xsd:element name="PO-BUYER"> 
        <xsd:complexType> 
         <xsd:sequence> 
          <!--COBOL declaration : 15 PO-UID PIC 9(7)--> 
          <xsd:element name="PO-UID" type="xsd:long" 
                  nxsd:style="fixedLength" nxsd:padStyle="head" 
                  nxsd:paddedBy="0" nxsd:length="7"/> 
          <!--COBOL declaration : 15 PO-NAME PIC X(15)--> 
          <xsd:element name="PO-NAME" type="xsd:string" 
                  nxsd:style="fixedLength" nxsd:padStyle="tail" 
                  nxsd:paddedBy=" " nxsd:length="15"/> 
          <!--COBOL declaration : 15 PO-ADDRESS--> 
          <xsd:element name="PO-ADDRESS"> 
                  <xsd:complexType> 
                  <xsd:sequence> 
          <!--COBOL declaration : 20 PO-STREET PIC X(15)--> 
          <xsd:element name="PO-STREET" type="xsd:string" 
                  nxsd:style="fixedLength" 
                  nxsd:padStyle="tail" nxsd:paddedBy=" " 
                  nxsd:length="15"/> 
          <!--COBOL declaration : 20 PO-CITY PIC X(10)--> 
          <xsd:element name="PO-CITY" type="xsd:string" 
                  nxsd:style="fixedLength" 
                  nxsd:padStyle="tail" nxsd:paddedBy=" " 
                  nxsd:length="10"/> 
          <!--COBOL declaration : 20 PO-ZIP PIC 9(5)--> 
          <xsd:element name="PO-ZIP" type="xsd:long" 
                  nxsd:style="fixedLength" 
                  nxsd:padStyle="head" nxsd:paddedBy="0" 
                  nxsd:length="5"/> 
          <!--COBOL declaration : 20 PO-STATE PIC X(2)--> 
          <xsd:element name="PO-STATE" type="xsd:string" 
                  nxsd:style="fixedLength" 
                  nxsd:padStyle="tail" nxsd:paddedBy=" " 
                  nxsd:length="2"/> 
         </xsd:sequence> 
        </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
    <!--COBOL declaration : 10 PO-ITEM--> 
    <xsd:element name="PO-ITEM"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <!--COBOL declaration : 15 POITEM OCCURS 3 TIMES--> 
       <xsd:element name="POITEM" minOccurs="3" maxOccurs="3"> 
        <xsd:complexType> 
         <xsd:sequence> 
          <!--COBOL declaration : 20 PO-LINE-ITEM--> 
          <xsd:element name="PO-LINE-ITEM"> 
           <xsd:complexType> 
            <xsd:sequence> 
             <!--COBOL declaration : 25 PO-ITEM-ID PIC 9(3)--> 
             <xsd:element name="PO-ITEM-ID" type="xsd:long" 
                     nxsd:style="fixedLength" 
                     nxsd:padStyle="head" 
                     nxsd:paddedBy="0" nxsd:length="3"/> 
             <!--COBOL declaration : 25 PO-ITEM-NAME PIC X(40)--> 
             <xsd:element name="PO-ITEM-NAME" 
                     type="xsd:string" 
                     nxsd:style="fixedLength" 
                     nxsd:padStyle="tail" 
                     nxsd:paddedBy=" " nxsd:length="40"/> 
             <!--COBOL declaration : 25 PO-ITEM-QUANTITY PIC 9(2)--> 
             <xsd:element name="PO-ITEM-QUANTITY" 
                     type="xsd:long" 
                     nxsd:style="fixedLength" 
                     nxsd:padStyle="head" 
                     nxsd:paddedBy="0" nxsd:length="2"/> 
             <!--COBOL declaration : 25 PO-ITEM-PRICE PIC 9(5)V9(2)--> 
             <xsd:element name="PO-ITEM-PRICE" 
                     type="xsd:decimal" 
                     nxsd:style="virtualDecimal" 
                     extn:assumeDecimal="5" 
                     extn:picSize="7"/> 
            </xsd:sequence> 
           </xsd:complexType> 
          </xsd:element> 
         </xsd:sequence> 
        </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 
     </xsd:complexType> 
       </xsd:element> 
       <!--COBOL declaration : 10 PO-TOTAL PIC 9(7)V9(2)--> 
       <xsd:element name="PO-TOTAL" type="xsd:decimal" 
               nxsd:style="virtualDecimal" extn:assumeDecimal="7" 
               extn:picSize=" "/> 
      </xsd:sequence>
     </xsd:complexType>
    </xsd:element> 
   </xsd:sequence> 
  </xsd:complexType> 
 </xsd:element> 
</xsd:schema> 
可変長配列
05 EMP-RECORD . 
   10 EMP-NAME         PIC X(30). 
   10 EMP-DIV-NUM      PIC 9(5). 
   10 DIV-ENTRY OCCURS 1 TO 50 TIMES 
      DEPENDING ON EMP-DIV-NUM. 
      20 DIV-CODE             PIC X(30). 
<?xml version="1.0" encoding="UTF-8" ?> 
<!--Native format was generated from COBOL copybook : D:\work\
jDevProjects\CCB\Copybooks\odo.cpy--> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" 
       xmlns:extn="http://xmlns.oracle.com/pcbpel/nxsd/extensions" 
       targetNamespace="http://TargetNamespace.com/ccb/varLengthArray" 
       xmlns:tns="http://TargetNamespace.com/ccb/varLengthArray" 
       elementFormDefault="qualified" attributeFormDefault="unqualified" 
       nxsd:version="NXSD" nxsd:encoding="cp037" nxsd:byteOrder="bigEndian" 
       nxsd:stream="chars"> 
 <xsd:element name="Root-Element"> 
  <xsd:complexType> 
   <xsd:sequence> 
    <!--COBOL declaration :05 EMP-RECORD --> 
    <xsd:element name="EMP-RECORD" minOccurs="1" maxOccurs="unbounded"> 
     <xsd:annotation> 
      <xsd:appinfo> 
       <nxsd:variables> 
        <nxsd:variable name="DIV-ENTRY_var0"/> 
       </nxsd:variables> 
      </xsd:appinfo> 
      </xsd:annotation> 
      <xsd:complexType> 
       <xsd:sequence> 
        <!--COBOL declaration : 10 EMP-NAME PIC X(30)--> 
        <xsd:element name="EMP-NAME" type="xsd:string" 
                nxsd:style="fixedLength" nxsd:padStyle="tail" 
                nxsd:paddedBy=" " nxsd:length="30"/> 
        <!--COBOL declaration : 10 EMP-DIV-NUM PIC 9(5)--> 
        <xsd:element name="EMP-DIV-NUM" type="xsd:long" 
                nxsd:style="fixedLength" nxsd:padStyle="head" 
                nxsd:paddedBy="0" nxsd:length="5"> 
         <xsd:annotation> 
          <xsd:appinfo> 
           <nxsd:variables> 
            <nxsd:assign name="DIV-ENTRY_var0" value="${0}"/> 
           </nxsd:variables> 
          </xsd:appinfo> 
         </xsd:annotation> 
        </xsd:element> 
       <!--COBOL declaration : 10 DIV-ENTRY OCCURS 1 TO 50 TIMES DEPENDING ON 
          EMP-DIV-NUM--> 
        <xsd:element name="DIV-ENTRY" nxsd:style="array" 
                nxsd:arrayLength="${DIV-ENTRY_var0}" minOccurs="1" 
                maxOccurs="50"> 
         <xsd:complexType> 
          <xsd:sequence> 
           <!--COBOL declaration : 20 DIV-CODE PIC X(30)--> 
           <xsd:element name="DIV-CODE" type="xsd:string" 
                   nxsd:style="fixedLength" nxsd:padStyle="tail" 
                   nxsd:paddedBy=" " nxsd:length="30"/> 
          </xsd:sequence> 
         </xsd:complexType> 
        </xsd:element> 
       </xsd:sequence> 
      </xsd:complexType> 
     </xsd:element> 
    </xsd:sequence> 
   </xsd:complexType> 
  </xsd:element> 
</xsd:schema> 
数値のタイプ
01   NUMERIC-FORMATS. 
     05    Salary         PIC 9(5) COMP-3. 
     05    Rating         PICTURE S9(5).  
     05    Age            PIC 9(3) USAGE COMP. 
     05    Revenue        PIC 9(3)V9(2). 
     05    Growth         PIC S9(3) SIGN IS LEADING. 
     05    Computation    COMP-1. 
<?xml version="1.0" encoding="UTF-8" ?> 
<!--Native format was generated from COBOL copybook : 
D:\work\jDevProjects\CCB\Copybooks\numeric.cpy--> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" 
       xmlns:extn="http://xmlns.oracle.com/pcbpel/nxsd/extensions" 
       targetNamespace="http://TargetNamespace.com/ccb/numeric" 
       xmlns:tns="http://TargetNamespace.com/ccb/numeric" 
       elementFormDefault="qualified" attributeFormDefault="unqualified" 
       nxsd:version="NXSD" nxsd:encoding="cp037" nxsd:byteOrder="bigEndian" 
       nxsd:stream="bytes"> 
  <xsd:element name="Numerics"> 
   <xsd:complexType> 
    <xsd:sequence> 
      <!--COBOL declaration :01 NUMERIC-FORMATS--> 
       <xsd:element name="NUMERIC-FORMATS" minOccurs="1" maxOccurs="unbounded"> 
        <xsd:complexType> 
         <xsd:sequence> 
          <!--COBOL declaration : 05 Salary PIC 9(5) COMP-3--> 
          <xsd:element name="Salary" type="xsd:long" nxsd:style="comp3" 
                  extn:sign="unticked" extn:picSize="5"/> 
          <!--COBOL declaration : 05 Rating PICTURE S9(5)--> 
          <xsd:element name="Rating" type="xsd:string" 
                  nxsd:style="signZoned" extn:sign="ticked" 
                  extn:picSize="5" extn:signPosn="tailUpperNibble"/> 
          <!--COBOL declaration : 05 Age PIC 9(3) USAGE COMP--> 
          <xsd:element name="Age" type="xsd:long" nxsd:style="comp" 
                  extn:picSize="3" extn:sign="unticked"/> 
          <!--COBOL declaration : 05 Revenue PIC 9(3)V9(2)--> 
          <xsd:element name="Revenue" type="xsd:decimal" 
                  nxsd:style="virtualDecimal" extn:assumeDecimal="3" 
                  extn:picSize="5"/> 
          <!--COBOL declaration : 05 Growth PIC S9(3) SIGN IS LEADING--> 
          <xsd:element name="Growth" type="xsd:string" 
                  nxsd:style="signZoned" extn:sign="ticked" 
                  extn:picSize="3" extn:signPosn="headUpperNibble"/> 
          <!--COBOL declaration : 05 Computation COMP-1--> 
          <xsd:element name="Computation" type="xsd:float" 
                  nxsd:style="comp1" extn:sign="ticked"/> 
         </xsd:sequence> 
        </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 
    </xsd:complexType> 
  </xsd:element> 
</xsd:schema> 
この場合、すべての数値のタイプはIBM COBOLフォーマットに応じて指定されたフォーマットに従います。異なるレイアウトを使用して異なるシステムで作成されたデータ・ファイルの場合は、生成されたスキーマを変更する必要があります。