ヘッダーをスキップ
Oracle Application Server Adapters for Files, FTP, DatabasesおよびEnterprise Messagingユーザーズ・ガイド
10g (10.1.3.1.0)
B31889-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

7 ネイティブ・フォーマット・ビルダー・ウィザード

この章では、トランスレーションに使用されるネイティブ・スキーマを作成できる、ネイティブ・フォーマット・ビルダー・ウィザードを説明します。スキーマの使用例やコンストラクトも用意されています。

この章には、次の項目が含まれます。

7.1 ネイティブ・フォーマット・ビルダー・ウィザードを使用したネイティブ・スキーマ・ファイルの作成

Oracle BPEL Process ManagerおよびOracle Enterprise Service Busには、XMLスキーマに基づいた、トランスレーション用のネイティブ・スキーマが必要です。ただし、一般的に使用されるフォーマットのすべてでXMLスキーマ・ファイルが使用されるわけではありません。 この状況に対応するために、Oracle BPEL Process ManagerおよびOracle Enterprise Service Busではネイティブ・フォーマット・ビルダー・ウィザードを提供しています。 図7-1に示す「アダプタ構成ウィザード」の「メッセージ」ダイアログ・ボックスで「ネイティブ・フォーマットのスキーマの定義」ボタンをクリックすると、ネイティブ・フォーマット・ビルダー・ウィザードが表示されます。 「メッセージ」ウィンドウは、「アダプタ構成ウィザード」で「終了」ウィンドウの前に表示される最後のウィンドウです。

図7-1 ネイティブ・フォーマット・ビルダー・ウィザードの起動

図7-1の説明が続きます
「図7-1 ネイティブ・フォーマット・ビルダー・ウィザードの起動」の説明

7.1.1 サポートされているフォーマット

ネイティブ・フォーマット・ビルダー・ウィザードでは、図7-2に示されているフォーマットからのネイティブ・スキーマ・ファイルの作成を支援します。選択されたタイプのサンプル・データのファイル形式はすでに存在している必要があり、ファイル形式なしでネイティブ・スキーマを作成することはできません。 また、Document Type Definition(DTD)またはCOBOLコピーブックから生成されたものを除き、このウィザードを使用して以前作成された既存のネイティブ・スキーマの変更を選択することもできます。

図7-2 ネイティブ・フォーマット・ビルダー・ウィザード

図7-2の説明が続きます
「図7-2 ネイティブ・フォーマット・ビルダー・ウィザード」の説明

7.1.1.1 デリミタ

このオプションを選択すると、フィールドがカンマや番号記号(#)などの値で区切られているレコードのネイティブ・スキーマを作成できます。

7.1.1.2 固定長(位置固定)

このオプションを選択すると、フィールドがすべて固定長であるレコードのネイティブ・スキーマを作成できます。

7.1.1.3 DTD

このオプションを選択すると、ユーザーが指定したDTDからネイティブ・スキーマを生成できます。

7.1.1.4 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つの子グループ・アイテム(BuyerSeller)を持つグループ・アイテムです。010504などの数値は、グループのレベル(そのグループ内のデータの階層)を示します。グループは、階層の同じレベルに異なるレベル番号を持つように定義することもできます。たとえば、BuyerおよびSellerには異なるレベル番号がありますが、階層内では同じレベルです。グループ・アイテムには、そのグループのレベル番号以下のレベル番号が発生するまで続く、すべてのグループと基本アイテムが含まれます。

各グループ・アイテム(BuyerおよびSeller)には子の基本アイテムがあります。PICまたはPICTURE句でデータ・レイアウトが定義されています。たとえば、BuyerNameではサイズが5文字の英数字が定義されています。SellerNameのデータ・レイアウトはBuyerNameとまったく同じです。

COBOLのグループ・アイテムは、complexType型を使用してXMLスキーマの要素にマッピングできます。同じように、基本アイテムは、実行時トランスレータによる対応するデータ・ファイルの解析に役立つ、特定のネイティブ・フォーマットの注釈を使用した単純型の要素にマッピングできます。たとえば、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に設定されます。

COBOL句

表7-1に、COBOL句を説明します。 表7-1に出現する数値タイプは、1桁ごとに1文字として保存されます。句のサポートは次のように定義されています。

  • Yは、句がサポートされていることを意味します。

  • Nは、句がサポートされていないことを意味します。

  • Iは、句が無視されることを意味します。

表7-1 COBOL句(数値タイプを1桁ごとに1文字として保存)

COBOL句 設計時のサポート 実行時のサポート サポートされているシノニム コメント

PIC X(n)

Y

Y

XXX…

英数字: コンピュータのキャラクタ・セットで許可されている文字。 Xはそれぞれ1バイトに対応します。

PIC A(n)

Y

Y

AA…

アルファベット: アルファベットまたは空白の任意の文字。 Aはそれぞれ1バイトに対応します。

PIC 9(n) DISPLAY

Y

Y

9999…

数字を含む任意の文字位置。 9はそれぞれアイテムのサイズに含められます。

OCCURS n TIMES

Y

Y


固定長配列。

JUSTIFIED

Y

Y


AおよびXタイプの場合。 空白で右寄せします。データは右端の文字位置に揃えられます。

REDEFINES

Y

Y


同じコンピュータのメモリー領域を異なるデータ・アイテムで表すことができます。

PIC 9(m)V9(n) DISPLAY

Y

Y


サイズは、n+mバイトです。

OCCURS DEPENDING ON

Y

Y


該当なし

BLANK WHEN ZERO

I

I


無視されます。

RENAMES

N

N


COBOLコピーブックではあまり使用されません。

INDEX

N

N


4バイトの索引です。

SYNCHRONIZED

I

I

SYNC

該当なし

POINTER

N

N


該当なし

PROCEDURE-POINTER




該当なし

FILLER

Y

Y


該当なし


表7-1に出現する数値タイプは、1桁ごとに1文字として保存されます。 表7-2に、より効率的に保存される数値タイプを説明します。

表7-2 COBOL句(より効率的に保存される数値タイプ)

COBOL句 設計時のサポート 実行時のサポート サポートされているシノニム コメント

USAGE [IS]

Y

Y


これらのキーワードはどちらもオプションです。

PIC 9(n) COMP

Y

Y

COMPUTATIONAL、BINARY、COMP-4

nで長さが変わります。

  • n = 1-42バイト)

  • n = 5-94バイト)

  • n = 10-188バイト)

COMP-1

Y

Y

COMPUTATIONAL-1

4バイトの長さの単精度の浮動小数点数。

COMP-2

Y

Y

COMPUTATIONAL-2

8バイトの長さの倍精度の浮動小数点数。

PIC 9(n) COMP-3

Y

Y

PACKED-DECIMAL、COMPUTATIONAL-3

2つの数字は各バイトに保存されます。最後のその他の半バイトは、値が無署名でも署名用に割り当てられます。

PIC 9(n) COMP-4

Y

Y

COMPUTATIONAL-4

COMPタイプと同じように処理され、カスタマイズ要件にあわせて独自のデータ型を与えられます。

PIC 9(n) COMP-5

N

N


ネイティブ・バイナリ表現の容量。

PIC S9(n) DISPLAY

Y

Y

PIC S99…

デフォルトで、最も右端のニブルに署名します。Sはサイズには含まれません。

PIC S9(n) COMP

Y

Y


COMPと同じです。負の数値は2の補数として表されます。

PIC S9(n) COMP-3

Y

Y


該当なし

PIC 9(m)V9(n) COMP

Y

Y


長さはCOMPと同じです。

PIC 9(m)V9(m) COMP-3

Y

Y


長さは、Ceiling ((n+m+1)/2)です。


次の句を追加して署名の位置を変更できます。

  • SIGN IS LEADING

    署名されたゾーンの数値とともに使用します。

  • SIGN IS TRAILING

    署名されたゾーンの数値とともに使用します。

  • SIGN IS LEADING SEPARATE

    文字Sがサイズに含まれます。

  • SIGN IS TRAILING SEPARATE

    文字Sがサイズに含まれます。


注意:

数値がIBM COBOLフォーマットで保存されることを前提としています。 異なるデータ保存フォーマットのその他のプラットフォーム用に生成されている場合は、そのタイプのカスタム・データ・ハンドラを記述する必要があります。

表7-3に、ピクチャ編集タイプを説明します。

表7-3 編集済ピクチャ

編集済ピクチャ サポートされている編集タイプ サポートされていない編集タイプ

編集済英数字

単純な挿入: B(空白)0 / ,


編集済浮動数値

特殊な挿入: . (ピリオド)


編集済数値

  • 単純な挿入: B(空白)0 / ,

  • 特殊な挿入: . (ピリオド)

  • 固定挿入: cs + - CR DB(最初または最後に記号を挿入)

  • 浮動挿入: cs + -

  • ゼロの抑止: Z *

  • 置換挿入: Z * + - c


編集済ピクチャは、プレゼンテーション目的でデータ・ファイルではほとんど使用されません。記号の編集もデータで行うことを前提としています。たとえば、次のようなフィールドがあるとします。

05   AMOUNT     PIC 999.99

このフィールドの幅は6バイトで、データに小数点があります。

単純、特殊および固定挿入はこの方法で処理されます。浮動挿入、ゼロ抑止および置換挿入はサポートされていません。

7.1.2 ネイティブ・フォーマット・ビルダー・ウィザードのウィンドウ

デリミタ付きファイルおよび固定長ファイルでは、ダイアログ・ボックスの要求に従って、ネイティブ・スキーマ・フォーマットに定義を作成するための次の情報を入力します。

  • サンプリングするデータ・ファイル(ネイティブ・スキーマの作成元)およびエンコード

  • スキップする行数およびファイルでサンプリングする行数

  • ファイルに複数のレコードが含まれている場合は、レコードのタイプが同じであるかどうか

  • ターゲット・ネームスペース、コンテナ要素名およびレコード名

  • レコード・デリミタ(行末など)と、フィールド・デリミタ(カンマや番号記号(#)など)またはフィールド長

  • フィールド・プロパティ(名前、data_type、デリミタおよび長さなど)

DTDおよびCOBOLコピーブック・ファイルでは、定義があらかじめネイティブ・フォーマットに含まれています。これらのフォーマットの場合、ネイティブ・フォーマット・ビルダー・ウィザードでは、それらの定義にネイティブ・スキーマ・バージョンを作成するための次の情報が要求されます。

  • DTDまたはCOBOLコピーブック定義のファイル名、ネームスペースおよびルート要素

  • キャラクタ・セット、バイト順およびレコード・デリミタ(COBOLコピーブックの場合のみ)

ウィザードのダイアログ・ボックスを進めていくと、作成されるネイティブ・スキーマ・ファイルがウィンドウの下部に表示されます。これにより、作成されるネイティブ・スキーマ・ファイルを参照できます。 図7-3に示すように、最後のウィンドウには、ネイティブ・フォーマットの生成されたネイティブ・スキーマが表示されます。「次へ」をクリックする前に、このフォーマットを編集できます。

図7-3 ネイティブ・フォーマットから生成されたネイティブ・スキーマ

図7-3の説明が続きます
「図7-3 ネイティブ・フォーマットから生成されたネイティブ・スキーマ」の説明

「終了」をクリックすると、図7-1に示す、「アダプタ構成ウィザード」の「メッセージ」ダイアログ・ボックスに戻ります。「スキーマ・ファイルのURL」および「スキーマ要素」フィールドには、新たに作成したネイティブ・スキーマ・ファイルの詳細が入力されています。 これで、「アダプタ構成ウィザード」を使用して、BPELプロセスまたはESBサービスと通信するアダプタのWSDLファイルを作成できます。

7.2 ネイティブ・スキーマについて

この項では使用例を示し、ネイティブ・フォーマット・データをXMLに変換するネイティブ・スキーマの様々なコンストラクトを説明します。

この項には、次の項目が含まれます。


注意:

すべてのネイティブ・スキーマをネイティブ・フォーマット・ビルダー・ウィザードで生成できるわけではありません。このウィザードで対応できるのは、基本的なシナリオのみです。この項では、様々な例と使用例でネイティブ・スキーマの機能を説明します。

7.2.1 ネイティブ・フォーマット・ビルダーの使用例

この項には、次の項目が含まれます。

7.2.1.1 カンマ区切り値ファイルの構造の定義

カンマ区切り値(CSV)ファイルは、一般的なXML以外のファイル構造です。 CSVファイルには、ヘッダーとしての最初の数行がある場合とない場合がありますが、無視します。

変換されるネイティブ・データ・フォーマット

次のようなネイティブ・データ・フォーマットがあります。

Name,Street,City,State,Country
ABC Private Limited, Street 1, Bangalore, Karnataka, India
XYZ Private Limited, Street 2, Bangalore, Karnataka, India

ネイティブ・スキーマ

対応するネイティブ・スキーマの定義は次のように定義できます。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
            targetNamespace="http://www.oracle.com/ias/processconnect"
            xmlns:tns="http://www.oracle.com/ias/processconnect"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified"
            nxsd:encoding="US-ASCII"
            nxsd:headerLines="1"
            nxsd:stream="chars"
            nxsd:version="NXSD">  <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="," >
              </xsd:element>
             <xsd:element name="Street" type="xsd:string" nxsd:style="terminated"
                nxsd:terminatedBy="," >
             </xsd:element>
             <xsd:element name="City" type="xsd:string" nxsd:style="terminated"
                nxsd:terminatedBy="," >
             </xsd:element>
             <xsd:element name="State" type="xsd:string" nxsd:style="terminated"
                nxsd:terminatedBy="," >             </xsd:element>
             <xsd:element name="Country" type="xsd:string" nxsd:style="terminated"
                nxsd:terminatedBy="${eol}" >
             </xsd:element>
           </xsd:sequence>
         </xsd:complexType>
       </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>

xsd:schemaコンストラクトにあるこのスキーマのnxsd:headerLines="1"は、実際に残りのデータを変換する前に、ネイティブ・データを1行スキップすることを意味します。これは1行目がヘッダー行であるためです。 nxsd:stream="chars"のようにnxsd:streamとしてcharsが指定されている場合は、データが文字列として読み取られることを意味します。 nxsd:stream="bytes"のようにnxsd:streamとしてbytesが指定されている場合は、ネイティブ・データがバイトとして読み取られることを意味します。対応するスカラー・データを持つNameStreetCityStateCountryの各要素の宣言では、nxsd:style="terminated"によって対応するデータがterminatedスタイルで保存されていることが定義されています。実際の終了文字は、コンストラクトに指定されているnxsd:terminatedBy=","属性で定義されています。 terminatedスタイルの詳細は、第7.2.2.2項「終了データの定義」を参照してください。

ネイティブ・スキーマを使用して変換したXML

対応するネイティブ・スキーマ・フォーマットを使用したネイティブ・データは、次のXMLに変換されます。

<AddressBook xmlns="http://www.oracle.com/ias/processconnect">
  <Address>
    <Name>ABC Private Limited</Name>
    <Street>Street 1</Street>
    <City>Bangalore</City>
    <State>Karnataka</State>
    <Country>India</Country>
  </Address>
  <Address>
    <Name>XYZ Private Limited</Name>
    <Street>Street 2</Street>
    <City>Bangalore</City>
    <State>Karnataka</State>
    <Country>India</Country>
  </Address>
</AddressBook>

7.2.1.2 *区切り値ファイルの構造の定義

前述の例で定義された使用例は、*SVクラスの一例です。ワイルド・カードは、任意の文字または文字列に置き換えられます。 たとえば、プラス(+)で区切られた値を含むネイティブ・データなどです。

変換されるネイティブ・データ・フォーマット

次のようなネイティブ・データ・フォーマットがあります。

a+b+c+d+e
f+g+h+i+j

ネイティブ・スキーマ

nxsd:terminatedBy=","のかわりにterminated byフォーマットをnxsd:terminatedBy="+"として定義することを除き、対応するネイティブ・スキーマ定義は前の使用例と似ています。 terminatedスタイルの詳細は、第7.2.2.2項「終了データの定義」を参照してください。

7.2.1.3 固定長構造の定義

この例では、使用されるネイティブ・データはCSVの場合と同じです。唯一の違いは、データがCSVではなく固定長であることです。

変換されるネイティブ・データ・フォーマット

次のようなネイティブ・データ・フォーマットがあります。

Name                  Street    City      State     Country
ABC Private Limited   Street1   Bangalore Karnataka India
XYZ Private Limited   Street1   Bangalore Karnataka India

ネイティブ・スキーマ

対応するネイティブ・スキーマ定義はCSVの定義と似ていますが、固定長スタイルの関連する属性とともに、stylenxsd:style="terminated"からnxsd:style="fixedLength"に変わります。 固定長スタイルでは、必須属性はlength: nxsd:lengthです。nxsd:lengthの値は、読み取られる実際のデータの長さです。 変換するネイティブ・データの固定長スタイルの完全な定義は、次のように定義できます。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
            targetNamespace="http://www.oracle.com/ias/processconnect"
            xmlns:tns="http://www.oracle.com/ias/processconnect"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified"
            nxsd:encoding="US-ASCII"
            nxsd:headerLines="1"
            nxsd:stream="chars"
            nxsd:version="NXSD">

  <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="fixedLength"
                nxsd:length="31">
             </xsd:element>
             <xsd:element name="Street" type="xsd:string" nxsd:style="fixedLength"
                nxsd:length="19">
             </xsd:element>
             <xsd:element name="City" type="xsd:string" nxsd:style="fixedLength"
                nxsd:length="10">
             </xsd:element>
             <xsd:element name="State" type="xsd:string" nxsd:style="fixedLength"
               nxsd:length="10">
             </xsd:element>
             <xsd:element name="Country" type="xsd:string" nxsd:style="terminated"
               nxsd:terminatedBy="${eol}">
             </xsd:element>
           </xsd:sequence>
         </xsd:complexType>
       </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>

固定長スタイルの詳細は、第7.2.2.1項「固定長データの定義」を参照してください。

7.2.1.4 より複雑な構造の定義 - 請求書

請求書は、前述のCSV、*SVおよび固定長の使用例の構造よりも複雑な構造です。通常、請求書には購入者の情報、販売者の情報および明細項目が含まれます。

変換されるネイティブ・データ・フォーマット

請求書の次のようなネイティブ・データ・フォーマットがあります。

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

ネイティブ・データの1行目は購入者の詳細で、販売者の詳細、明細項目および明細項目の合計が続きます。 購入者と販売者のどちらも次のように同じ構造です。

  • 最初の7文字はUIDです。

  • これには、^で囲まれた購入者/販売者の名前が続きます。

  • この後には、行末まで住所が続きます。

この住所には、固定長の番地、市区町村などが含まれます。 最後の明細項目は、番号記号#の後に明細項目の合計が続いて終了しています。

ネイティブ・スキーマ

前述のネイティブ・データに対応するネイティブ・スキーマの定義は、次のように定義できます。

<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>

ネイティブ・スキーマを使用して変換した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>

7.2.1.5 ネイティブ・フォーマット・トランスレータを使用したネームスペースのないXMLのネームスペースの削除または追加

ネイティブ・データが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"が指定されていることを確認してください。

actual.xsdのかわりにこのwrapper.xsdを使用すると、インバウンドXMLにmyNamespaceネームスペースが追加され、アウトバウンドXMLからmyNamespaceネームスペースが削除されます。

7.2.1.6 COBOLコピーブック

トランスレーション用のネイティブ・スキーマ・ファイルを作成するために、ファイルおよびFTPアダプタが(ネイティブ・フォーマット・ビルダー・ウィザードを使用して)COBOLコピーブック・フォーマットのファイルをどのように処理するかを示すデモが用意されています。 ネイティブ・フォーマット・ビルダー・ウィザードを使用して、COBOLコピーブック・ファイルをネイティブ・スキーマ・ファイルに変換するデモを参照するには、次の場所へ移動します。

Oracle_Home\integration\orabpel\samples\tutorials\121.FileAdapter\CobolCopyBook

また、次のCOBOLコピーブックの例も提供されています。

複数のルート・レベル

COBOLコピーブックには、複数のルート・レベルを含めることができます。 すべてのルート・レベルが01のレベルの場合、各グループは暗黙的に他のグループを再定義します。

01  PAYROLL-E-RECORD.    05  PAYROLL-E-EMPLOYEE-NUMBER     PIC X(10).    05  PAYROLL-E-TRANS-CODE          PIC X(02).
    05  PAYROLL-E-NAME                PIC X(08).
    05  FILLER                        PIC X(25).
                          01  PAYROLL-F-RECORD.    05  PAYROLL-F-EMPLOYEE-NUMBER     PIC X(10).    05  PAYROLL-F-TRANS-CODE          PIC X(02).    05  PAYROLL-F-IDENTIFIER-VALUE    PIC X(03).    05  PAYROLL-F-NAME                PIC X(30).
                01  PAYROLL-H-RECORD.    05  PAYROLL-H-EMPLOYEE-NUMBER    PIC X(10).    05  PAYROLL-H-TRANS-CODE         PIC X(02).    05  PAYROLL-H-HED-NUMBER         PIC 9(03).    05  FILLER                       PIC X(30).

生成されるスキーマは次のようになります。

<?xml version="1.0" encoding="UTF-8" ?>
<!--Native format was generated from COBOL copybook : D:\work\jDevProjects\CCB\Copybooks\payroll.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/implicitRedefines"
       xmlns:tns="http://TargetNamespace.com/ccb/implicitRedefines"
       elementFormDefault="qualified" attributeFormDefault="unqualified"
       nxsd:version="NXSD" nxsd:encoding="cp037" nxsd:byteOrder="bigEndian"
       nxsd:stream="chars">
 <xsd:element name="Payroll-Records">
  <xsd:complexType>
   <!--Please add values for nxsd:lookAhead attributes for the elements in the
         choice model group.-->
  <xsd:choice minOccurs="1" maxOccurs="unbounded">
   <!--COBOL declaration : 01 PAYROLL-E-RECORD -->
   <xsd:element name="PAYROLL-E-RECORD" nxsd:lookAhead="" nxsd:lookFor="">
    <xsd:complexType>
     <xsd:sequence>
      <!--COBOL declaration : 05 PAYROLL-E-EMPLOYEE-NUMBER PIC X(10)-->
      <xsd:element name="PAYROLL-E-EMPLOYEE-NUMBER" type="xsd:string"
              nxsd:style="fixedLength" nxsd:padStyle="tail"
              nxsd:paddedBy=" " nxsd:length="10"/>
      <!--COBOL declaration : 05 PAYROLL-E-TRANS-CODE PIC X(02)-->
      <xsd:element name="PAYROLL-E-TRANS-CODE" type="xsd:string"
              nxsd:style="fixedLength" nxsd:padStyle="tail"
              nxsd:paddedBy=" " nxsd:length="2"/>
      <!--COBOL declaration : 05 PAYROLL-E-NAME PIC X(08)-->
      <xsd:element name="PAYROLL-E-NAME" type="xsd:string"
              nxsd:style="fixedLength" nxsd:padStyle="tail"
              nxsd:paddedBy=" " nxsd:length="8"/>
      <!--COBOL declaration : 05 FILLER PIC X(25)-->
      <xsd:element name="FILLER" type="xsd:string"
              nxsd:style="fixedLength" nxsd:padStyle="tail"
              nxsd:paddedBy=" " nxsd:length="25"/>
     </xsd:sequence>
    </xsd:complexType>
   </xsd:element>
   <!--COBOL declaration : 01 PAYROLL-F-RECORD -->
   <xsd:element name="PAYROLL-F-RECORD" nxsd:lookAhead="" nxsd:lookFor="">
    <xsd:complexType>
     <xsd:sequence>
      <!--COBOL declaration : 05 PAYROLL-F-EMPLOYEE-NUMBER PIC X(10)-->
      <xsd:element name="PAYROLL-F-EMPLOYEE-NUMBER" type="xsd:string"
              nxsd:style="fixedLength" nxsd:padStyle="tail"
              nxsd:paddedBy=" " nxsd:length="10"/>
      <!--COBOL declaration : 05 PAYROLL-F-TRANS-CODE PIC X(02)-->
      <xsd:element name="PAYROLL-F-TRANS-CODE" type="xsd:string"
              nxsd:style="fixedLength" nxsd:padStyle="tail"
              nxsd:paddedBy=" " nxsd:length="2"/>
      <!--COBOL declaration : 05 PAYROLL-F-IDENTIFIER-VALUE PIC X(03)-->
      <xsd:element name="PAYROLL-F-IDENTIFIER-VALUE" type="xsd:string"
              nxsd:style="fixedLength" nxsd:padStyle="tail"
              nxsd:paddedBy=" " nxsd:length="3"/>
      <!--COBOL declaration : 05 PAYROLL-F-NAME PIC X(30)-->
      <xsd:element name="PAYROLL-F-NAME" type="xsd:string"
              nxsd:style="fixedLength" nxsd:padStyle="tail"
              nxsd:paddedBy=" " nxsd:length="30"/>
     </xsd:sequence>
    </xsd:complexType>
   </xsd:element>
   <!--COBOL declaration : 01 PAYROLL-H-RECORD -->
   <xsd:element name="PAYROLL-H-RECORD" nxsd:lookAhead="" nxsd:lookFor="">
    <xsd:complexType>
     <xsd:sequence>
      <!--COBOL declaration : 05 PAYROLL-H-EMPLOYEE-NUMBER PIC X(10)-->
      <xsd:element name="PAYROLL-H-EMPLOYEE-NUMBER" type="xsd:string"
               nxsd:style="fixedLength" nxsd:padStyle="tail"
               nxsd:paddedBy=" " nxsd:length="10"/>
      <!--COBOL declaration : 05 PAYROLL-H-TRANS-CODE PIC X(02)-->
      <xsd:element name="PAYROLL-H-TRANS-CODE" type="xsd:string"
              nxsd:style="fixedLength" nxsd:padStyle="tail"
              nxsd:paddedBy=" " nxsd:length="2"/>
      <!--COBOL declaration : 05 PAYROLL-H-HED-NUMBER PIC 9(03)-->
      <xsd:element name="PAYROLL-H-HED-NUMBER" type="xsd:long"
              nxsd:style="fixedLength" nxsd:padStyle="head"
              nxsd:paddedBy="0" nxsd:length="3"/>
       <!--COBOL declaration : 05 FILLER PIC X(30)-->
       <xsd:element name="FILLER" type="xsd:string"
               nxsd:style="fixedLength" nxsd:padStyle="tail"
               nxsd:paddedBy=" " nxsd:length="30"/>
      </xsd:sequence>
     </xsd:complexType>
    </xsd:element>
   </xsd:choice>
  </xsd:complexType>
 </xsd:element>
</xsd:schema>

最上位のペイロード・レコードは、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 :
D:\work\jDevProjects\CCB\Copybooks\multipleRoot.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/multipleRoots"
       xmlns:tns="http://TargetNamespace.com/ccb/multipleRoots"
       elementFormDefault="qualified" attributeFormDefault="unqualified"
       nxsd:version="NXSD" nxsd:encoding="ASCII"
       nxsd:byteOrder="littleEndian" nxsd:stream="chars">
 <xsd:element name="emp-info">
  <xsd:complexType>
   <xsd:sequence minOccurs="1" maxOccurs="unbounded">
    <!--COBOL declaration : 05 ORG-NUM PIC 99-->
    <xsd:element name="ORG-NUM" type="xsd:long" nxsd:style="fixedLength"
            nxsd:padStyle="head" nxsd:paddedBy="0" nxsd:length="2"/>
    <!--COBOL declaration : 05 EMP-RECORD-->
    <xsd:element name="EMP-RECORD">
     <xsd:complexType>
      <xsd:sequence>
       <!--COBOL declaration : 10 EMP-SSN PIC 9(4)V(6)-->
       <xsd:element name="EMP-SSN" type="xsd:decimal"
               nxsd:style="virtualDecimal" extn:assumeDecimal="4"
               extn:picSize="9"/>
       <!--COBOL declaration : 10 EMP-WZT PIC 9(6)-->
       <xsd:element name="EMP-WZT" type="xsd:long"
               nxsd:style="fixedLength" nxsd:padStyle="head"
               nxsd:paddedBy="0" nxsd:length="6"/>
      </xsd:sequence>
     </xsd:complexType>
    </xsd:element>
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
</xsd:schema>

この場合(01レベル以外の場合)、バインドされていない一連のルート・レベル・アイテムが生成されます。

単一のルート・レベル、仮想小数点、固定長配列

次の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フォーマットに応じて指定されたフォーマットに従います。 異なるレイアウトを使用して異なるシステムで作成されたデータ・ファイルの場合は、生成されたスキーマを変更する必要があります。

7.2.2 ネイティブ・スキーマ・コンストラクト

この項には、次の項目が含まれます。

7.2.2.1 固定長データの定義

ネイティブ・フォーマットの固定長データは、固定長スタイルを使用してネイティブ・スキーマに定義できます。固定長には次の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>

7.2.2.2 終了データの定義

このフォーマットは、終了マーク自体をデリミタではなく、実際のデータとして処理する場合に使用されます。マークが実際のデータの一部であるかどうかが不明な場合は、念のために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="&quot;"/>
      <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>

7.2.2.3 囲みデータの定義

ネイティブ・データがマークで囲まれている場合に使用されます。

次のような例が用意されています。

  • 左右の囲みマークが異なる場合

  • 左右の囲みマークが同じ場合

変換されるネイティブ・データ・フォーマット: 左右の囲みマークが異なる場合

(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>

7.2.2.4 リストの定義

このフォーマットは、次の特性のあるリストに適用されます。

すべてのアイテムが同じマークで区切られているが最後のアイテムが異なるマークで終了している場合(バインド済)

以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済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>

7.2.2.5 配列の定義

これは、個々のセルが区切り文字で区切られていて、配列の最後のセルが終了文字で終了している複合型の配列用です。

次のような例が用意されています。

すべてのセルが同じマークで区切られているが最後のセルが異なるマークで終了している場合(バインド済)

以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済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>

7.2.2.6 条件付き処理

この項では、条件付き処理に関する次のような例が用意されています。

条件に基づき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>

7.2.2.7 日付の定義

この例では日付の定義方法を示します。

変換されるネイティブ・データ・フォーマット

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>

7.2.2.8 変数の使用

この例では変数の使用方法を示します。

変換されるネイティブ・データ・フォーマット

{,;}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="&quot;" />
      <element name="Address" type="string" nxsd:style="terminated"
          nxsd:terminatedBy="${var1}" nxsd:quotedBy="&quot;"/>
      <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>

7.2.2.9 接頭辞と接尾辞の定義

ネイティブ・フォーマットでは、データが読み取られるときに、次の例に示すように、指定のデータに接頭辞または接尾辞、あるいはその両方が追加されます。

変換されるネイティブ・データ

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="&quot;" />
      <element name="Address" type="string" nxsd:suffixWith="]]"
nxsd:prefixWith="[[" nxsd:style="terminated" nxsd:terminatedBy=","
nxsd:quotedBy="&quot;"/>
      <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>

7.2.2.10 スキップするデータの定義

トランスレータは、次の例に示すように、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="&quot;" />
      <element name="Address" type="string" nxsd:skipMode="before" nxsd:skip="3"
nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="&quot;"/>
      <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>

7.2.2.11 fixedおよびdefault値の定義

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="&quot;" />
      <element name="Age" type="string" fixed="16"  />
      <element name="Address" type="string" nxsd:style="terminated"
nxsd:terminatedBy="," nxsd:quotedBy="&quot;"/>
      <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>

7.2.2.12 writeの定義

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="&quot;" />
      <element name="Address" type="string" nxsd:writeMode="after"
nxsd:write="Over." nxsd:style="terminated" nxsd:terminatedBy=","
nxsd:quotedBy="&quot;"/>
      <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

7.2.2.13 LookAheadの定義

LookAheadの使用方法には、次の2つのタイプがあります。

  • タイプ1: LookAhead X charsは、スタイルを使用して位置から値を読み取り、指定のリテラルと照合します。

  • タイプ2: LookAhead X charsは、スタイルを使用して位置から値を読み取り、その値を後で使用できるように変数に格納します。

LookAhead: タイプ1

ネイティブ・スキーマでは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>

LookAhead: タイプ2

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="&quot;" />
      <element name="Address" type="string" nxsd:style="terminated"
nxsd:terminatedBy="," nxsd:quotedBy="&quot;"/>
      <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>

7.2.2.14 outboundHeaderの定義

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="&quot;" />
      <element name="Address" type="string" nxsd:style="terminated"
nxsd:terminatedBy="," nxsd:quotedBy="&quot;"/>
      <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

7.3 ネイティブ・スキーマ・コンストラクト

表7-4に、<schema>タグにのみ適用可能なコンストラクトを示します。

表7-4 <schema>タグにのみ適用可能なコンストラクト

構文 説明

byteOrder

ネイティブ・データのバイト順。bigEndianまたはlittleEndianです。

encoding

実際のデータが保存されるエンコーディング。java.io.InputStreamReaderでサポートされている任意のエンコーディングです。

headerLines

ネイティブ・データの変換前にスキップする行数を指定する正の整数。

headerLinesTerminatedBy

ネイティブ・データの変換前に指定された文字列までスキップします。

standalone

宣言されている場合、nxsd:standaloneで指定された実際の値とともに、変換されたXMLのXML宣言のプロローグにスタンドアロン属性を追加します。許可された値はtrueおよびfalseです。

stream

データが文字とバイトのどちらで保存されるかを示します。許可された値はCHARSおよびBYTESです。

uniqueMessageSeparator

メッセージが大量にある場合に、ネイティブ・データの一意のメッセージ・セパレータを指定する文字列。

version

ネイティブ・データのタイプ。可能な値はNXSDDTDXSDおよびOPAQUEです。

xmlversion

宣言されている場合、nxsd:xmlversionで指定された実際の値とともに、変換されたXMLにXML宣言のプロローグを追加します。許可された値は1.0および1.1です。


表7-5に、<schema>タグ以外のすべてのタグに適用可能なコンストラクトを示します。

表7-5 <schema>タグ以外のすべてのタグに適用可能なコンストラクト

構文 説明

arrayIdentifierLength

指定された長さを占有しているネイティブ・データに保存される配列の長さ。

arrayLength

このコンストラクトの値は、配列の長さとして使用されます。また、有効な数値に解決される変数の場合もあります。この値は、それが指定されているパーティクルのminOccursおよびmaxOccurs属性を上書きします。この機能は次のように使用します。

nxsd:style="array" nxsd:arrayLength="10"

これは、配列の長さが10であることを意味します。

arrayTerminatedBy

指定された文字列で終了する配列の最後のアイテム。

assign

すでに宣言された変数に値を割り当てます。

cellSeparatedBy

指定された文字列で区切られるネイティブ・データの配列のセル。

choiceCondition

fixedLengthまたはterminatedです。

conditionValue

choiceConditionのネイティブ・ストリームから読み取られる文字列を、conditionValueの指定された文字列に対して一致させます。

dateFormat

ネイティブ・データの日付を表すJava日付フォーマット。

identifierLength

実際のデータの長さが保存されている文字数およびバイト数。

itemSeparatedBy

指定された文字列で区切られているリストのアイテム。

leftSurroundedBy

rightSurroundedBy

囲まれているネイティブ・データ。

length

読み取られるネイティブ・データの長さ。 固定長スタイルで使用されます。

listTerminatedBy

指定された文字列で終了するリストの最後のアイテム。

lookAhead

入力ストリームの現在の位置よりも先の一致を検索します。 一致が検出されると、このコンストラクトが指定されているノードが処理され、検出されない場合はスキップされます。この機能は次のように使用します。

nxsd:lookAhead="20" nxsd:lookFor="abc"

これは、20文字をスキップし、その位置から文字列abcを検索することを意味します。 検出されるとそのノードが処理され、検出されない場合はスキップされます。

paddedBy

余白に使用される文字列。

padStyle

headtailまたはnone

quotedBy

指定された文字列で囲まれるネイティブ・データ。

skip

指定されたバイト数または文字数をスキップします。

skipLines

指定された行数をスキップします。

skipUntil

指定された文字列までスキップします。

startsWith

ネイティブ・データの指定された文字列を検索します。存在する場合は、それが指定されている要素の処理を続行し、存在しない場合はスキップして次の要素を処理します。

style

入力ストリームからのネイティブ・データの読取りに使用されるスタイル。許可された値はfixedLengthsurroundedterminatedlistおよびarrayです。

surroundedBy

指定された文字列で囲まれるネイティブ・データ。

terminatedBy

指定された文字列で終了するネイティブ・データ。

variable

単一の変数を宣言します。

variables

一連の変数を宣言するか、すでに宣言された変数に有効な値を割り当てます。