この章では、トランスレーションに使用されるネイティブ・スキーマを作成できる、ネイティブ・フォーマット・ビルダー・ウィザードを説明します。スキーマの使用例やコンストラクトも用意されています。
この章では、次の項目について説明します。
各Oracle JCAアダプタは、様々なエンタープライズ情報システム(EIS)とOracle BPEL Process Manager (Oracle BPEL PM)またはOracle Mediator(メディエータ)の統合を可能にするソフトウェア・コンポーネントです。アダプタは、ネイティブ・メッセージをXMLまたは非XMLフォーマットで受け取り、Oracle BPEL PMまたはメディエータにXMLメッセージとしてパブリッシュします。また、XMLメッセージを受け取り、ネイティブEISフォーマットに変換することもできます。このネイティブ・データ・フォーマットとXMLの間の変換は、定義ファイル(非XMLスキーマ定義)を使用して実行され、定義ファイル自体はXMLスキーマ・フォーマットで定義されます。ネイティブ・フォーマット・ビルダー・ウィザードを使用すると、サンプル・ネイティブ・データを使用し、ネイティブXSD (NXSD)構文をネイティブ・データの変換用に作成できます。
図6-1に示すように、アダプタ構成ウィザードの「メッセージ」ページで「ネイティブ・フォーマットのスキーマの定義」ボタンをクリックすると、ネイティブ・フォーマット・ビルダー・ウィザードが表示されます。「メッセージ」ページは、アダプタ構成ウィザードで「終了」ページの前に表示される最後のページです。
ネイティブ・フォーマット・ビルダー・ウィザードでは、図6-2に示されているファイル形式からのネイティブ・スキーマ・ファイルの作成を支援します。ネイティブ・スキーマを作成するには、選択されたタイプのサンプル・データのファイル形式が必要です。また、このウィザードを使用して作成された既存のネイティブ・スキーマ(Document Type Definition (DTD)またはCOBOLコピーブック・ファイル・タイプから生成されたものを除く)を編集することもできます。ネイティブ・スキーマ・ファイルの編集については、第6.1.2項「ネイティブ・スキーマ・ファイルの編集」を参照してください。
このオプションを選択すると、ユーザーが指定したCOBOLコピーブック定義からネイティブ・スキーマを生成できます。
COBOLメインフレーム・アプリケーションでは、通常COBOLコピーブック・ファイルを使用してデータ・レイアウトを定義します。実行時トランスレータが、関連するデータ・ファイルを解析できるように、コンバータがCOBOLコピーブックからネイティブ・スキーマを作成します。
COBOLコピーブックは、グループ・アイテム(構造)のコレクションです。これらのグループ・アイテムには、グループまたは基本アイテムであるその他のアイテムが含まれます。基本アイテムはそれ以上分割できないアイテムです。例:
01 Purchase-Order 05 Buyer 10 BuyerName PIC X(5) USAGE DISPLAY. 04 Seller 08 SellerName PICTURE XXXXX.
Purchase-order
は、2つの子グループ・アイテム(Buyer
、Seller
)を持つグループ・アイテムです。01
、05
、04
などの数値は、グループのレベル(そのグループ内のデータの階層)を示します。
グループは、階層の同じレベルに異なるレベル番号を持つように定義することもできます。たとえば、Buyer
およびSeller
には異なるレベル番号がありますが、階層内では同じレベルです。グループ・アイテムには、そのグループのレベル番号以下のレベル番号が発生するまで続く、すべてのグループと基本アイテムが含まれます。
各グループ・アイテム(Buyer
およびSeller
)には子の基本アイテムがあります。PIC
またはPICTURE
句でデータ・レイアウトが定義されています。たとえば、BuyerName
ではサイズが5文字の英数字が定義されています。SellerName
のデータ・レイアウトはBuyerName
と同じです。
COBOLのグループ・アイテムは、XMLスキーマのcomplexType
タイプの要素にマップできます。同様に、基本アイテムは、実行時トランスレータが対応するデータ・ファイルを解析するのに役立つ特定のネイティブ・フォーマットの注釈が付けられた単純型
タイプの要素にマップできます。たとえば、Buyer
アイテムは次の定義にマップできます。
<!--COBOL declaration : 05 Buyer--> <element name="Buyer"> <complexType> <sequence> <!--COBOL declaration : 10 Name PIC X(5)--> <element name="Name" type="string" nxsd:style="fixedLength" nxsd:padStyle="tail" nxsd:paddedBy=" " nxsd:length="5"/> </sequence> </complexType> </element>
ユーザー入力
生成されるネイティブ・スキーマのターゲット・ネームスペース。
データ・ファイルが生成されたホスト・コンピュータのキャラクタ・セット。デフォルトではEBCDICに設定されます(ebcdic-cp-us
)。
データ・ファイルが生成されたホスト・コンピュータのバイト順。デフォルトではビッグ・エンディアンに設定されます。
レコード・デリミタ(通常は改行文字)、デリミタなし、またはユーザー指定の文字列。
生成されたネイティブ・スキーマのコンテナ・タグの名前。デフォルトではRoot-Element
に設定されます。
表6-1に、COBOL句を示します。表6-1に出現する数値タイプは、1桁ごとに1文字として保存されます。句のサポートは次のように定義されています。
Y
は、句がサポートされていることを意味します。
N
は、句がサポートされていないことを意味します。
I
は、句が無視されることを意味します。
表6-1 COBOL句(数値タイプを1桁ごとに1文字として保存)
COBOL句 | 設計時のサポート | 実行時のサポート | サポートされているシノニム | コメント |
---|---|---|---|---|
|
|
|
|
英数字 - コンピュータのキャラクタ・セットで許可されている文字。Xはそれぞれ1バイトに対応します。 |
|
|
|
|
アルファベット - アルファベットまたは空白の任意の文字。Aはそれぞれ1バイトに対応します。 |
|
|
|
|
数字を含む任意の文字位置。9はそれぞれアイテムのサイズに含められます。 |
|
|
|
固定長配列。 |
|
|
|
|
|
|
|
|
|
同じコンピュータのメモリー領域を異なるデータ・アイテムで表すことができます。 |
|
|
|
|
サイズは、 |
|
|
|
|
該当なし |
|
|
|
|
無視されます。 |
|
|
N |
N |
COBOLコピーブックではあまり使用されません。 |
|
|
N |
N |
4バイトの索引です。 |
|
|
|
I |
|
該当なし |
|
|
|
該当なし |
|
|
該当なし |
|||
|
|
|
該当なし |
表6-1に出現する数値タイプは、1桁ごとに1文字として保存されます。表6-2に、より効率的に保存される数値タイプを示します。
表6-2 COBOL句(より効率的に保存される数値タイプ)
COBOL句 | 設計時のサポート | 実行時のサポート | サポートされているシノニム | コメント |
---|---|---|---|---|
|
Y |
Y |
これらのキーワードはどちらもオプションです。 |
|
|
Y |
Y |
|
|
|
Y |
Y |
|
4バイトの長さの単精度の浮動小数点数。 |
|
|
|
|
8バイトの長さの倍精度の浮動小数点数。 |
|
|
|
|
2つの数字は各バイトに保存されます。最後のその他の半バイトは、値が無署名でも署名用に割り当てられます。 |
|
|
|
|
|
|
|
|
ネイティブ・バイナリ表現の容量。 |
|
|
|
|
|
デフォルトで、最も右端のニブルに署名します。 |
|
|
|
|
|
|
|
|
該当なし |
|
|
|
|
長さは |
|
|
|
|
長さは、 |
SIGN IS LEADING
署名されたゾーンの数値とともに使用します。
SIGN IS TRAILING
署名されたゾーンの数値とともに使用します。
SIGN IS LEADING SEPARATE
文字S
がサイズに含まれます。
SIGN IS TRAILING SEPARATE
文字S
がサイズに含まれます。
注意: 数値がIBM COBOLフォーマットで保存されることを前提としています。異なるデータ保存フォーマットのその他のプラットフォーム用に生成されている場合は、そのタイプのカスタム・データ・ハンドラを記述する必要があります。 |
表6-3に、ピクチャ編集タイプを示します。
表6-3 編集済ピクチャ
編集済ピクチャ | サポートされている編集タイプ | サポートされていない編集タイプ |
---|---|---|
編集済英数字 |
単純な挿入: B(空白) |
|
編集済浮動数値 |
特殊な挿入: |
|
編集済数値 |
|
|
編集済ピクチャは、プレゼンテーション目的でデータ・ファイルではほとんど使用されません。記号の編集もデータで行うことを前提としています。たとえば、次のようなフィールドがあるとします。
05 AMOUNT PIC 999.99
このフィールドの幅は6バイトで、データに小数点があります。
単純、特殊および固定挿入はこの方法で処理されます。浮動挿入、ゼロ抑止および置換挿入はサポートされていません。
デリミタ付き、固定長または複合タイプのファイルをサンプリングすることで、ネイティブ・フォーマット・ビルダー・ウィザードを使用して生成された既存のネイティブ・スキーマを編集できます。既存のネイティブ・スキーマを編集するには、ネイティブ・フォーマット・ビルダー・ウィザードの「タイプの選択」ページで「既存ファイルの編集」オプションを選択し、「参照」をクリックして既存のスキーマ・ファイルの場所にナビゲートし、編集対象のネイティブ・スキーマ・ファイルを選択します。ネイティブ・フォーマット・ビルダー・ウィザードに表示される指示に従って、ネイティブ・スキーマ・ファイルを編集します。
注意: Document Type Definition (DTD)またはCOBOLコピーブック・ファイル・タイプから生成されたネイティブ・スキーマは編集できません。 |
図6-3に、「ネイティブ・フォーマット・ビルダー - タイプの選択」ページで「既存ファイルの編集」オプションが選択されている様子を示します。
ネイティブ・スキーマ・ファイルを編集する前に、スキーマ内の注釈で指定されているサンプル・ファイルが存在することを確認する必要があります。この注釈は、ネイティブ・スキーマがサンプル・ファイルから初めて生成される際に自動的に追加されます。
たとえば、注釈で指定されたサンプル・ファイルのパスが<!--NXSDWIZ:C:\Temp\Book1Out.csv:-->
の場合に、このファイルが指定のパスに存在しなければ、ウィザードでエラーが表示されます。
この項では、ネイティブ・フォーマット・データをXMLに変換するために使用するネイティブ・スキーマの各種コンストラクトの概要と、これらのネイティブ・スキーマ・コンストラクトの使用方法について説明します。
この項には、次の項目が含まれます。
表6-4に、<schema>
タグにのみ適用可能なコンストラクトを示します。
表6-4 <schema>タグにのみ適用可能なコンストラクト
構文 | 説明 |
---|---|
ネイティブ・データのバイト順。 |
|
実際のデータが格納されるエンコーディング。通常は、相互運用性とUnicodeがサポートされているため、UTF-8をお薦めします。Java実行環境でサポートされている任意のエンコーディングを指定できます。サポートされているエンコーディングの完全な一覧については、 |
|
|
アウトバウンドでネイティブの非xmlデータを強制的に引用符で囲む必要がある場合は、trueに設定します。 |
ネイティブ・データの変換前にスキップする行数を指定する正の整数。 |
|
ネイティブ・データの変換前に指定された文字列までスキップします。 |
|
宣言されている場合、 |
|
データが文字とバイトのどちらで保存されるかを示します。許可された値は |
|
大量のメッセージにおいて、ネイティブ・データの一意のメッセージ・セパレータを指定する文字列。 |
|
ネイティブ・データのタイプ。可能な値は |
|
宣言されている場合、 |
|
アウトバウンド・メッセージに挿入するヘッダー値を指定する文字列。 |
|
ネイティブ・ファイルで処理する行数を指定する整数。 |
|
フィールド |
|
|
|
|
|
|
|
|
|
|
表6-5に、<schema>
タグ以外のすべてのタグに適用可能なコンストラクトを示します。
表6-5 <schema>タグ以外のすべてのタグに適用可能なコンストラクト
構文 | 説明 |
---|---|
指定された長さを占有しているネイティブ・データに保存される配列の長さ。 |
|
このコンストラクトの値は、配列の長さとして使用されます。また、有効な数値に解決される変数の場合もあります。この値は、それが指定されているパーティクルの nxsd:style="array" nxsd:arrayLength="10" これは、配列の長さが |
|
指定された文字列で終了する配列の最後のアイテム。 |
|
宣言されている変数に値を割り当てます。 |
|
指定された文字列で区切られるネイティブ・データの配列のセル。 |
|
|
|
|
|
|
このコンストラクトに指定された値は、データ全体ではなくデータの一部のみを変換するために使用されます。 |
ネイティブ・データの日付を表すJava日付フォーマット。 |
|
実際のデータの長さが保存されている文字数およびバイト数。 |
|
指定された文字列で区切られているリストのアイテム。 |
|
囲まれているネイティブ・データ。 |
|
読み取られるネイティブ・データの長さ。固定長スタイルで使用されます。 |
|
指定された文字列で終了するリストの最後のアイテム。 |
|
入力ストリームの現在の位置よりも先の一致を検索します。一致が検出されると、このコンストラクトが指定されているノードが処理され、検出されない場合はスキップされます。この機能は次のように使用します。 nxsd:lookAhead="20" nxsd:lookFor="abc" これは、 |
|
余白に使用される文字列。 |
|
|
|
指定された文字列で囲まれるネイティブ・データ。 デフォルトでは、指定された文字列は |
|
指定されたバイト数または文字数をスキップします。 |
|
指定された行数をスキップします。 |
|
指定された文字列までスキップします。 |
|
ネイティブ・データの指定された文字列を検索します。存在する場合は、それが指定されている要素の処理を続行し、存在しない場合はスキップして次の要素を処理します。 |
|
入力ストリームからのネイティブ・データの読取りに使用されるスタイル。許可された値は |
|
指定された文字列で囲まれるネイティブ・データ。 |
|
指定された文字列で終了するネイティブ・データ。 |
|
単一の変数を宣言します。 |
|
一連の変数を宣言するか、宣言されている変数に有効な値を割り当てます。 |
この項には、次の項目が含まれます。
ネイティブ・フォーマットの固定長データは、固定長スタイルを使用してネイティブ・スキーマに定義できます。固定長には次の3つのタイプがあります。
余白あり
余白なし
ネイティブ・データから実際の長さも読み取られるタイプ
変換されるネイティブ・データ・フォーマット: 余白あり
実際のデータが指定された長さに満たない場合があります。この場合には、head
またはtail
としてpaddedBy
およびpadStyle
を指定できます。データが読み取られると、余白はそれに従って削除されます。変換対象のサンプルのネイティブ・データを次に示します。
GBP*UK000012550.00
ネイティブ・スキーマ: 余白あり
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://www.oracle.com/ias/processconnect" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="fixedlength"> <complexType> <sequence> <element name="currency_code" nxsd:style="fixedLength" nxsd:length="4" nxsd:padStyle="tail" nxsd:paddedBy="*"> <simpleType> <restriction base="string"> <maxLength value="4" /> </restriction> </simpleType> </element> <element name="country_code" nxsd:style="fixedLength" nxsd:length="2" nxsd:padStyle="none"> <simpleType> <restriction base="string"> <length value="2" /> </restriction> </simpleType> </element> <element name="to_usd_rate" nxsd:style="fixedLength" nxsd:length="12" nxsd:padStyle="head" nxsd:paddedBy="0"> <simpleType> <restriction base="string"> <maxLength value="12" /> </restriction> </simpleType> </element> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML: 余白あり
<fixedlength xmlns="http://www.oracle.com/ias/processconnect"> <currency_code>GBP</currency_code> <country_code>UK</country_code> <to_usd_rate>12550.00</to_usd_rate> </fixedlength>
変換されるネイティブ・データ・フォーマット: 余白なし
ネイティブ・スキーマに固定長データを定義するには、固定長スタイルを使用できます。実際のデータが指定された長さに満たない場合、空白は削除されません。変換対象のサンプルのネイティブ・データを次に示します。
GBP*UK000012550.00
ネイティブ・スキーマ: 余白なし
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://www.oracle.com/ias/processconnect" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="fixedlength"> <complexType> <sequence> <element name="currency_code" nxsd:style="fixedLength" nxsd:length="4"> <simpleType> <restriction base="string"> <maxLength value="4" /> </restriction> </simpleType> </element> <element name="country_code" nxsd:style="fixedLength" nxsd:length="2"> <simpleType> <restriction base="string"> <length value="2" /> </restriction> </simpleType> </element> <element name="to_usd_rate" nxsd:style="fixedLength" nxsd:length="12"> <simpleType> <restriction base="string"> <maxLength value="12" /> </restriction> </simpleType> </element> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML: 余白なし
<fixedlength xmlns="http://www.oracle.com/ias/processconnect"> <currency_code>GBP*</currency_code> <country_code>UK</country_code> <to_usd_rate>000012550.00</to_usd_rate> </fixedlength>
変換されるネイティブ・データ・フォーマット: ネイティブ・データから実際の長さも読み取られる場合
データの長さもネイティブ・ストリームに保存される場合、まず長さの読取り、次に読み取られた長さに応じたデータの読取りにこのスタイルが使用されます。変換対象のサンプルのネイティブ・データを次に示します。
03joe13DUZac.1HKVmIY
ネイティブ・スキーマ: ネイティブ・データから実際の長さも読み取られる場合
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://www.oracle.com/ias/processconnect" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="fixedlength"> <complexType> <sequence> <element name="user" type="string" nxsd:style="fixedLength" nxsd:identifierLength="2" /> <element name="encr_user" type="string" nxsd:style="fixedLength" nxsd:identifierLength="2" /> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML: ネイティブ・データから実際の長さも読み取られる場合
<fixedlength xmlns="http://www.oracle.com/ias/processconnect"> <user>joe</user> <encr_user>DUZac.1HKVmIY</encr_user> </fixedlength>
このフォーマットは、終了マーク自体をデリミタではなく、実際のデータとして処理する場合に使用されます。マークが実際のデータの一部であるかどうかが不明な場合は、念のためにnxsd:quotedBy
を使用できます。nxsd:quotedBy
を指定すると、対応するネイティブ・データが引用符で囲まれる場合と囲まれない場合があります。囲まれている場合、実際のデータは、nxsd:quotedBy
での指定に応じて開始の引用符から終了の引用符まで読み取られます。囲まれていない場合は、terminatedBy
文字が検出されるまで読み取られます。
デフォルトでは、終了マークは"
("
)です。データにこの文字が含まれている場合は、フィールドが引用符で囲まれていない場合にも、このデフォルトをオーバーライドする必要があります。詳細は、「変換されるネイティブ・データ・フォーマット: デフォルトの引用符文字を含むデータ」を参照してください。
以降の各項では、引用符付き(オプション)と引用符なしのシナリオ、およびデフォルトの引用符文字を含むシナリオを示します。
変換されるネイティブ・データ・フォーマット: 引用符付き(オプション)
変換対象のサンプルのネイティブ・データを次に示します。
Fred,"2 Old Street, Old Town,Manchester",20-08-1954,0161-499-1718
ネイティブ・スキーマ: 引用符付き(オプション)
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://www.oracle.com/ias/processconnect" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="terminated"> <complexType> <sequence> <element name="PersonName" type="string" nxsd:style="terminated" nxsd:terminatedBy="," /> <element name="Address" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="""/> <element name="DOB" type="string" nxsd:style="terminated" nxsd:terminatedBy="," /> <element name="Telephone" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> </sequence> </complexType> </element>
ネイティブ・スキーマを使用して変換したXML: 引用符付き(オプション)
<terminated xmlns="http://www.oracle.com/ias/processconnect"> <PersonName>Fred</PersonName> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <Telephone>0161-499-1718</Telephone> </terminated>
変換されるネイティブ・データ・フォーマット: 引用符なし
データが特定の文字列または文字で終了する場合に使用されます。変換対象のサンプルのネイティブ・データを次に示します。
1020,16,18,,1580.00
ネイティブ・スキーマ: 引用符なし
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://www.oracle.com/ias/processconnect" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="terminated"> <complexType> <sequence> <element name="product" type="string" nxsd:style="terminated" nxsd:terminatedBy="," /> <element name="ordered" type="string" nxsd:style="terminated" nxsd:terminatedBy="," /> <element name="inventory" type="string" nxsd:style="terminated" nxsd:terminatedBy="," /> <element name="backlog" type="string" nxsd:style="terminated" nxsd:terminatedBy="," /> <element name="listprice" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML: 引用符なし
<terminated xmlns="http://www.oracle.com/ias/processconnect"> <product>1020</product> <ordered>16</ordered> <inventory>18</inventory> <backlog></backlog> <listprice>1580.00</listprice> </terminated>
変換されるネイティブ・データ・フォーマット: デフォルトの引用符文字を含むデータ
変換対象のサンプルのネイティブ・データを次に示します。
aaa,"bbbbb,[cccc
この場合、フィールドはカンマで終了し、"
文字は2番目のフィールドのデータに含まれ、[
文字は3番目のフィールドのデータに含まれています。
デフォルトのnxsd:quotedBy
終了マークは"
("
)であるため、このフィールドがカンマ文字で終了すると指定しても、Oracleファイル・アダプタはフィールド2の変換に失敗します。このデータを正常に変換するには、デフォルトのnxsd:quotedBy
終了マークを、このフィールドのデータに含まれていない任意の文字にオーバーライドする必要があります。この例では、<
(<
)はフィールド2に含まれることがないため、デフォルトのnxsd:quotedBy
終了マークをこの文字にオーバーライドします。
<element name="FieldTwo" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="<"/>
対照的に、フィールド3については、[
文字はデフォルトのnxsd:quotedBy
終了マークと競合しないため、指定する必要があるのはnxsd:terminatedBy=","
のみとなります。
<element name="FieldThree" type="string" nxsd:style="terminated" nxsd:terminatedBy="," />
ネイティブ・スキーマ: デフォルトの引用符文字を含むデータ
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://www.oracle.com/ias/processconnect" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="terminated"> <complexType> <sequence> <element name="FieldOne" type="string" nxsd:style="terminated" nxsd:terminatedBy="," /> <element name="FieldTwo" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="<"/> <element name="FieldThree" type="string" nxsd:style="terminated" nxsd:terminatedBy="," /> </sequence> </complexType> </element>
ネイティブ・スキーマを使用して変換したXML: デフォルトの引用符文字を含むデータ
<terminated xmlns="http://www.oracle.com/ias/processconnect"> <FieldOne>aaa</FieldOne> <FieldTwo>"bbbbb</FieldTwo> <FieldThree>[cccc</FieldThree> </terminated>
ネイティブ・データがマークで囲まれている場合に使用されます。
囲みデータには次のタイプがあります。
左右の囲みマークが異なる場合
左右の囲みマークが同じ場合
変換されるネイティブ・データ・フォーマット: 左右の囲みマークが異なる場合
左右の囲みマークが異なる場合に変換対象となるサンプルのネイティブ・データを次に示します。
(Ernest Hemingway Museum){Whitehead St.}
ネイティブ・スキーマ: 左右の囲みマークが異なる場合
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" xmlns:tns="http://www.oracle.com/ias/processconnect" targetNamespace="http://www.oracle.com/ias/processconnect" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="limstring"> <complexType> <sequence> <element name="Landmark" type="string" nxsd:style="surrounded" nxsd:leftSurroundedBy="(" nxsd:rightSurroundedBy=")" /> <element name="Street" type="string" nxsd:style="surrounded" nxsd:leftSurroundedBy="{" nxsd:rightSurroundedBy="}" /> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML: 左右の囲みマークが異なる場合
<limstring xmlns="http://www.oracle.com/ias/processconnect"> <Landmark>Ernest Hemingway Museum</Landmark> <Street>Whitehead St.</Street> </limstring>
変換されるネイティブ・データ・フォーマット: 左右の囲みマークが同じ場合
左右の囲みマークが同じ場合に変換対象となるサンプルのネイティブ・データを次に示します。
.FL..Florida Keys.+Key West+
ネイティブ・スキーマ: 左右の囲みマークが同じ場合
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" xmlns:tns="http://www.oracle.com/ias/processconnect" targetNamespace="http://www.oracle.com/ias/processconnect" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="limstring"> <complexType> <sequence> <element name="State" type="string" nxsd:style="surrounded" nxsd:surroundedBy="."/> <element name="Region" type="string" nxsd:style="surrounded" nxsd:surroundedBy="." /> <element name="City" type="string" nxsd:style="surrounded" nxsd:surroundedBy="+" /> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML: 左右の囲みマークが同じ場合
<limstring xmlns="http://www.oracle.com/ias/processconnect"> <State>FL</State> <Region>Florida Keys</Region> <City>Key West</City> </limstring>
このフォーマットは、次の特性のあるリストに適用されます。
すべてのアイテムが同じマークで区切られているが最後のアイテムが異なるマークで終了している場合(バインド済)
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
125,200,255
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" xmlns:tns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="list" type="tns:Colors" /> <complexType name="Colors" nxsd:style="list" nxsd:itemSeparatedBy="," nxsd:listTerminatedBy="${eol}"> <sequence> <element name="Red" type="string" /> <element name="Green" type="string" /> <element name="Blue" type="string" /> </sequence> </complexType> </schema>
ネイティブ・スキーマを使用して変換したXML
<list xmlns="http://www.oracle.com/ias/processconnect"> <Red>125</Red> <Green>200</Green> <Blue>255</Blue> </list>
最後のアイテムを含みすべてのアイテムが同じマークで区切られている場合(バインドなし)
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
configure;startup;runtest;shutdown;
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" xmlns:tns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="list" type="tns:CommandSet" /> <complexType name="CommandSet" nxsd:style="list" nxsd:itemSeparatedBy=";"> <sequence> <element name="Cmd1" type="string" /> <element name="Cmd2" type="string" /> <element name="Cmd3" type="string" /> <element name="Cmd4" type="string" /> </sequence> </complexType> </schema>
ネイティブ・スキーマを使用して変換したXML
<list xmlns="http://www.oracle.com/ias/processconnect"> <Cmd1>configure</Cmd1> <Cmd2>startup</Cmd2> <Cmd3>runtest</Cmd3> <Cmd4>shutdown</Cmd4> </list>
これは、個々のセルが区切り文字で区切られていて、配列の最後のセルが終了文字で終了している複合型の配列用です。
配列タイプの例を次に示します。
すべてのセルが同じマークで区切られているが最後のセルが異なるマークで終了している場合(バインド済)
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
"Smith, John","1 Old Street, Old Town, Manchester",,"0161-499-1717". Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718". "Smith, Bob",,,0161-499-1719.#
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://www.oracle.com/ias/processconnect" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD" > <element name="array"> <complexType> <sequence> <element name="Member" maxOccurs="unbounded" nxsd:style="array" nxsd:cellSeparatedBy="${eol}" nxsd:arrayTerminatedBy="#"> <complexType> <sequence> <element name="Name" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="Address" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="DOB" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="Telephone" type="string" nxsd:style="terminated" nxsd:terminatedBy="." nxsd:quotedBy='"'/> </sequence> </complexType> </element> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML
<array xmlns="http://www.oracle.com/ias/processconnect"> <Member> <Name>Smith, John</Name> <Address>1 Old Street, Old Town, Manchester</Address> <DOB></DOB> <Telephone>0161-499-1717</Telephone> </Member> <Member> <Name>Fred</Name> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <Telephone>0161-499-1718</Telephone> </Member> <Member> <Name>Smith, Bob</Name> <Address></Address> <DOB></DOB> <Telephone>0161-499-1719</Telephone> </Member> </array>
最後のセルを含み、すべてのセルが同じマークで区切られている場合(バインドなし)
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
"Smith, John","1 Old Street, Old Town, Manchester",,"0161-499-1717". Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718". "Smith, Bob",,,0161-499-1719.
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://www.oracle.com/ias/processconnect" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="array"> <complexType> <sequence> <element name="Member" maxOccurs="unbounded" nxsd:style="array" nxsd:cellSeparatedBy="\r\n"> <complexType> <sequence> <element name="Name" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="Address" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="DOB" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="Telephone" type="string" nxsd:style="terminated" nxsd:terminatedBy="." nxsd:quotedBy='"'/> </sequence> </complexType> </element> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML
<array xmlns="http://www.oracle.com/ias/processconnect"> <Member> <Name>Smith, John</Name> <Address>1 Old Street, Old Town, Manchester</Address> <DOB></DOB> <Telephone>0161-499-1717</Telephone> </Member> <Member> <Name>Fred</Name> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <Telephone>0161-499-1718</Telephone> </Member> <Member> <Name>Smith, Bob</Name> <Address></Address> <DOB></DOB> <Telephone>0161-499-1719</Telephone> </Member> </array>
セルはマークで区切られていないが最後のセルがマークで終了している場合(バインド済)
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
"Smith, John","1 Old Street, Old Town, Manchester",,"0161-499-1717" Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718" "Smith, Bob",,,0161-499-1719 #
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://www.oracle.com/ias/processconnect" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="array"> <complexType> <sequence> <element name="Member" maxOccurs="unbounded" nxsd:style="array" nxsd:arrayTerminatedBy="#"> <complexType> <sequence> <element name="Name" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="Address" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="DOB" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="Telephone" type="string" nxsd:style="terminated" nxsd:terminatedBy="\r\n" nxsd:quotedBy='"'/> </sequence> </complexType> </element> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML
<array xmlns="http://www.oracle.com/ias/processconnect"> <Member> <Name>Smith, John</Name> <Address>1 Old Street, Old Town, Manchester</Address> <DOB></DOB> <Telephone>0161-499-1717</Telephone> </Member> <Member> <Name>Fred</Name> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <Telephone>0161-499-1718</Telephone> </Member> <Member> <Name>Smith, Bob</Name> <Address></Address> <DOB></DOB> <Telephone>0161-499-1719</Telephone> </Member> </array>
ネイティブ・データからセルの数が読み取られる場合
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
3"Smith, John","1 Old Street, Old Town, Manchester",,"0161-499-1717" Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718" "Smith, Bob",,,0161-499-1719
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://www.oracle.com/ias/processconnect" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="arrayidentifierlength"> <complexType> <sequence> <element name="Member" maxOccurs="unbounded" nxsd:style="array" nxsd:arrayIdentifierLength="1"> <complexType> <sequence> <element name="Name" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="Address" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="DOB" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="Telephone" type="string" nxsd:style="terminated" nxsd:terminatedBy="\r\n" nxsd:quotedBy='"'/> </sequence> </complexType> </element> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML
<arrayidentifierlength xmlns="http://www.oracle.com/ias/processconnect"> <Member> <Name>Smith, John</Name> <Address>1 Old Street, Old Town, Manchester</Address> <DOB></DOB> <Telephone>0161-499-1717</Telephone> </Member> <Member> <Name>Fred</Name> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <Telephone>0161-499-1718</Telephone> </Member> <Member> <Name>Smith, Bob</Name> <Address></Address> <DOB></DOB> <Telephone>0161-499-1719</Telephone> </Member> </arrayidentifierlength>
明示的な配列長
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
3;John;Steve;Paul;Todd;
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="array"> <annotation> <appinfo> <nxsd:variables> <nxsd:variable name="len" /> </nxsd:variables> </appinfo> </annotation> <complexType> <sequence> <element name="TotalMembers" type="string" nxsd:style="terminated" nxsd:terminatedBy=";"> <annotation> <appinfo> <nxsd:variables> <nxsd:assign name="len" value="${0}" /> </nxsd:variables> </appinfo> </annotation> </element> <element name="Member" type="string" minOccurs="0" maxOccurs="unbounded" nxsd:style="array,terminated" nxsd:arrayLength="${len}" nxsd:terminatedBy=";" /> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML
<array xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <TotalMembers>3</TotalMembers> <Member>John</Member> <Member>Steve</Member> <Member>Paul</Member> </array>
この項では、条件付き処理に関する次のような例が用意されています。
条件に基づきchoiceモデル・グループ内の1つの要素を処理する場合
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
PO28/06/2004^|ABCD Inc.|Oracle OracleApps025070,000.00 Database 021230,000.00 ProcessCon021040,000.00 PO01/07/2004^|EFGH Inc.|Oracle Websphere 025070,000.00 DB2 021230,000.00 Eclipse 021040,000.00 SO29/06/2004|Oracle Apps|5 Navneet Singh PO28/06/2004^|IJKL Inc.|Oracle Weblogic 025070,000.00 Tuxedo 021230,000.00 JRockit 021040,000.00 IN30/06/2004;Navneet Singh;Oracle;Oracle Apps;5;70,000.00;350,000.00
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" xmlns:tns="http://www.oracle.com/ias/processconnect" targetNamespace="http://www.oracle.com/ias/processconnect" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="container"> <complexType> <choice maxOccurs="unbounded" nxsd:choiceCondition="fixedLength" nxsd:length="2"> <element ref="tns:PurchaseOrder" nxsd:conditionValue="PO" /> <element ref="tns:SalesOrder" nxsd:conditionValue="SO" /> <element ref="tns:Invoice" nxsd:conditionValue="IN" /> </choice> </complexType> </element> <!-- PO --> <element name="PurchaseOrder" type="tns:POType"/> <complexType name="POType"> <sequence> <element name="Date" type="string" nxsd:style="terminated" nxsd:terminatedBy="^" /> <element name="Buyer" type="string" nxsd:style="surrounded" nxsd:surroundedBy="|" /> <element name="Supplier" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="Items"> <complexType> <sequence> <element name="Line-Item" minOccurs="3" maxOccurs="3"> <complexType> <group ref="tns:LineItems" /> </complexType> </element> </sequence> </complexType> </element> </sequence> </complexType> <group name="LineItems"> <sequence> <element name="Id" type="string" nxsd:style="fixedLength" nxsd:length="10" nxsd:padStyle="none"/> <element name="Quantity" type="string" nxsd:style="fixedLength" nxsd:identifierLength="2" /> <element name="Price" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> </sequence> </group> <!-- SO --> <element name="SalesOrder" type="tns:SOType" /> <complexType name="SOType"> <sequence> <element name="Date" type="string" nxsd:style="terminated" nxsd:terminatedBy="|" /> <element name="Item" type="string" nxsd:style="terminated" nxsd:terminatedBy="|" /> <element name="Quantity" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="Buyer" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> </sequence> </complexType> <!-- INV --> <element name="Invoice" type="tns:INVType" /> <complexType name="INVType"> <sequence> <element name="Date" type="string" nxsd:style="terminated" nxsd:terminatedBy=";" /> <element name="Purchaser" type="string" nxsd:style="terminated" nxsd:terminatedBy=";" /> <element name="Seller" type="string" nxsd:style="terminated" nxsd:terminatedBy=";" /> <element name="Item" type="string" nxsd:style="terminated" nxsd:terminatedBy=";" /> <element name="Price" type="string" nxsd:style="terminated" nxsd:terminatedBy=";" /> <element name="Quantity" type="string" nxsd:style="terminated" nxsd:terminatedBy=";" /> <element name="TotalPrice" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> </sequence> </complexType> </schema>
ネイティブ・スキーマを使用して変換したXML
<container xmlns="http://www.oracle.com/ias/processconnect"> <PurchaseOrder> <Date>28/06/2004</Date> <Buyer>ABCD Inc.</Buyer> <Supplier>Oracle</Supplier> <Items> <Line-Item> <Id>OracleApps</Id> <Quantity>50</Quantity> <Price>70,000.00</Price> </Line-Item> <Line-Item> <Id>Database </Id> <Quantity>12</Quantity> <Price>30,000.00</Price> </Line-Item> <Line-Item> <Id>ProcessCon</Id> <Quantity>10</Quantity> <Price>40,000.00</Price> </Line-Item> </Items> </PurchaseOrder> <PurchaseOrder> <Date>01/07/2004</Date> <Buyer>EFGH Inc.</Buyer> <Supplier>Oracle</Supplier> <Items> <Line-Item> <Id>Websphere </Id> <Quantity>50</Quantity> <Price>70,000.00</Price> </Line-Item> <Line-Item> <Id>DB2 </Id> <Quantity>12</Quantity> <Price>30,000.00</Price> </Line-Item> <Line-Item> <Id>Eclipse </Id> <Quantity>10</Quantity> <Price>40,000.00</Price> </Line-Item> </Items> </PurchaseOrder> <SalesOrder> <Date>29/06/2004</Date> <Item>Oracle Apps</Item> <Quantity>5</Quantity> <Buyer>Navneet Singh</Buyer> </SalesOrder> <PurchaseOrder> <Date>28/06/2004</Date> <Buyer>IJKL Inc.</Buyer> <Supplier>Oracle</Supplier> <Items> <Line-Item> <Id>Weblogic </Id> <Quantity>50</Quantity> <Price>70,000.00</Price> </Line-Item> <Line-Item> <Id>Tuxedo </Id> <Quantity>12</Quantity> <Price>30,000.00</Price> </Line-Item> <Line-Item> <Id>JRockit </Id> <Quantity>10</Quantity> <Price>40,000.00</Price> </Line-Item> </Items> </PurchaseOrder> <Invoice> <Date>30/06/2004</Date> <Purchaser>Navneet Singh</Purchaser> <Seller>Oracle</Seller> <Item>Oracle Apps</Item> <Price>5</Price> <Quantity>70,000.00</Quantity> <TotalPrice>350,000.00</TotalPrice> </Invoice> </container>
条件に基づきsequenceモデル・グループ内の複数の要素を処理する場合
以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。
変換されるネイティブ・データ・フォーマット:
PO28/06/2004^|ABCD Inc.|Oracle OracleApps025070,000.00 Database 021230,000.00 ProcessCon021040,000.00 PO01/07/2004^|EFGH Inc.|Oracle Websphere 025070,000.00 DB2 021230,000.00 Eclipse 021040,000.00 SO29/06/2004|Oracle Apps|5 Navneet Singh PO28/06/2004^|IJKL Inc.|Oracle Weblogic 025070,000.00 Tuxedo 021230,000.00 JRockit 021040,000.00 IN30/06/2004;Navneet Singh;Oracle;Oracle Apps;5;70,000.00;350,000.00
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" xmlns:tns="http://www.oracle.com/ias/processconnect" targetNamespace="http://www.oracle.com/ias/processconnect" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="container"> <complexType> <sequence maxOccurs="unbounded"> <element ref="tns:PurchaseOrder" minOccurs="0" nxsd:startsWith="PO" /> <element ref="tns:SalesOrder" minOccurs="0" nxsd:startsWith="SO" /> <element ref="tns:Invoice" minOccurs="0" nxsd:startsWith="IN" /> </sequence> </complexType> </element> <!-- PO --> <element name="PurchaseOrder" type="tns:POType"/> <complexType name="POType"> <sequence> <element name="Date" type="string" nxsd:style="terminated" nxsd:terminatedBy="^" /> <element name="Buyer" type="string" nxsd:style="surrounded" nxsd:surroundedBy="|" /> <element name="Supplier" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="Items"> <complexType> <sequence> <element name="Line-Item" minOccurs="3" maxOccurs="3"> <complexType> <group ref="tns:LineItems" /> </complexType> </element> </sequence> </complexType> </element> </sequence> </complexType> <group name="LineItems"> <sequence> <element name="Id" type="string" nxsd:style="fixedLength" nxsd:length="10" nxsd:padStyle="none"/> <element name="Quantity" type="string" nxsd:style="fixedLength" nxsd:identifierLength="2" /> <element name="Price" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> </sequence> </group> <!-- SO --> <element name="SalesOrder" type="tns:SOType" /> <complexType name="SOType"> <sequence> <element name="Date" type="string" nxsd:style="terminated" nxsd:terminatedBy="|" /> <element name="Item" type="string" nxsd:style="terminated" nxsd:terminatedBy="|" /> <element name="Quantity" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="Buyer" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> </sequence> </complexType> <!-- INV --> <element name="Invoice" type="tns:INVType" /> <complexType name="INVType"> <sequence> <element name="Date" type="string" nxsd:style="terminated" nxsd:terminatedBy=";" /> <element name="Purchaser" type="string" nxsd:style="terminated" nxsd:terminatedBy=";" /> <element name="Seller" type="string" nxsd:style="terminated" nxsd:terminatedBy=";" /> <element name="Item" type="string" nxsd:style="terminated" nxsd:terminatedBy=";" /> <element name="Price" type="string" nxsd:style="terminated" nxsd:terminatedBy=";" /> <element name="Quantity" type="string" nxsd:style="terminated" nxsd:terminatedBy=";" /> <element name="TotalPrice" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> </sequence> </complexType> </schema>
ネイティブ・スキーマを使用して変換したXML
<container xmlns="http://www.oracle.com/ias/processconnect"> <PurchaseOrder> <Date>28/06/2004</Date> <Buyer>ABCD Inc.</Buyer> <Supplier>Oracle</Supplier> <Items> <Line-Item> <Id>OracleApps</Id> <Quantity>50</Quantity> <Price>70,000.00</Price> </Line-Item> <Line-Item> <Id>Database </Id> <Quantity>12</Quantity> <Price>30,000.00</Price> </Line-Item> <Line-Item> <Id>ProcessCon</Id> <Quantity>10</Quantity> <Price>40,000.00</Price> </Line-Item> </Items> </PurchaseOrder> <PurchaseOrder> <Date>01/07/2004</Date> <Buyer>EFGH Inc.</Buyer> <Supplier>Oracle</Supplier> <Items> <Line-Item> <Id>Websphere </Id> <Quantity>50</Quantity> <Price>70,000.00</Price> </Line-Item> <Line-Item> <Id>DB2 </Id> <Quantity>12</Quantity> <Price>30,000.00</Price> </Line-Item> <Line-Item> <Id>Eclipse </Id> <Quantity>10</Quantity> <Price>40,000.00</Price> </Line-Item> </Items> </PurchaseOrder> <SalesOrder> <Date>29/06/2004</Date> <Item>Oracle Apps</Item> <Quantity>5</Quantity> <Buyer>Navneet Singh</Buyer> </SalesOrder> <PurchaseOrder> <Date>28/06/2004</Date> <Buyer>IJKL Inc.</Buyer> <Supplier>Oracle</Supplier> <Items> <Line-Item> <Id>Weblogic </Id> <Quantity>50</Quantity> <Price>70,000.00</Price> </Line-Item> <Line-Item> <Id>Tuxedo </Id> <Quantity>12</Quantity> <Price>30,000.00</Price> </Line-Item> <Line-Item> <Id>JRockit </Id> <Quantity>10</Quantity> <Price>40,000.00</Price> </Line-Item> </Items> </PurchaseOrder> <Invoice> <Date>30/06/2004</Date> <Purchaser>Navneet Singh</Purchaser> <Seller>Oracle</Seller> <Item>Oracle Apps</Item> <Price>5</Price> <Quantity>70,000.00</Quantity> <TotalPrice>350,000.00</TotalPrice> </Invoice> </container>
この例では日付の定義方法を示します。
変換されるネイティブ・データ・フォーマット:
11/16/0224/11/02 11-20-2002 23*11*2002 01/02/2003 01:02 01/02/2003 03:04:05
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="dateformat"> <complexType> <sequence> <element name="StartDate" type="dateTime" nxsd:dateFormat="MM/dd/yy" nxsd:style="fixedLength" nxsd:length="8" /> <element name="EndDate" type="dateTime" nxsd:dateFormat="dd/MM/yy" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="Milestone" type="dateTime" nxsd:dateFormat="MM-dd-yyyy" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="DueDate" type="dateTime" nxsd:dateFormat="dd*MM*yyyy" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="Date" type="dateTime" nxsd:dateFormat="MM/dd/yyyy hh:mm" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="Date" type="dateTime" nxsd:dateFormat="MM/dd/yyyy hh:mm:ss" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML
<dateformat xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <StartDate>2002-11-16T00:00:00</StartDate> <EndDate>2002-11-24T00:00:00</EndDate> <Milestone>2002-11-20T00:00:00</Milestone> <DueDate>2002-11-23T00:00:00</DueDate> <Date>2003-01-02T01:02:00</Date> <Date>2003-01-02T03:04:05</Date> </dateformat>
注意: 既存の日付フォーマットにnxsd:dateParsingMode="lax/strict" およびロケール・サポートが追加されています。 |
次の例に、nxsd:dateParsingMode="lax/strict"
およびロケール・サポートの使用方法を示します。
変換されるネイティブ・データ・フォーマット:
11/16/0224/11/02 11-20-2002 23*11*2002 01/02/2003 01:02 01/02/2003 03:04:05 Thu, 26 May 2005 15:50:11 India Standard Time Do, 26 Mai 2005 15:43:10 Indische Normalzeit 20063202
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="dateformat"> <complexType> <sequence> <element name="StartDate" type="date" nxsd:dateFormat="MM/dd/yy" nxsd:localeLanguage="en" nxsd:style="fixedLength" nxsd:length="8" /> <element name="EndDate" type="date" nxsd:dateFormat="dd/MM/yy" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="Milestone" type="dateTime" nxsd:dateFormat="MM-dd-yyyy" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="DueDate" type="dateTime" nxsd:dateFormat="dd*MM*yyyy" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="Date" type="dateTime" nxsd:dateFormat="MM/dd/yyyy hh:mm" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="Date" type="dateTime" nxsd:dateFormat="MM/dd/yyyy hh:mm:ss" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="LongDateInEnglish" type="dateTime" nxsd:dateFormat="EEE, d MMM yyyy HH:mm:ss zzzz" nxsd:localeLanguage="en" nxsd:localeCountry="US" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="LongDateInGerman" type="dateTime" nxsd:dateFormat="EEE, d MMM yyyy HH:mm:ss zzzz" nxsd:localeLanguage="de" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="InvalidDate" type="dateTime" nxsd:dateParsingMode="lax" nxsd:dateFormat="yyyyMMdd" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> </sequence> </complexType> </element> </schema>
変換済のXML
<dateformat xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <StartDate>2002-11-16</StartDate> <EndDate>2002-11-24</EndDate> <Milestone>2002-11-20T00:00:00</Milestone> <DueDate>2002-11-23T00:00:00</DueDate> <Date>2003-01-02T01:02:00</Date> <Date>2003-01-02T03:04:05</Date> <LongDateInEnglish>2005-05-26T15:50:11</LongDateInEnglish> <LongDateInGerman>2005-05-26T15:43:10</LongDateInGerman> <InvalidDate>2008-08-02T00:00:00</InvalidDate> </dateformat>
この例では変数の使用方法を示します。
変換されるネイティブ・データ・フォーマット:
{,;}Fred,"2 Old Street, Old Town,Manchester","20-08-1954";"0161-499-1718" phone-2 phone-3
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="variable"> <annotation> <documentation> 1. var1 - variable declaration 2. var2 - variable declaration with default value 3. EOL - variable declaration with referencing a system variable </documentation> <appinfo> <junkies/> <nxsd:variables> <nxsd:variable name="var1" /> <nxsd:variable name="var2" value="," /> <nxsd:variable name="SystemEOL" value="${system.line.separator}" /> </nxsd:variables> <junkies/> <junkies/> <junkies/> </appinfo> </annotation> <complexType> <sequence> <element name="delims" type="string" nxsd:style="surrounded" nxsd:leftSurroundedBy="{" nxsd:rightSurroundedBy="}" > <annotation> <appinfo> <junkies/> <junkies/> <junkies/> <nxsd:variables> <nxsd:assign name="var1" value="${0,1}"/> <nxsd:assign name="var2" value="${1}" /> </nxsd:variables> </appinfo> </annotation> </element> <element name="PersonName" type="string" nxsd:style="terminated" nxsd:terminatedBy="${var1}" nxsd:quotedBy=""" /> <element name="Address" type="string" nxsd:style="terminated" nxsd:terminatedBy="${var1}" nxsd:quotedBy="""/> <element name="DOB" type="string" nxsd:style="terminated" nxsd:terminatedBy="${var2}" nxsd:quotedBy='"'/> <element name="Telephone1" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/> <element name="Telephone2" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/> <element name="Telephone3" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML
<variable xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <delims>,;</delims> <PersonName>Fred</PersonName> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <Telephone1>0161-499-1718</Telephone1> <Telephone2>phone-2</Telephone2> <Telephone3>phone-3</Telephone3> </variable>
ネイティブ・フォーマットでは、データが読み取られるときに、次の例に示すように、指定のデータに接頭辞または接尾辞、あるいはその両方が追加されます。
変換されるネイティブ・データ
Fred, "2 Old Street, Old Town,Manchester","20-08-1954",0161-499-1718
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD" > <element name="terminated"> <complexType> <sequence> <element name="PersonName" type="string" nxsd:prefixWith="Mr." nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" /> <element name="Address" type="string" nxsd:suffixWith="]]" nxsd:prefixWith="[[" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="""/> <element name="DOB" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="Telephone" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML
<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <PersonName>Mr.Fred</PersonName> <Address>[[2 Old Street, Old Town,Manchester]]</Address> <DOB>20-08-1954</DOB> <Telephone>0161-499-1718</Telephone> </terminated>
トランスレータは、次の例に示すように、skipMode
コンストラクトに応じてデータの読取り前または読取り後にスキップします。
変換されるネイティブ・データ
Fred, "2 Old Street, Old Town,Manchester","20-08-1954",0161-499-1718
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD" > <element name="terminated"> <complexType> <sequence> <element name="PersonName" type="string" nxsd:skip="5" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" /> <element name="Address" type="string" nxsd:skipMode="before" nxsd:skip="3" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="""/> <element name="DOB" type="string" nxsd:skipMode="after" nxsd:skip="6" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="Telephone" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML
<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <PersonName>Fred</PersonName> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <Telephone>99-1718</Telephone> </terminated>
nxsd
注釈を付けずに要素を宣言し、値fixed
またはdefault
を指定すると、トランスレータは指定された値を使用し、例外をスローしません。
変換されるネイティブ・データ
Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718"
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="terminated"> <annotation> <appinfo> <nxsd:variables> <nxsd:variable name="x" value="hello" /> </nxsd:variables> <junkies/> <junkies/> <junkies/> </appinfo> </annotation> <complexType> <sequence> <element name="PersonName" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" /> <element name="Age" type="string" fixed="16" /> <element name="Address" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="""/> <element name="DOB" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="salutation" type="string" default="${x}" /> <element name="Telephone" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML
<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <PersonName>Fred</PersonName> <Age>16</Age> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <salutation>hello</salutation> <Telephone>0161-499-1718</Telephone> </terminated>
write
コンストラクトは、実際のデータの書込み前または書込み後に、出力ストリームの現在位置にリテラルを書き込みます。
入力XML
<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <PersonName>Fred</PersonName> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <Telephone>0161-499-1718</Telephone> </terminated>
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD" > <element name="terminated"> <complexType> <sequence> <element name="PersonName" type="string" nxsd:writeMode="before" nxsd:write="Mr." nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" /> <element name="Address" type="string" nxsd:writeMode="after" nxsd:write="Over." nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="""/> <element name="DOB" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="Telephone" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したデータ
Mr.Fred,"2 Old Street, Old Town,Manchester",Over.20-08-1954,0161-499-1718
LookAhead
コンストラクトには次のタイプがあります。
タイプ1: LookAhead
X charsは、スタイルを使用して位置から値を読み取り、指定のリテラルと照合します。
タイプ2: LookAhead
X charsは、スタイルを使用して位置から値を読み取り、その値を後で使用できるように変数に格納します。
LookAhead: タイプ1
LookAhead
X charsは、スタイルを使用して位置から値を読み取り、指定のリテラルと照合します。
変換されるネイティブ・データ・フォーマット:
Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718",YES
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="LookAhead"> <complexType> <sequence minOccurs="0" nxsd:lookAhead="70" nxsd:lookFor="YES"> <element name="PersonName" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" /> <element name="Address" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="""/> <element name="DOB" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="Telephone" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML
<LookAhead xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <PersonName>Fred</PersonName> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <Telephone>0161-499-1718</Telephone> </LookAhead>
LookAhead: タイプ2
ネイティブ・スキーマではLookAhead
X charsは、スタイルを使用して位置から値を読み取り、その値を後で使用できるように変数に格納します。
変換されるネイティブ・データ・フォーマット:
Name1,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", YES Name2,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", NO Name3,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", NO Name4,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", YES
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <!-- nxsd:lookAhead="70" nxsd:scan="3" --> <element name="LookAhead"> <complexType> <choice maxOccurs="unbounded" nxsd:choiceCondition="${x}" nxsd:lookAhead="70" nxsd:scanLength="3" nxsd:assignTo="${x}"> <element name="Record1" type="string" nxsd:conditionValue="YES" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:skipMode="after" nxsd:skipUntil="${eol}" /> <element name="Record2" type="string" nxsd:conditionValue="NO " nxsd:style="terminated" nxsd:terminatedBy="," nxsd:skipMode="after" nxsd:skipUntil="${eol}" /> </choice> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML
<LookAhead xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <Record1>Name1</Record1> <Record2>Name2</Record2> <Record2>Name3</Record2> <Record1>Name4</Record1> </LookAhead>
outboundHeader
の実際の内容には変数(特に${eol}
)を使用できます。headerLines
およびoutboundHeader
の両方が使用可能な場合、アウトバウンドではoutboundHeader
が優先されます。
注意: インバウンド方向では、ヘッダー・スキップ機能がサポートされています。他の変数はアクセスできないか、リテラルのみが含まれているため、ヘッダーで使用できるのは事前定義済の変数のみです。 |
入力XML
<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <PersonName>Fred</PersonName> <Address>2 Old Street, Old Town,Manchester</Address> <DOB>20-08-1954</DOB> <Telephone>0161-499-1718</Telephone> </terminated>
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD" nxsd:hasHeader="true" nxsd:outboundHeader="This is a header ${eol}"> <element name="terminated"> <complexType> <sequence> <element name="PersonName" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" /> <element name="Address" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="""/> <element name="DOB" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/> <element name="Telephone" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/> </sequence> </complexType> </element> </schema>
変換されたデータ
This is a header Fred,"2 Old Street, Old Town,Manchester",20-08-1954,0161-499-1718
choiceCondition
コンストラクトとともにconditionValue
コンストラクトを使用すると、ブール演算子ANDおよびORとともに「等しい」(==)または「等しくない」(!=)などの一致基準を指定して、読み取った値とconditionValue
コンストラクトに指定した値を比較できます。
変換されるネイティブ・データ・フォーマット:
Order, ID41678, 20May2000 Item1, GigaWidget, 60, $75 Item2, MegaBucket, 48, $125 Cust1, Hopkins Associates, ID26490 Order, ID41680, 20May2000 Item3, Rt.Clopper, 40, $100 Item4, Lt.Clopper, 50, $100 Cust2, Jersey WebInovaters, ID46786
ネイティブ・スキーマ:
<?xml version="1.0" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/extensions/SampleNS" xmlns:tns="http://xmlns.oracle.com/pcbpel/nxsd/extensions/SampleNS" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:encoding="US-ASCII" nxsd:stream="chars" nxsd:version="NXSD"> <xsd:element name="Container"> <xsd:complexType> <xsd:choice minOccurs="1" maxOccurs="unbounded" nxsd:choiceCondition="terminated" nxsd:terminatedBy=","> <xsd:element name="Customer" nxsd:conditionValue="(== Cust1) or (== Cust2) and (!= emp)"> <xsd:complexType> <xsd:sequence> <xsd:element name="C1" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="""> </xsd:element> <xsd:element name="C2" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" nxsd:quotedBy="""> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Item" nxsd:conditionValue="(== Item1) or (== Item2) or (==Item3) or (== Item4)"> <xsd:complexType> <xsd:sequence> <xsd:element name="C1" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="""> </xsd:element> <xsd:element name="C2" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="""> </xsd:element> <xsd:element name="C3" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" nxsd:quotedBy="""> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Order" nxsd:conditionValue="Order"> <xsd:complexType> <xsd:sequence> <xsd:element name="C1" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="""> </xsd:element> <xsd:element name="C2" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" nxsd:quotedBy="""> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:choice> </xsd:complexType> </xsd:element> </xsd:schema>
ネイティブ・スキーマを使用して変換したXML
<Container xmlns="http://xmlns.oracle.com/pcbpel/nxsd/extensions/SampleNS"> <Order> <C1> ID41678</C1> <C2> 20May2000</C2> </Order> <Item> <C1> GigaWidget</C1> <C2> 60</C2> <C3> $75</C3> </Item> <Item> <C1> MegaBucket</C1> <C2> 48</C2> <C3> $125</C3> </Item> <Customer> <C1> Hopkins Associates</C1> <C2> ID26490</C2> </Customer> <Order> <C1> ID41680</C1> <C2> 20May2000</C2> </Order> <Item> <C1> Rt.Clopper</C1> <C2> 40</C2> <C3> $100</C3> </Item> <Item> <C1> Lt.Clopper</C1> <C2> 50</C2> <C3> $100</C3> </Item> <Customer> <C1> Jersey WebInovaters</C1> <C2> ID46786</C2> </Customer> </Container>
choiceCondition
コンストラクトは、フィールドが複数タイプのデリミタで区切られている複雑なレコードに対し、conditionValueコンストラクトとともに使用されます。複数タイプ以外にchoiceConditionに使用できるタイプは、FixedLength
、Variable
およびAd hoc
です。次の例に、variableタイプのchoiceConditionを示します。
変換されるネイティブ・データ・フォーマット:
Name1,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", YES Name2,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", NO
ネイティブ・スキーマ:
<element name="LookAhead"> <complexType> <choice maxOccurs="unbounded" nxsd:choiceCondition="${x}" nxsd:lookAhead="70" nxsd:scanLength="3" nxsd:assignTo="${x}"> <element name="Record1" type="string" nxsd:conditionValue="YES" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:skipMode="after" nxsd:skipUntil="${eol}" /> <element name="Record2" type="string" nxsd:conditionValue="NO " nxsd:style="terminated" nxsd:terminatedBy="," nxsd:skipMode="after" nxsd:skipUntil="${eol}" /> </choice> </complexType> </element>
ネイティブ・スキーマを使用して変換したXML
<LookAhead xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <Record1>Name1</Record1> <Record2>Name2</Record2> </LookAhead>
データ全体ではなくデータの一部のみを変換することが要件の場合は、dataLines
コンストラクトを使用して、ファイルの先頭を基準として無視する行数とその位置から変換する行数を指定できます。
変換されるネイティブ・データ・フォーマット:
Fred,addr,20-08-1954,0161-499-1718 Tam,addr,20-08-1954,0161-499-1718 Albert,addr,20-08-1954,0161-499-1718 Bill,addr,20-08-1954,0161-499-1718 Phil,addr,20-08-1954,0161-499-1718
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD" nxsd:headerLines="1" nxsd:dataLines="1"> <element name="terminated"> <complexType> <sequence maxOccurs="unbounded"> <element name="PersonName" type="string" nxsd:style="terminated" nxsd:terminatedBy="," /> <element name="Address" type="string" nxsd:style="terminated" nxsd:terminatedBy="," /> <element name="DOB" type="string" nxsd:style="terminated" nxsd:terminatedBy="," /> <element name="Telephone" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML
<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <PersonName>Tam</PersonName> <Address>addr</Address> <DOB>20-08-1954</DOB> <Telephone>0161-499-1718</Telephone> </terminated>
トランスレータでは、日付または時刻がタイムゾーンに関連付けられている必要があります。トランスレータでは、ネイティブ・データの日付とXMLの日付の両方について、タイムゾーンを使用した日付書式がサポートされています。
日付/時間文字列の変換時には、2つの部分があります。第1の部分はネイティブ・データの日付の書式(dateformat
)で、第2の部分は第1の部分の解析に使用するタイムゾーン(timeZone
またはuseTimeZone
)です。トランスレータでは、これらの詳細が日付/時間文字列の解析中に使用されます。
デフォルトでは、解析後に日付文字列がXMLのISO-8601フォーマットに変換されます。このデフォルトは、XMLDateFormat
とXMLTimeZone
またはuseTimeZone
を使用してオーバーライドできます。
変換されるネイティブ・データ・フォーマット:
11/16/0224/11/02 11-20-2002 23*11*2002 01/02/2003 01:02 01/02/2003 03:04:05 Thu, 26 May 2005 15:50:11 India Standard Time Do, 26 Mai 2005 15:43:10 Indische Normalzeit 20063202 11/16/02
ネイティブ・スキーマ:
<?xml version="1.0" encoding="US-ASCII"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD"> <element name="dateformat"> <complexType> <sequence> <element name="StartDate" type="date" nxsd:dateFormat="MM/dd/yy" nxsd:localeLanguage="en" nxsd:style="fixedLength" nxsd:length="8" /> <element name="EndDate" type="date" nxsd:dateFormat="dd/MM/yy" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="Milestone" type="dateTime" nxsd:useTimeZone="UTC" nxsd:dateFormat="MM-dd-yyyy" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="DueDate" type="dateTime" nxsd:useTimeZone="UTC" nxsd:dateFormat="dd*MM*yyyy" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="Date" type="dateTime" nxsd:useTimeZone="UTC" nxsd:dateFormat="MM/dd/yyyy hh:mm" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="Date" type="dateTime" nxsd:useTimeZone="UTC" nxsd:dateFormat="MM/dd/yyyy hh:mm:ss" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="LongDateInEnglish" type="dateTime" nxsd:displayTimeZone="true" nxsd:useTimeZone="IST" nxsd:dateFormat="EEE, d MMM yyyy HH:mm:ss zzzz" nxsd:localeLanguage="en" nxsd:localeCountry="US" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="LongDateInGerman" type="dateTime" nxsd:displayTimeZone="true" nxsd:useTimeZone="IST" nxsd:dateFormat="EEE, d MMM yyyy HH:mm:ss zzzz" nxsd:localeLanguage="de" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="InvalidDate" type="dateTime" nxsd:useTimeZone="UTC" nxsd:dateParsingMode="lax" nxsd:dateFormat="yyyyMMdd" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> <element name="MyFormatDate" type="string" nxsd:dateFormat="MM/dd/yy" nxsd:xmlDateFormat="dd-MM-yyyy" nxsd:localeLanguage="en" nxsd:style="fixedLength" nxsd:length="8" /> </sequence> </complexType> </element> </schema>
ネイティブ・スキーマを使用して変換したXML
<dateformat xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"> <StartDate>2002-11-16</StartDate> <EndDate>2002-11-24</EndDate> <Milestone>2002-11-20T00:00:00</Milestone> <DueDate>2002-11-23T00:00:00</DueDate> <Date>2003-01-02T01:02:00</Date> <Date>2003-01-02T03:04:05</Date> <LongDateInEnglish>2005-05-26T15:50:11+05:30</LongDateInEnglish> <LongDateInGerman>2005-05-26T15:43:10+05:30</LongDateInGerman> <InvalidDate>2008-08-02T00:00:00</InvalidDate> <MyFormatDate>16-11-2002</ MyFormatDate > </dateformat>
Oracle JCAアダプタは、変換中の検証を実装するように構成する必要があります。検証により、Oracle JCAアダプタにより変換中に無効なメッセージがパブリッシュされないことを保証できます。
次のタイプの検証の一方または両方を実装できます。
ペイロード検証では、Oracle JCAアダプタにより処理される入力と出力のXMLメッセージを検証する必要があります。ペイロード検証は、次のいずれかのレベルで設定できます。
トップレベル検証
トップレベル検証では、DOMResult (Document Object Model形式の結果)がXMLスキーマと対照して検証されます。この形式の検証は、インバウンド・ペイロードとアウトバウンド・ペイロードの両方について実装されます。また、この形式の検証では、無効なレコードのパブリッシュを制御してXML検証エラーに関する情報を提供できます。ただし、変換コンテキストは提供されません。たとえば、ネイティブ・ストリーム内でエラーが発生した行と列の情報は、トップレベル検証では提供されません。
XMLメッセージのトップレベル検証を実装するには、次のようにします。
メッセージのnxsdネームスペースを次のように設定する必要があります。
xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
検証フラグを次のようにtrue
に設定する必要があります。
nxsd:validation="true"
例:
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD" nxsd:validation="true" >
フィールドレベル検証
フィールドレベル検証では、個々のフィールドがXMLスキーマと対照して検証されます。この形式の検証はインバウンド・ペイロードについてのみ実装され、アウトバウンド・ペイロードについては実装されません。
XMLメッセージがXMLスキーマに準拠していない場合は、エラーが発生した正確な行と文字に関する情報が表示されます。
XMLメッセージのフィールドレベル検証を実装するには、次のようにします。
メッセージのnxsdネームスペースを次のように設定する必要があります。
xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
検証フラグを次のようにtrue
に設定する必要があります。
nxsd:fieldValidation="true"
例:
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD" nxsd:fieldValidation="true" >
スキーマ検証では、Oracle JCAアダプタによる変換対象のネイティブまたはXMLデータ・フォーマットに対して定義したスキーマ(ネイティブ・スキーマまたはXMLスキーマ)を検証する必要があります。
スキーマ検証を有効化するには、次のようにします。
メッセージのnxsdネームスペースを次のように設定する必要があります。
xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
nxsd検証フラグを次のようにtrue
に設定する必要があります。
nxsd:validateNxsd="true"
例:
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:stream="chars" nxsd:version="NXSD" nxsd: validateNxsd ="true" >
注意: nxsd:validateNxsd="true" 検証フラグは、ペイロード・レベルの検証に影響しません。 |
バイト順マーク(BOM)は、バイト・シーケンスのエンコーディングを記述する特殊なU+FEFF Unicode文字です。ネイティブ・フォーマット・トランスレータは、ネイティブ入力データのキャラクタ・エンコーディングの判別にBOMを使用するように構成できます。デフォルトでは、BOMは使用されません。入力データにBOMが使用される場合は、ネイティブ・スキーマ内でnxsd:parseBom
属性をtrue
に設定します。このように設定しなければ、トランスレータでは解析エラーがスローされます。
サンプルのnxsdファイルを次に示します。
<?xml version= '1.0' encoding= 'UTF-8' ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
xmlns:tns="http://TargetNamespace.com/InboundService"
targetNamespace="http://TargetNamespace.com/InboundService"
elementFormDefault="qualified" attributeFormDefault="unqualified"
nxsd:parseBom="true" nxsd:version="NXSD" nxsd:stream="chars"
nxsd:encoding="UTF8">
<xsd:element name="Root-Element">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="mydata" minOccurs="1" maxOccurs="unbounded"
nxsd:style="array"
nxsd:cellSeparatedBy="${eol}">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="C1" type="xsd:string"
nxsd:style="fixedLength"
nxsd:length="3"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
ネイティブ・フォーマット・ビルダーでは、文字によって変換されるインバウンド・ネイティブ・データが理解されます。このトランスレータは、内部で文字データを使用します。
しかし、バイトとしてフィールド長を指定したり、バイトによる長さの指定が必要な固定長データを処理したりすることが必要な場合もあります。
これは、シングルバイト・キャラクタ・セットでは問題になりませんが、マルチバイト・キャラクタ・セットでは問題になります。バイト単位の長さは、文字単位の長さとは等しくないからです。
これを解決するには、トランスレータでバイトによるフィールド長の指定をサポートします。長さの単位は、Byte
またはChar
のいずれかで指定できます。デフォルト値はChar
です。これを指定するには、次の規則を使用します。
nxsd:lengthUnits="Byte|Char"
Byteではフィールド長がバイトによって変換されるように指定され、Charではフィールド長が文字によって指定されることが示されています。
パディングされるデータを指定することもできます。これを行うと、トランスレータによってパディング・データの発生がすべて取り除かれます。これを行うには、取り除かれるパディング・バイト・データの書式をトランスレータで把握できるようにする必要があります。
nxsd:paddedDataType="decimal|binary|octal|hexbinary|string" nxsd:paddedBy="XYZ"
パディングされるデータ型の書式の説明は、次の表を参照してください。
書式 | 説明 |
---|---|
10進 | パディング・データを10進数の書式で指定します。パディングされるバイトに対応する10進数の値を指定する必要があります。パディング・データを1バイトを超えて指定する場合は、各バイトに対応する長さを3にする必要があります。001002、01213などは、パディング・データとしてバイトが追加されていることを示します。 |
バイナリ | パディング・データを2進数の書式で指定します。パディングされるバイトに対応する2進数の値を指定する必要があります。パディング・データを1バイトを超えて指定する場合は、各バイトに対応する長さを8にする必要があります。たとえば、001001100、01010101などです。 |
8進 | パディング・データを8進数の書式で指定します。パディングされるバイトに対応する8進数の値を指定する必要があります。パディング・データを1バイトを超えて指定する場合は、各バイトに対応する長さを3にする必要があります。たとえば、064、070、246などです。 |
16進 | パディング・データを16進数の書式で指定します。パディングされるバイトに対応する16進数の値を指定する必要があります。パディング・データを1バイトを超えて指定する場合は、各バイトに対応する長さを2にする必要があります。たとえば、AE、07などです。 |
string | パディング・データを文字列の書式で指定します。トランスレータは、スキーマ・レベルで指定されたエンコーディング(nxsd:encoding)を使用します。 |
受信データに追加される可能性がある接頭辞および接尾辞は、XMLにパブリッシュされる前に指定することもできます。これを行うには、次の規則を使用します。
nxsd:prefixWith="XXXX" nxsd:suffixWith="YYYY"
注意: FixedLengthスタイルのバイト・モードでデータの読取り/書込みをする間は、base64BinaryデータおよびhexBinaryデータを使用した接頭辞と接尾辞の指定がトランスレータではサポートされません。 |
トランスレータの動作は、XMLにパブリッシュされるデータのタイプに依存します。たとえば、次のようにタイプを指定できます。
type=" xsd:string|xsd:hexBinary|xsd:base64Binary"
データ・タイプがstring
に指定されている場合は、入力ストリームに対して指定されたバイト数がトランスレータによって読み取られます。
入力ストリームに十分なデータが含まれていない場合は、notEnoughData
例外が発生します。
指定されたバイト数がトランスレータによって読み取られると、その読み取ったバイトからパディング・データがすべて取り除かれます。パディング・データを削除した後に、トランスレータは残りのバイトを文字に変換します。
残りのバイトが文字境界に一致しないか、または残りのバイトがなんらかの理由で文字に変換できない場合は、トランスレータにより例外がスローされます。データを文字に変換することに成功した場合、それらの文字はXMLにパブリッシュされます。
指定するデータ・タイプがhexBinary
またはbase64Binary
の場合は、パディング・データの削除後に、トランスレータによって残りのバイトが指定されたデータ・タイプに変換され、さらにXMLにパブリッシュされます。
トランスレータは、入力ストリームからバイト(SHIFT_OUT、SHIFT_IN)をエスケープするためのサポートも提供しています。
このサポートは、特にSJISエンコーディングをサポートするために提供されています。このエンコーディングでは、混在2バイト・キャラクタ・セット・モードで、モードの変更(1バイトから2バイト)を示すために、SHIFT_OUTバイトおよびSHIFT_INバイトがデータに挿入されます。
トランスレータでSOSIサポートを使用するには、次の規則を使用します。
nxsd:escapeBytes="sosi"
paddedDataType="string"
の場合のみ、パディングでSJIS文字を使用できることに注意してください。
アウトバウンド変換では、バイトでフィールド長を指定できます。トランスレータにより、XML内で指定されたデータに対応するバイトが生成されます。
データがバイトに変換されると、トランスレータではまず接頭辞または接尾辞(存在する場合)が削除されます。トランスレータは、スキーマで指定された長さに従って生成されたバイト数をチェックします。生成されたバイト数がスキーマで指定されたものより大きい場合は、トランスレータによって例外がスローされます。
生成されたバイトが長さで指定されたものより小さい場合は、トランスレータにより、生成されたバイトの開始位置または終了位置にpaddedByデータがスキーマの指定に従って追加されます。
トランスレータXPath関数では、データをネイティブ・フォーマット(CSV、固定長、タブ区切り、COBOLコピーブックなどのフォーマット)からXMLフォーマットに、およびXMLフォーマットからネイティブ・フォーマットに変換できます。トランスレータXPath関数には、ストリーミングと非ストリーミングの2タイプがあります。違いは、ストリーミング・トランスレータXPath関数はバッチ処理によるトランスフォーメーション・アプローチを実行するのに対して、非ストリーミングXPath関数はこのアプローチを実行しないことです。バッチ処理によるトランスフォーメーション・アプローチでは、数GB程度のファイルをメモリー問題が発生することなく処理できます。
この項には、次の項目が含まれます。
この項では、トランスレータXPath関数の使用について理解しておく必要のある用語を説明します。
添付要素
他の場所にあり"href"
属性で参照される実際のコンテンツを、添付要素と呼ぶことがあります。実際のコンテンツは、ファイルシステムやデータベース表などに存在します。添付は通常、次のスキーマ・コンストラクトを使用して表現されます。
<element name="hrefelement"> <complexType> <attribute name="href" type="string"/> </complexType> </element>
"href"
属性には、参照されるデータの実際の場所を指定します。ファイルシステム内のファイルへのパスや、データベース・エンティティへのポインタ(主キー)を指定できます。
スケーラブルなDOM
スケーラブルなDOM (SDOM)は、Oracle XML Developer Kit (Oracle XDK)に含まれていて、DOMがスケーラブルかつプラガブルにサポートされます。このため、メモリーの不足およびスケーラビリティの制限という問題が解消され、DOM構成の制御が可能になります。Oracle XDKは、遅延実体化メカニズムを使用して、アクセスされるノードを作成し、未使用のノードをメモリーから解放するだけです。この機能により、アプリケーションはスケーラビリティが向上し、非常に大きいXMLドキュメントを処理できるようになります。
ファイルの読取りおよび書込み中にトランスレータが必要になる場合があります。この項では、次のトランスレータXPath関数について説明します。
doTranslateFromNative XPath関数は、入力データをXMLに変換します。入力データとしては、文字列、添付要素またはbase64Binary要素を使用できます。
ora:dotranslateFromNative('
input
','
nxsdTemplate
','
nxsdRoot
','
targetType
','
attachment element
?'
)
次の表では、前述の構文で使用されているこの関数のパラメータについて説明します。
パラメータ | 説明 |
---|---|
input |
XPath関数の入力データ。データとしては、変換する必要がある文字列データ、Oracleファイル/FTPアダプタの添付、外部ファイル・パスを参照する添付、またはbase64Binary要素を使用できます。 |
nxsdTemplate | 入力データからXMLフォーマットへの変換に使用するNXSDスキーマ。 |
nxsdRoot | NXSDスキーマ内のルート要素。 |
targetType | このパラメータは、XPath関数がネイティブ・データをXMLに変換する方法を指定します。'DOM' 、'ATTACHMENT' または'SDOM' に設定する必要があります。次のように、targetType パラメータの設定に応じた処理が行われます。
|
attachmentElement | このパラメータはオプションです。これは、返されるXMLファイルの添付です。 |
例6-1 XPath関数の構成: 入力データが文字列タイプで、XML DOMに変換する必要がある場合
<variables> <variable…/> <variable name="csv_data" type="xsd:string"/> </variables> <assign name="assignCSVData"> <copy> <from expression="'this, is, csv, data…'"/> <to variable="csv_data"/> </copy> </assign> <assign name="doTranslateFromNativeCall"> <copy> <from expression="ora: doTranslateFromNative (bpws:getVariableData('csv_data'),'xsd/address-csv.xsd','Root-Element','DOM')"/> <to variable="returnVariable" query="/ns1:Root-Element"/> </copy> </assign>
この例の内容は次のとおりです。
csv_data
は、XMLに変換するCSVデータを含んでいるBPEL変数です。
xsd/address-csv.xsd
は、プロジェクト内のNXSDスキーマへの相対パスです。
Root-Element
は、NXSDスキーマ内のルート要素です(オプション)。
returnVariable
は、DOMとして返されるXMLデータです。
例6-2 入力データが添付で、DOMに変換する必要がある場合
attachmentElement
をBPELプロセスのスキーマに次のように定義します。
<schema targerNamespace="…"> <element name="attachmentElement"> <complexType> <attribute name="href" type="string"/> </complexType> </element> </schema>
タイプが添付要素の変数をBPELプロセスのスキーマに次のように作成します。
<variables> <variable…/> <variable name="attachmentVariable" type="client:attachmentElement"/> </variables>
変換する必要があるソース・ファイルのパスを次のように割り当てます。
<assign name="AssignAttachmentReference"> <copy> <from expression="'/tmp/xpath/in/address.csv'"/> <to variable="attachmentVariable" query="/client:attachmentElement/@href"/> </copy> </assign>
XPath関数を次のようにコールします。
<assign name="xlateFromNative"> <copy> <from expression="ora:doTranslateFromNative(bpws:getVariableData('attachmentVariable'),'xsd/address-csv.xsd', 'Root-Element', 'DOM')"/> <to variable="returnVariable" query="/ns1:Root-Element"/> </copy> </assign>
この例の内容は次のとおりです。
attachmentVariable
は、ソース・ファイルのパスを参照するBPEL内の添付変数です。
xsd/address-csv.xsd
は、プロジェクト内のNXSDスキーマへの相対パスです。
Root-Element
は、NXSDスキーマ内のルート要素です。
returnVariable
は、DOMとして返されるXMLデータです。
例6-3 XPath関数の構成: 入力データがBase64でエンコードされていて、DOMに変換する必要がある場合
base64でエンコードされている要素をBPELプロセスのスキーマに次のように定義します。
<schema targerNamespace="…"> <element name="mtomElement" type="base64Binary"/> </schema>
タイプがmtom要素の変数をBPELプロセスのスキーマに次のように作成します。
<variables> <variable…/> <variable name="encodedData" type="client:mtomElement"/> </variables>
変換する必要があるソース・ファイルのパスを次のように割り当てます。
<assign name="assignBase64EncodedData"> <copy> <from expression="'b3JhY2xl'"/> <to variable="encodedData" query="/client:mtomElement"/> </copy> </assign> <assign name="doTranslateFromNativeCall"> <copy> <from expression="ora: doTranslateFromNative (bpws:getVariableData('encodedData'),'xsd/address-csv.xsd','Root-Element','DOM')"/> <to variable="returnVariable" query="/ns1:Root-Element"/> </copy> </assign>
この例の内容は次のとおりです。
mtomElement
は、XMLに変換するbase64エンコード・データを含んでいるBPEL変数です。
xsd/address-csv.xsd
は、プロジェクト内のNXSDスキーマへの相対パスです。
Root-Element
は、NXSDスキーマ内のルート要素です。
returnVariable
は、DOMとして返されるXMLデータです。
例6-4 XPath関数の構成: 入力データが文字列タイプで、ファイル・パスで参照される添付に変換する必要がある場合
attachmentElement
をBPELプロセスのスキーマに次のように定義します。
<schema targerNamespace="…"> <element name="attachmentElement"> <complexType> <attribute name="href" type="string"/> </complexType> </element> </schema>
タイプが文字列の入力変数と、タイプが添付の出力変数を、BPELプロセスのスキーマに次のように作成します。
<variables> <variable…/> <variable name="csv_data" type="xsd:string"/> <variable name="returnAttachmentVariable" type="client:attachmentElement"/> </variables>
変換する必要があるCSVデータを次のように割り当てます。
<assign name="assignCSVData">
<copy>
<from expression="'this, is, csv, data…'"/>
<to variable="csv_data"/>
</copy>
</assign>
変換したデータを格納するファイルのパスを次のように添付に移入します。
<assign name="AssignAttachmentReferenceForOutput"> <copy> <from expression="'/tmp/xpath/output/address.xml'"/> <to variable=" returnAttachmentVariable " query="/client:attachmentElement/@href"/> </copy> </assign>
XPath関数を次のようにコールします。
<assign name="doTranslateFromNativeCall"> <copy> <from expression="ora: doTranslateFromNative (bpws:getVariableData('csv_data'),'xsd/address-csv.xsd','Root-Element','ATTACHMENT', bpws:getVariableData('returnAttachmentVariable'))"/> <to variable="returnAttachmentVariable"/> </copy> </assign>
この例の内容は次のとおりです。
csv_data
は、XMLに変換するCSVデータを含んでいるBPEL文字列変数です。
xsd/address-csv.xsd
は、プロジェクト内のNXSDスキーマへの相対パスです。
Root-Element
は、NXSDスキーマ内のルート要素です。
returnAttachmentVariable
は、返された添付です。
注意: この例では、targetType
はATTACHMENT
に設定され、returnAttachmentVariable
は変換したXMLが書き込まれるファイル・パスを指しています。
ただし、5つ目のパラメータ(bpws:getVariableData('returnAttachmentVariable')
)はオプションです。このパラメータが未指定の場合、XPath関数ではデータベース・ベースの添付を作成し、これを返します。これを行うには、XPath関数を次のように構成します。
attachmentElement
をBPELプロセスのスキーマに次のように定義します。
<schema targerNamespace="…"> <element name="attachmentElement"> <complexType> <attribute name="href" type="string"/> </complexType> </element> </schema>
タイプが文字列の入力変数と、タイプが添付の出力変数を、BPELプロセスのスキーマに次のように作成します。
<variables> <variable…/> <variable name="csv_data" type="xsd:string"/> <variable name="returnAttachmentVariable" type="client:attachmentElement"/> </variables>
変換する必要があるCSVデータを次のように割り当てます。
<assign name="assignCSVData">
<copy>
<from expression="'this, is, csv, data…'"/>
<to variable="csv_data"/>
</copy>
</assign>
<assign name="doTranslateFromNativeCall">
<copy>
<from expression="ora: doTranslateFromNative (bpws:getVariableData('csv_data'),'xsd/address-csv.xsd','Root-Element','ATTACHMENT')"/>
<to variable="returnAttachmentVariable"/>
</copy>
</assign>
XPathコールが返された後、データベース・ベースの添付を表すGUIDを指すhref
属性がreturnAttachmentVariable
変数に移入されます。
注意: 変換中のデータが大きい場合は、XPath関数のtargetTypeパラメータとしてATTACHMENT
またはSDOM
を使用する必要があります。
doTranslateToNative
XPath関数は、入力DOMを文字列データまたは添付に変換します。
構文:
ora:dotranslateToNative('
input
','
nxsdTemplate
','
nxsdRoot
','
targetType
','
attachmentElement
?'
)
次の表では、前述の構文で使用されているこの関数のパラメータについて説明します。
パラメータ | 説明 |
---|---|
input |
XPath関数の入力データ。データとしては、CSVなどのネイティブ・フォーマットに変換する必要があるDOMまたはSDOMデータを使用できます。 |
nxsdTemplate |
入力データからXMLフォーマットへの変換に使用するNXSDスキーマ。 |
nxsdRoot |
NXSDスキーマ内のルート要素の名前。 |
targetType |
このパラメータは、XPath関数がXMLデータをネイティブ・フォーマットに変換する方法を指定します。'STRING' または'ATTACHMENT' に設定する必要があります。次のように、targetType パラメータの設定に応じた処理が行われます。
|
attachmentElement |
このパラメータはオプションです。これは、変換したデータが書き込まれる添付です。 |
例6-5 XPath関数の構成: 入力データがXMLフォーマットで、CSV文字列フォーマットに変換する必要がある場合
<variables> <variable…/> <variable name="inputDOM" type="ns1:Root-Element"/> <!- - data that must be translated into native - -> <variable name="returned_csv_data" type="xsd:string"/> </variables> <assign name="doTranslateToNativeCall"> <copy> <from expression="ora: doTranslateToNative (bpws:getVariableData('inputDOM'),'xsd/address-csv.xsd','Root-Element','STRING')"/> <to variable="returned_csv_data"/> </copy> </assign>
この例の内容は次のとおりです。
inputDOM
は、変換したCSVを表す文字列データに変換するXMLデータを含んでいるBPEL DOM変数です。
xsd/address-csv.xsd
は、プロジェクト内のNXSDスキーマへの相対パスです。
Root-Element
は、NXSDスキーマ内のルート要素です。
return_csv_data
は、変換されたCSVデータを含んでいる文字列変数です。
例6-6 XPath関数の構成: 入力XML DOMを、変換したCSVのターゲット・ファイルのパスを表す添付に変換する場合
attachmentElement
をBPELプロセスのスキーマに次のように定義します。
<schema targerNamespace="…"> <element name="attachmentElement"> <complexType> <attribute name="href" type="string"/> </complexType> </element> </schema>
タイプがattachmentElement
の入力変数をBPELプロセスのスキーマに次のように作成します。
<variables> <variable…/> <variable name="inputDOM" type="ns1:Root-Element"/> <variable name="attachmentVariable" type="client:attachmentElement"/> </variables>
変換したCSVを書き込むターゲット・ファイルのパスを次のように割り当てます。
<assign name="AssignAttachmentReference"> <copy> <from expression="'/tmp/xpath/out/address.csv'"/> <to variable="attachmentVariable" query="/client:attachmentElement/@href"/> </copy> </assign>
XPath関数を次のようにコールします。
<assign name="xlateToNative"> <copy> <from expression="ora:doTranslateToNative(bpws:getVariableData('inputDOM'),'xsd/address-csv.xsd', 'Root-Element', 'ATTACHMENT', bpws:getVariableData(' attachmentVariable'))"/> <to variable="attachmentVariable"/> </copy> </assign>
この例の内容は次のとおりです。
inputDOM
は、/tmp/xpath/out/address.csv
で表されるCSV出力ファイルに変換するXMLデータを含んでいるBPEL DOM変数です。
xsd/address-csv.xsd
は、プロジェクト内のNXSDスキーマへの相対パスです。
Root-Element
は、NXSDスキーマ内のルート要素です。
AttachmentElement
は、/tmp/xpath/out/address.csv
で表されるターゲット出力ファイルへのパスです。
注意: この例では、targetType
はATTACHMENT
に設定され、AttachmentVariable
は変換したCSVファイルが書き込まれるファイル・パスを指しています。
ただし、5つ目のパラメータ(bpws:getVariableData('attachmentVariable')
)はオプションです。このパラメータが未指定の場合、XPath関数ではデータベース・ベースの添付を作成し、これを返します。これを行うには、XPath関数を次のように構成します。
attachmentElement
をBPELプロセスのスキーマに次のように定義します。
<schema targerNamespace="…"> <element name="attachmentElement"> <complexType> <attribute name="href" type="string"/> </complexType> </element> </schema>
タイプがattachmentElement
の入力変数をBPELプロセスのスキーマに次のように作成します。
<variables> <variable…/> <variable name="inputDOM" type="ns1:Root-Element"/> <variable name="attachmentVariable" type="client:attachmentElement"/> </variables>
XPath関数を次のようにコールします。
<assign name="xlateToNative"> <copy> <from expression="ora:doTranslateToNative(bpws:getVariableData('inputDOM'),'xsd/address-csv.xsd', 'Root-Element', 'ATTACHMENT')"/> <to variable="attachmentVariable"/> </copy> </assign>
XPathコールが返された後、データベース・ベースの添付を表すGUIDを指すhref
属性がattachmentVariable
に移入されます。
XPath関数は、バッチ処理によるトランスフォーメーション・アプローチを実行します。このアプローチでは、数GB程度のファイルをメモリー問題が発生することなく処理できます。トランスフォーメーション・エンジンはトランスフォーメーションの結果をそのメモリーに格納しないため、任意の大きさのペイロードを処理できます。トランスフォーメーション・エンジンは、大きなファイルの要素のバッチ処理後に、メモリーをフラッシュします。デフォルトのバッチ・サイズは要素数10000で、トランスフォーメーション・エンジンはこの数の要素を処理するとメモリーをフラッシュします。このパラメータはオプションであり、内部で使用されます。
注意: バッチ処理によるトランスフォーメーション・アプローチは、繰返し構造のXMLドキュメントに対してのみサポートされています。 |
構文:
ora:doStreamingTranslate('
input
','
streamingXpathContext
','
targetType
','
attachmentElement
?'
)
次の表では、前述の構文で使用されているこの関数のパラメータについて説明します。
パラメータ | 説明 |
---|---|
input |
XPath関数の入力データ。データとしては、SDOMまたは添付要素を使用できます。 |
streamingXpathContext | XPathコンテキストを表すDOM。 |
targetType | このパラメータは、XPath関数が入力データを添付に変換する方法を指定します。SDOM またはATTACHMENT に設定する必要があります。 |
attachmentElement | このパラメータはオプションです。これは、データがストリームされる添付です。 |
streamingXPathContext
パラメータは、ストリーミング・トランスフォーメーションのコンテキストを指定し、次のスキーマ要素に一致する必要があります。
<schema targetNamespace="…"> <element name="streamingcontext"> complexType> <sequence> <element name="sourceSchema" type="string"/> <element name="sourceRootElement" type="string"/> <element name="sourceType" type="string"/> <element name="xsl" type="string"/> <element name="targetSchema" type="string"/> <element name="targetRootElement" type="string"/> <element name="targetType" type="string"/> <element name="batchSize" type="string"/> </sequence> </complexType> </element> </schema>
このコンテキストの内容は次のとおりです。
スキーマ要素 | 説明 |
---|---|
sourceSchema |
ネイティブ・データからXMLへの変換に使用するソースNXSDスキーマ。 |
sourceRootElement |
ソースNXSDスキーマ内のルート要素の名前。 |
sourceType |
入力データに応じてxml またはnative に設定します。 |
xsl |
XSLファイルの相対パス。 |
targetSchema |
XMLからネイティブ・データへの変換に使用するターゲットNXSDスキーマ。 |
targetRootElement |
ターゲットNXSDスキーマ内のルート要素の名前。 |
targetType |
出力データに応じてxml またはnative に設定します。 |
batchSize |
トランスフォーメーション・エンジンがメモリーをフラッシュするまでに処理する要素数。 |
この項では、バッチ処理によるトランスフォーメーションが持つ次の特徴を説明します。
適用性
バッチ処理によるトランスフォーメーションの適用対象は次のとおりです。
繰返し構造のドキュメント
ドキュメント全体の集計が不要なXSLT
XSLTエンジンのバッチ起動
XSLTエンジンのバッチ起動の主な手順は次のとおりです。
ソース・ドキュメントを、1つ以上のレコードを含む複数のバッチに分割します。
1度に1つのバッチについてXSLTトランスフォーメーションを実行します。
XSLT起動の結果を単一のターゲット・ドキュメントに結合します。
分割または結合の即時実行
ソース・ドキュメントの分割と分割結果のターゲット・ドキュメントへの結合は、次のように実行されます。
中間メモリーやディスク記憶域は使用しません。
SAXイベントのパイプラインまたはインターセプトが行われます。
小さくて済む、メモリーでのフットプリント
バッチ処理によるトランスフォーメーションでは、次のタスクにメモリーをあまり使用しません。
任意の大きさ(ターゲット・システムによって制約あり)のXMLドキュメントの変換
スタンドアロン・テストでは、540MBの変換は3分未満で完了
例6-7では、ストリーミング・トランスフォーメーションXPath関数を使用して、FlatStructure FileAdapterサンプルを実装します。このサンプルの使用例では、インバウンドのネイティブ添付をCSVフォーマットからXMLフォーマットに変換してから、生成されたXMLファイルにユーザー指定のXSLファイルを適用します。これにより、変換済XMLファイルは、添付が表す固定長コンテンツに変換されます。
例6-7 ストリーミング・トランスフォーメーションXPath関数の使用
attachmentElementを次のように定義します。
<schema targerNamespace="…"> <element name="attachmentElement"> <complexType> <attribute name="href" type="string"/> </complexType> </element> </schema>
インバウンドcsvファイルを参照する入力添付と、出力固定長ファイルを参照する出力添付に使用する、変数を作成します。ストリーミング・コンテキストに対応する変数を作成します。この変数への移入は、XPath関数をコールする前に行う必要があります。
<variables> <variable name="xlationContext" element="client:streamingcontext"/> <variable name="inputAttachment" element="client:attachmentElement"/> <variable name="returnAttachment" element="client:attachmentElement"/> </variables> <!- - Assign the input and output attachments - -> <assign name="assignValuesForAttachments"> <copy> <from expression="'/tmp/xpath/in/address.csv' "/> <to variable="inputAttachment" query="/client:attachmentElement/@href"/> </copy> <copy> <from expression="'/tmp/xpath/out/address_fixedLength.txt' "/> <to variable="returnAttachment" query="/client:attachmentElement/@href"/> </copy> </assign> <!- - Assign the streaming context - -> <assign name="AssignStreamingContext"> <copy> <from expression="'xsd/address-csv.xsd'"/> <to variable="xlationContext" query="/client:streamingcontext/client:sourceSchema"/> </copy> <copy> <from expression="'Root-Element'"/> <to variable="xlationContext" query="/client:streamingcontext/client:sourceRootElement"/> </copy> <copy> <from expression="'native'"/> <to variable="xlationContext" query="/client:streamingcontext/client:sourceType"/> </copy> <copy> <from expression="'xsd/address-fixedLength.xsd'"/> <to variable="xlationContext" query="/client:streamingcontext/client:targetSchema"/> </copy> <copy> <from expression="'Root-Element'"/> <to variable="xlationContext" query="/client:streamingcontext/client:targetRootElement"/> </copy> <copy> <from expression="'native'"/> <to variable="xlationContext" query="/client:streamingcontext/client:targetType"/> </copy> <copy> <from expression="'xsl/addr1Toaddr2.xsl'"/> <to variable="xlationContext" query="/client:streamingcontext/client:xsl"/> </copy> <copy> <from expression="'10000'"/> <to variable="xlationContext" query="/client:streamingcontext/client:batchSize"/> </copy> </assign> <!- - call the XPath function - -> <assign name="executeStreamingXPath"> <copy> <from expression="ora:doStreamingTranslate(bpws:getVariableData('inputAttachment','/client:attachmentElement'), bpws:getVariableData('xlationContext'), 'ATTACHMENT', bpws:getVariableData('returnAttachment'))"/> <to variable="returnAttachment" query="/client:attachmentElement"/> </copy> </assign>
この項には、次の項目が含まれます。
注意: 現在、ネイティブ・フォーマット・ビルダーでは、複数文字のデリミタを含むデータのサンプリングはサポートされていません。この種のデータをサンプリングするには、適切なDelimited By文字列を使用してNXSDをハンド・コーディングします。 |
カンマ区切り値(CSV)ファイルは、一般的なXML以外のファイル構造です。
このネイティブ・ファイルのXMLスキーマを作成する際には、ネイティブ・フォーマット・ビルダー・ウィザードの「デリミタ」オプションを使用します。
nxsd:headerLines="1"
スキーマ属性は、ネイティブ・データの1行目をヘッダー行として処理してスキップしてから、残りのデータに対して実際の変換を行う必要があることを意味します。nxsd:stream="chars"
スキーマ属性は、データが文字として読み取られることを意味します。nxsd:stream="bytes"
のようにnxsd:stream
がbytes
に設定されている場合は、このスキーマ属性は、ネイティブ・データがバイトとして読み取られることを意味します。対応するスカラー・データを持つName
、Street
、City
、State
、Country
の各要素の宣言では、nxsd:style="terminated"
属性によって対応するデータがterminatedスタイルで保存されていることが定義されています。実際の終了文字は、コンストラクトに指定されているnxsd:terminatedBy=","
属性で定義されています。terminatedスタイルの詳細は、第6.2.2.2項「終了データの定義」を参照してください。
この使用例では、ネイティブ・フォーマット・ビルダーにより、名前、番地、市区町村、都道府県および国などの住所詳細を含んだデリミタ付きサンプル・ファイル・タイプが使用されます。このサンプル・ネイティブ・ファイル内の要素は、すべてカンマ(,)で区切られています。対応するNXSDを生成し、同様にテストできます。この使用例を実行する手順は、次のとおりです。
サンプル・テキスト・ファイルaddress-csv.txt
内のデータは、次のとおりです。
Name,Street1,Street2,City,State,Country Oracle India Private Limited, Lexington Towers Prestige St. John's Woods, 2nd Cross Road Chikka Audugodi, Bangalore, Karnataka, India Intel Technology India Private Limited, Survey #23-56 P Devarabeesanahalli Village, Outer Ring Road Varthur Hobli, Bangalore, Karnataka, India
図6-4に示すように、アダプタ構成ウィザードの「メッセージ」ページにナビゲートし、「ネイティブ・フォーマットのスキーマの定義」ボタンをクリックします。
図6-5に示すように、「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
「次へ」をクリックします。図6-6に示すように、「タイプの選択」ページが表示されます。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。
図6-7に示すように、「参照」
をクリックしてaddress-csv.txtファイルを選択します。
「次へ」をクリックします。図6-8に示すように、「レコード編成」ページが表示されます。
「ファイルはマルチ・レコード・インスタンスを含む」→「1つのタイプの複数レコード」と選択し、「次へ」をクリックします。「要素の指定」ページが表示されます。
図6-9
に示すように、「複数レコードを含む要素名の入力」フィールドにAddressBook
と入力し、「レコードを表す要素名の入力」フィールドにAddressと入力します。
「次へ」をクリックします。図6-10に示すように、「デリミタの指定」ページが表示されます。
「デリミタ」フィールドで「カンマ(,)」オプションが選択されていることを確認し、「次へ」をクリックします。図6-11に示すように、「フィールド・プロパティ」ページが表示されます。
図6-11 「ネイティブ・フォーマット・ビルダー・ウィザード - フィールド・プロパティ」ページ
「フィールド名として最初のレコードを使用」を選択し、「次へ」をクリックします。図6-12に示すように、「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
注意: 最初のレコードはフィールド名として使用され、変換時にはヘッダー・レコードとして処理されてスキップされます。 |
図6-12 「ネイティブ・フォーマット・ビルダー・ウィザード - 生成されたネイティブ・フォーマット・ファイル」ページ
対応するネイティブ・スキーマの定義は次のとおりです。
<?xml version="1.0" encoding="UTF-8" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" xmlns:tns="http://TargetNamespace.com/Read" targetNamespace="http://TargetNamespace.com/Read" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:version="NXSD" nxsd:stream="chars" nxsd:encoding="ASCII" nxsd:hasHeader="true" nxsd:headerLines="1" nxsd:headerLinesTerminatedBy="${eol}" > <xsd:element name="AddressBook"> <xsd:complexType> <xsd:sequence> <xsd:element name="Address" minOccurs="1" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="Name" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" /> <xsd:element name="Street1" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" /> <xsd:element name="Street2" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" /> <xsd:element name="City" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" /> <xsd:element name="State" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy=""" /> <xsd:element name="Country" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" nxsd:quotedBy=""" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
「テスト」をクリックします。図6-13に示すように、「NXSDスキーマのテスト」ダイアログが表示されます。
「XMLの生成」アイコンをクリックします。図6-14に示すように、生成されたXMLが「NXSDスキーマのテスト」ダイアログの「結果XML」ペインに表示されます。
対応するネイティブ・スキーマ・フォーマットを使用したネイティブ・データは、次のXMLに変換されます。
<?xml version = '1.0' encoding = 'UTF-8'?> <AddressBook xmlns="http://TargetNamespace.com/ReadFile"> <Address> <Name>Oracle India Private Limited</Name> <Street1> Lexington Towers Prestige St. John's Woods</Street1> <Street2> 2nd Cross Road Chikka Audugodi</Street2> <City> Bangalore</City> <State> Karnataka</State> <Country> India</Country> </Address> <Address> <Name>Intel Technology India Private Limited</Name> <Street1> Survey #23-56 P Devarabeesanahalli Village</Street1> <Street2> Outer Ring Road Varthur Hobli</Street2> <City> Bangalore</City> <State> Karnataka</State> <Country> India</Country> </Address> </AddressBook>
「OK」をクリックします。図6-12に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示されます。
「次へ」をクリックします。図6-15に示すように、「ネイティブ・フォーマット・ビルダー: 終了」ページが表示されます。
「終了」をクリックします。図6-16に示すように、生成されたNXSDを含んだアダプタ構成ウィザードの「メッセージ」ページが表示されます。
前述の例で定義された使用例は、*SVクラスの一例です。ワイルド・カードは、任意の文字または文字列に置き換えられます。たとえば、プラス(+
)で区切られた値を含むネイティブ・データの場合、ワイルド・カードをプラス(+)文字で置き換えます。
このネイティブ・ファイルのXMLスキーマを作成する際には、ネイティブ・フォーマット・ビルダー・ウィザードの「デリミタ」タイプ・オプションを使用します。
変換されるネイティブ・データ・フォーマット
次のようなネイティブ・データ・フォーマットがあります。
a+b+c+d+e f+g+h+i+j
ネイティブ・スキーマ
nxsd:terminatedBy=","
のかわりにterminated byフォーマットをnxsd:terminatedBy="+"
として定義することを除き、対応するネイティブ・スキーマ定義は前の使用例と似ています。terminatedスタイルの詳細は、第6.2.2.2項「終了データの定義」を参照してください。
この例では、使用されるネイティブ・データはCSVの場合と同じですが、データのタイプはCSVではなく固定長です。
このネイティブ・ファイルのXMLスキーマを作成するには、ネイティブ・フォーマット・ビルダー・ウィザードの「固定長」オプションを使用します。
この使用例では、ネイティブ・フォーマット・ビルダーにより、名前、番地、市区町村、都道府県および国などの住所詳細を含んだaddress
という固定長ファイル・タイプが使用されます。このaddress
ネイティブ・ファイル内の要素は、すべて固定長です。対応するNXSDを生成し、同様にテストできます。この使用例を実行する手順は、次のとおりです。
サンプル・テキスト・ファイルaddress.txt
内のデータは、次のとおりです。
Name Street City State Country ABC Private Limited Street1 Bangalore Karnataka India XYZ Private Limited Street1 Bangalore Karnataka India
図6-4に示すように、アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。図6-5に示すように、「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
「次へ」をクリックします。「タイプの選択」ページが表示されます。
図6-17に示すように、ファイル・タイプとして「固定長」を選択します。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。
図6-18に示すように、「参照」
をクリックしてaddress.txtファイルを選択します。
「次へ」をクリックします。図6-19に示すように、「レコード編成」ページが表示されます。
「1つのタイプの複数レコード」を選択して「次へ」をクリックします。「要素の指定」ページが表示されます。
図6-20
に示すように、「複数レコードを含む要素名の入力」フィールドにAddressBook
と入力し、「レコードを表す要素名の入力」フィールドにAddressと入力します。
「次へ」をクリックします。「マルチ・レコード・ファイルのフィールド長」ページが表示されます。
図6-21に示すように、必要な位置でルーラーをクリックしてサンプル・テキスト領域のフィールドをマーク付けし、「次へ」をクリックします。「フィールド・プロパティ」ページが表示されます。
図6-21 「ネイティブ・フォーマット・ビルダー・ウィザード - マルチ・レコード・ファイルのフィールド長」ページ
図6-22に示すように、「フィールド名として最初のレコードを使用」を選択します。
図6-22 「ネイティブ・フォーマット・ビルダー・ウィザード - フィールド・プロパティ」ページ
「次へ」をクリックします。図6-23に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示されます。
図6-23 「ネイティブ・フォーマット・ビルダー・ウィザード - 生成されたネイティブ・フォーマット・ファイル」ページ
対応するネイティブ・スキーマ定義はCSVファイルの定義と似ていますが、固定長スタイルの関連する属性とともに、style
がnxsd:style="terminated"
からnxsd:style="fixedLength"
に変わります。固定長スタイルでは、必須属性はlength: nxsd:length
です。nxsd:length
の値は、読み取られる実際のデータの長さです。
<?xml version="1.0" encoding="UTF-8" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" xmlns:tns="http://TargetNamespace.com/FileIn_1" targetNamespace="http://TargetNamespace.com/FileIn_1" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:version="NXSD" nxsd:stream="chars" nxsd:encoding="ASCII" nxsd:hasHeader="true" nxsd:headerLines="1" nxsd:headerLinesTerminatedBy="${eol}" <xsd:element name="AddressBook"> <xsd:complexType> <xsd:sequence> <xsd:element name="Address" minOccurs="1" maxOccurs="unbounded" nxsd:style="array" nxsd:cellSeparatedBy="${eol}"> <xsd:complexType> <xsd:sequence> <xsd:element name="Name" type="xsd:string" nxsd:style="fixedLength" nxsd:length="22" /> <xsd:element name="Street" type="xsd:string" nxsd:style="fixedLength" nxsd:length="8" /> <xsd:element name="City" type="xsd:string" nxsd:style="fixedLength" nxsd:length="12" /> <xsd:element name="State" type="xsd:string" nxsd:style="fixedLength" nxsd:length="10" /> <xsd:element name="Country" type="xsd:string" nxsd:style="fixedLength" nxsd:length="7" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
「テスト」をクリックします。図6-24に示すように、「NXSDスキーマのテスト」ダイアログが表示されます。
「XMLの生成」アイコンをクリックします。図6-25に示すように、生成されたXMLが「NXSDスキーマのテスト」ダイアログの「結果XML」ペインに表示されます。
対応するネイティブ・スキーマ・フォーマットを使用したネイティブ・データは、次のXMLに変換されます。
<?xml version = '1.0' encoding = 'UTF-8'?> <AddressBook xmlns="http://TargetNamespace.com/Read"> <Address> <Name>ABC Private Limited </Name> <Street>Street1 </Street> <City> Bangalore </City> <State>Karnataka </State> <Country>India</Country> </Address> <Address> <Name>XYZ Private Limited </Name> <Street>Street1 </Street> <City> Bangalore </City> <State>Karnataka </State> <Country>India </Country> </Address> </AddressBook>
「OK」をクリックします。図6-23に示すように、「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
「次へ」をクリックします。図6-15に示すように、「ネイティブ・フォーマット・ビルダー: 終了」ページが表示されます。
「終了」をクリックします。図6-16に示すように、生成されたNXSDを含んだアダプタ構成ウィザードの「メッセージ」ページが表示されます。
請求書のファイル構造は、前述の使用例で説明したCSV、*SVおよび固定長のファイルの構造よりも複雑です。通常、請求書には購入者の情報、販売者の情報および明細項目が含まれます。これらの各要素には、複合タイプを使用できます。たとえば、購入者要素をpartner-typeとして定義し、partner-typeをid、nameおよびaddressという3つの要素で構成できます。
このネイティブ・ファイルのXMLスキーマを作成する際には、ネイティブ・フォーマット・ビルダー・ウィザードの「複合タイプ」オプションを使用します。
この使用例では、ネイティブ・フォーマット・ビルダーにより、buyer、seller、itemsなどの複数のレコードを含んだinvoiceという複合ファイル・タイプのinvoice.txt
が使用されます。この使用例を使用すると、NXSDを生成してテストすることもできます。この使用例を実行する手順は、次のとおりです。
サンプル・テキスト・ファイルinvoice.txt
内のデータは、次のとおりです。
6335722^Company One^First Street 999 San Jose 95129USCA650-801-6250 ^Oracle^Bridge Parkway 1600 Redwood Shores 94065USCA650-506-7000 001|BPEL Process Manager Enterprise Edition|20000,2,+40000+ 002|BPEL Process Manager Standard Edition|10000,5,+50000+ 003|BPEL Process Manager Developer Edition|1000,20,+20000+#110000
図6-4に示すように、アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。図6-5に示すように、「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
「次へ」をクリックします。図6-26に示すように、「タイプの選択」ページが表示されます。
「複合タイプ(フィールドそのものがレコードで複数のデリミタ・タイプを持つ可能性があるレコードが含まれています)」を選択します。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。
図6-27に示すように、「参照」
をクリックしてinvoice.txt
ファイルを選択し、「ルート要素」フィールドにInvoiceと入力します。
「次へ」をクリックします。図6-28に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」が表示されます。
partner-type複合タイプの作成
invoice.txt
サンプルを使用して作成できるスキーマ構造は、次のとおりです。
Invoice
Buyer => partner-type
Seller => partner-type
Items => item-type
Invoice-total => double
ネイティブ・データの1行目は購入者の詳細で構成され、販売者の詳細、明細項目および明細項目の合計が続きます。購入者要素と販売者要素の両方が、次のように同じ複雑な構造を持っています。
最初の7文字はUIDです。
これには、「^
」で囲まれた購入者/販売者の名前が続きます。
この後には、行末まで住所が続きます。
「複合タイプの追加」アイコンをクリックします。図6-29
に示すように、「スキーマ・ツリー」でInvoice
の下に複合タイプ<new_complex_type>が作成されます。
「サンプル・ファイル」セクションの右ペインからサンプル・テキストの1行目を選択し、「<new_complex_type>」ノードにドラッグ・アンド・ドロップします。「複合タイプ詳細」ダイアログが表示されます。
図6-30
に示すように、「複合タイプ名」フィールドにpartner-typeと入力します。
図6-30 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ: 「複合タイプ詳細」ダイアログ
必要な位置でルーラーをクリックしてサンプル・テキスト領域のフィールドをマーク付けし、「フィールドの生成」ボタンをクリックします。定義したフィールドのデータのスタイルの解析が試行されます。
注意: 「固定長」または「混在」デリミタ・タイプ・オプションを選択した場合は、ルーラー・ベースのテキスト領域が表示されます。ルーラーを使用して、サンプル・テキスト内のフィールドを識別する必要があります。デリミタ付きデータの場合は、「デリミタ」フィールドで該当するデリミタを選択または入力します。 |
図6-31に示すように、「名前」フィールドにid、nameおよびaddressと入力します。
各フィールドの横にある鉛筆アイコンをクリックし、対応する「フィールド詳細の編集」ダイアログを表示します。このダイアログでフィールド・プロパティを編集できます。たとえば、「name」フィールドの横にある鉛筆アイコンをクリックします。図6-32に示すように、「フィールド詳細の編集」ダイアログが表示されます。
図6-32に示すように、次のフィールド・プロパティを編集します。
タイプ: サンプル・テキストのデータ型。「タイプ」リストで「String」を選択します。
スタイル: 複合タイプ要素のスタイルを表します。次の4つのオプションから選択できます。
固定長
surrounded
terminated
左囲み/右囲み
この例では、surroundedを選択します。
囲み: このオプションが表示されるのは、「スタイル」オプションでsurroundedを選択した場合です。この例では、「囲み」フィールドにカレット(^)を入力します。
このパネルに表示されるフィールド・プロパティは、スキーマに使用されているNXSD属性に対応しています。
「OK」をクリックします。選択したフィールド・プロパティを含んだ「複合タイプ詳細」ダイアログが表示されます。
id
およびaddress
名前フィールドのフィールド・プロパティを確認または編集します。
「複合タイプ詳細」ダイアログで「OK」をクリックします。図6-33に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
図6-33 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ: partner-type複合タイプ
address-type複合タイプの作成
address要素を、さらに固定長の番地、市区町村などを含んだ別のcomplex-typeとして定義できます。
「スキーマ・ツリー」に「<new_complex_type>」ノードをもう1つ作成します。「partner-type複合タイプの作成」のステップ1を参照してください。
サンプル・テキストの1行目のaddressパートを複合タイプ<new_complex_type>
にドラッグ・アンド・ドロップします。「複合タイプ詳細」ダイアログが表示されます。
「複合タイプ名」フィールドにaddress-typeと入力します。
ルーラーをクリックしてサンプル・テキスト領域のフィールドをマーク付けし、「フィールドの生成」ボタンをクリックします。次に、図6-34に示すように、「名前」フィールドにstreet1、street2、city、zip、country、stateおよびphoneと入力します。
図6-34 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ: 「複合タイプ詳細」ダイアログ
「OK」をクリックします。図6-35に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
partner-type複合タイプのaddressフィールドへのaddress-type複合タイプの割当て
partner-type複合タイプのaddressフィールドに、address-type複合タイプを割り当てる必要があります。次のいずれかの方法で要素に複合タイプを割り当てることができます。
address-typeノードをpartner-type複合タイプのaddressフィールド・ノードにドラッグ・アンド・ドロップします。これにより、addressフィールド要素にaddress-typeが即時に割り当てられます。
partner-type複合タイプのaddressフィールド・ノードを選択し、鉛筆アイコンをクリックします。
図6-36に示すように、「フィールド詳細の編集」ダイアログが表示されます。
「タイプ」リストで「address-type」オプションを選択し、「OK」をクリックします。図6-37に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページでaddressフィールド要素にaddress-typeオプションが割り当てられます。
buyerおよびsellerグローバル要素の作成
「Invoice」を選択し、「要素の追加」アイコンをクリックします。「スキーマ・ツリー」で、ルート要素「Invoice」
の下に要素<new_element>が作成されます。
名前をbuyerに変更します。
再び「Invoice」を選択し、「要素の追加」アイコンをクリックします。「スキーマ・ツリー」で、「Invoice」
の下に要素<new_element>が作成されます。
名前をsellerに変更します。
次に、各buyerおよびsellerノード上にpartner-typeノードをドラッグ・アンド・ドロップして、これらのノードにpartner-type複合タイプを割り当てます。図6-38に示すように、「スキーマ・ツリー」が表示されます。
item-type複合タイプとitemsおよびinvoice-total要素ノードの作成
items要素はitem-typeの配列とみなすことができます。ネイティブ・ファイル内の最後の明細項目では、番号記号(#
)の後に明細項目の合計が続いて終了しています。
「Invoice」を選択し、「要素の追加」アイコンをクリックします。「スキーマ・ツリー」で、「Invoice」
の下に要素<new_element>が作成されます。
名前をitemsに変更します。
図6-39に示すように、item-type複合タイプを作成してフィールド・プロパティを定義します。
item-type複合タイプをitems要素にドラッグ・アンド・ドロップして、この要素にitem-typeを割り当てます。
items - item-typeを選択して鉛筆アイコンをクリックします。「要素の詳細」ダイアログが表示されます。
図6-40に示すように、「要素の詳細」ダイアログで次のプロパティを設定します。
「最大発生数」を「バインドなし」に設定します。
「配列」を選択します。「セル・セパレータ」および「配列セパレータ」が有効になります。
「セル・セパレータ」を「${eol}」に設定します。
「配列セパレータ」を「#」に設定します。
注意: 要素items はitem-type の配列として定義されます。 |
「OK」をクリックします。
invoice-total要素を作成し、サンプル・テキスト(110000)を<new_element>ノードにドラッグ・アンド・ドロップします。「要素の詳細」ダイアログが表示されます。
「要素名」フィールドにinvoice-totalと入力し、「フィールドの生成」をクリックします。図6-41に示すように、「アラート」メッセージが表示されます。
グローバル要素のサンプル・データで単一フィールドが識別されている場合、このデータのプロパティがグローバル要素自体に適用されます。
「アラート」メッセージで「OK」をクリックします。「要素の詳細」ダイアログが表示されます。
「データ型」リストで「double」を選択し、「OK」をクリックします。図6-42に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
図6-42 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ: 完成したスキーマ・ツリー
「次へ」をクリックします。図6-43に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示され、ネイティブ・フォーマット・ファイルが表示されます。
図6-43 「ネイティブ・フォーマット・ビルダー・ウィザード - 生成されたネイティブ・フォーマット・ファイル」ページ
前述のネイティブ・データに対応するネイティブ・スキーマの定義は、次のように定義できます。
<schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/ias/pcbpel/fatransschema/demo" xmlns:tns="http://xmlns.oracle.com/ias/pcbpel/fatransschema/demo" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" nxsd:version="NXSD" nxsd:stream="chars"> <element name="invoice" type="tns:invoiceType" /> <complexType name="invoiceType"> <sequence> <element name="purchaser" type="tns:partnerType" /> <element name="seller" type="tns:partnerType" /> <element name="line-item" type="tns:line-itemType" maxOccurs="unbounded" nxsd:style="array" nxsd:cellSeparatedBy="${eol}" nxsd:arrayTerminatedBy="#"/> <element name="total" type="double" nxsd:style="terminated" nxsd:terminatedBy="${eol}"/> </sequence> </complexType> <complexType name="partnerType"> <sequence> <element name="uid" type="string" nxsd:style="fixedLength" nxsd:length="7" nxsd:padStyle="tail" nxsd:paddedBy=" "/> <element name="name" type="string" nxsd:style="surrounded" nxsd:surroundedBy="^"/> <element name="address" type="tns:addressType" /> </sequence> </complexType> <complexType name="addressType"> <sequence> <element name="street1" type="string" nxsd:style="fixedLength" nxsd:length="15" nxsd:padStyle="tail" nxsd:paddedBy=" "/> <element name="street2" type="string" nxsd:style="fixedLength" nxsd:length="10" nxsd:padStyle="tail" nxsd:paddedBy=" "/> <element name="city" type="string" nxsd:style="fixedLength" nxsd:length="15" nxsd:padStyle="tail" nxsd:paddedBy=" "/> <element name="postal-code" type="string" nxsd:style="fixedLength" nxsd:length="5" nxsd:padStyle="none"/> <element name="country" type="string" nxsd:style="fixedLength" nxsd:length="2" nxsd:padStyle="none"/> <element name="state" type="string" nxsd:style="fixedLength" nxsd:length="2" nxsd:padStyle="none"/> <element name="phone" type="string" nxsd:style="terminated" nxsd:terminatedBy="${eol}"/> </sequence> </complexType> <complexType name="line-itemType"> <sequence> <element name="uid" type="string" nxsd:style="fixedLength" nxsd:length="3" nxsd:padStyle="none"/> <element name="description" type="string" nxsd:style="surrounded" nxsd:surroundedBy="|"/> <element name="price" type="double" nxsd:style="terminated" nxsd:terminatedBy=","/> <element name="quantity" type="integer" nxsd:style="terminated" nxsd:terminatedBy=","/> <element name="line-total" type="double" nxsd:style="surrounded" nxsd:surroundedBy="+"/> </sequence> </complexType> </schema>
「テスト」をクリックします。図6-44に示すように、「NXSDスキーマのテスト」ダイアログが表示されます。
「XMLの生成」アイコンをクリックします。図6-45に示すように、「NXSDスキーマのテスト」ダイアログの右ペインに「結果XML」が表示されます。
変換されたXMLは次のようになります。
<invoice xmlns="http://xmlns.oracle.com/pcbpel/demoSchema/invoice-nxsd"> <purchaser> <uid>6335722</uid> <name>Company One</name> <address> <street1>First Street</street1> <street2>999</street2> <city>San Jose</city> <postal-code>95129</postal-code> <country>US</country> <state>CA</state> <phone>650-801-6250</phone> </address> </purchaser> <seller> <uid/> <name>Oracle</name> <address> <street1>Bridge Parkway</street1> <street2>1600</street2> <city>Redwood Shores</city> <postal-code>94065</postal-code> <country>US</country> <state>CA</state> <phone>650-506-7000</phone> </address> </seller> <line-item> <uid>001</uid> <description>BPEL Process Manager Enterprise Edition</description> <price>20000</price> <quantity>2</quantity> <line-total>40000</line-total> </line-item> <line-item> <uid>002</uid> <description>BPEL Process Manager Standard Edition</description> <price>10000</price> <quantity>5</quantity> <line-total>50000</line-total> </line-item> <line-item> <uid>003</uid> <description>BPEL Process Manager Developer Edition</description> <price>1000</price> <quantity>20</quantity> <line-total>20000</line-total> </line-item> <total>110000</total> </invoice>
「OK」をクリックします。図6-43に示すように、「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
「次へ」をクリックします。図6-15に示すように、「ネイティブ・フォーマット・ビルダー: 終了」ページが表示されます。
「終了」をクリックします。図6-16に示すように、生成されたNXSDを含んだアダプタ構成ウィザードの「メッセージ」ページが表示されます。
ネイティブ・データがXMLでありそのXMLにネームスペースがない場合は、ネイティブ・フォーマット・トランスレータを使用してインバウンドXMLドキュメントにネームスペースを追加したりアウトバウンドXMLドキュメントからネームスペースを削除したりできます。
次のいずれかに該当する場合、XMLにはネームスペースがありません。
XMLに対応するXMLスキーマがあり、そのXMLスキーマにターゲット・ネームスペースが指定されていない場合。
XMLに対応するDTDがあり、それがXMLスキーマに変換されたDTDである場合。
どちらの場合も、targetNamespace
が指定されたラッパー・スキーマを作成し、そのラッパー・スキーマに実際のスキーマを含める必要があります。また、ラッパー・スキーマにはDTDに設定されたnxsd:version
属性も必要です。例:
--wrapper.xsd <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="myNamespace" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" nxsd:version="DTD"> <include schemaLocation="actual.xsd"/> </schema>
注意: 実際のスキーマにelementFormDefault="qualified" が指定されていることを確認してください。 |
元の.xsd
ファイルのかわりにこのwrapper.xsd
ファイルを使用すると、インバウンドXMLにmyNamespace
ネームスペースが追加され、アウトバウンドXMLからmyNamespace
ネームスペースが削除されます。
この使用例では、ネイティブ・フォーマット・ビルダーにより、order、customer、itemsなどの複数のレコード・タイプを含んだorder.txtという複合タイプのファイルが使用されます。この使用例を使用すると、NXSDを生成してテストすることもできます。この使用例を実行する手順は、次のとおりです。
サンプル・テキスト・ファイルorder.txt内のデータは、次のとおりです。
Order, ID41678, 20May2000 Item1, GigaWidget, 60, $75 Item2, MegaBucket, 48, $125 Cust1, Hopkins Associates, ID26490 Order, ID41680, 20May2000 Item3, Rt.Clopper, 40, $100 Item4, Lt.Clopper, 50, $100 Cust2, Jersey WebInovaters, ID46786
order、customerおよびitemのネイティブ・データごとに1行をドラッグして、次の複合タイプを作成します。
OrderType
ItemType
CustomerType
複合タイプの作成の詳細は、第6.4.3項「複雑なファイル構造のスキーマの定義」を参照してください。
図6-46に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
「選択ノードの追加」をクリックします。「選択オプション・タイプ」ダイアログが表示されます。
「選択オプション・タイプ」ダイアログで、図6-47に示すようにオプションを設定して「OK」をクリックします。
「choice」を選択し、「要素の追加」アイコンをクリックします。choiceノードに「<new_element>」が追加されます。
新規に追加した要素の名前をOrderChoiceに変更し、「OrderType」複合タイプ要素を「OrderChoice」にドラッグ・アンド・ドロップします。
「OrderChoice - string」を選択して「ノードの編集」アイコンをクリックします。「要素の詳細」ダイアログが表示されます。
図6-48
に示すように、「選択値」フィールドにOrderと入力して「OK」をクリックします。
注意: 「長さ」フィールドの値が4に設定されているため、「選択値」フィールドでは4文字を指定する必要があります。 |
ステップ5から8に従って、ItemTypeデータ型のItemChoice選択複合タイプとCustomerTypeデータ型のCustomerChoice選択複合タイプを作成します。図6-49に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ダイアログが表示されます。
「次へ」をクリックします。図6-50に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示され、ネイティブ・フォーマット・ファイルが表示されます。
ネイティブ・スキーマ
前述のネイティブ・データに対応するネイティブ・スキーマの定義は、次のように定義できます。
<?xml version="1.0" encoding="UTF-8" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" xmlns:tns="http://TargetNamespace.com/test" targetNamespace="http://TargetNamespace.com/test" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:version="NXSD" nxsd:stream="chars" nxsd:encoding="ASCII" > <xsd:element name="Root-Element"> <xsd:complexType> <xsd:choice minOccurs="1" maxOccurs="unbounded" nxsd:choiceCondition="fixedLength" nxsd:length="4"> <xsd:element name="OrderChoice" type="tns:OrderType" nxsd:conditionValue="Orde" /> <xsd:element name="ItemChoice" type="tns:ItemType" nxsd:conditionValue="Item" /> <xsd:element name="CustomerChoice" type="tns:customerType" nxsd:conditionValue="Cust" /> </xsd:choice> </xsd:complexType> </xsd:element> <xsd:complexType name="customerType"> <xsd:sequence> <xsd:element name="C1" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," /> <xsd:element name="C2" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," /> <xsd:element name="C3" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="ItemType"> <xsd:sequence> <xsd:element name="C1" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," /> <xsd:element name="C2" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," /> <xsd:element name="C3" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," /> <xsd:element name="C4" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="OrderType"> <xsd:sequence> <xsd:element name="C1" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," /> <xsd:element name="C2" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," /> <xsd:element name="C3" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> </xsd:sequence> </xsd:complexType> </xsd:schema>
「テスト」をクリックします。「NXSDスキーマのテスト」ダイアログが表示されます。
「XMLの生成」アイコンをクリックします。図6-51に示すように、「NXSDスキーマのテスト」ダイアログの右ペインに「結果XML」が表示されます。
ネイティブ・スキーマを使用して変換したXML
変換されたXMLは次のようになります。
<?xml version = '1.0' encoding = 'UTF-8'?> <Root-Element xmlns="http://TargetNamespace.com/test"> <OrderChoice> <C1>r</C1> <C2> ID41678</C2> <C3> 20May2000</C3> </OrderChoice> <ItemChoice> <C1>1</C1> <C2> GigaWidget</C2> <C3> 60</C3> <C4> $75</C4> </ItemChoice> <ItemChoice> <C1>2</C1> <C2> MegaBucket</C2> <C3> 48</C3> <C4> $125</C4> </ItemChoice> <CustomerChoice> <C1>1</C1> <C2> Hopkins Associates</C2> <C3> ID26490</C3> </CustomerChoice> <OrderChoice> <C1>r</C1> <C2> ID41680</C2> <C3> 20May2000</C3> </OrderChoice> <ItemChoice> <C1>3</C1> <C2> Rt.Clopper</C2> <C3> 40</C3> <C4> $100</C4> </ItemChoice> <ItemChoice> <C1>4</C1> <C2> Lt.Clopper</C2> <C3> 50</C3> <C4> $100</C4> </ItemChoice> <CustomerChoice> <C1>2</C1> <C2> Jersey WebInovaters</C2> <C3> ID46786</C3> </CustomerChoice> </Root-Element>
「OK」をクリックします。「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「終了」ページが表示されます。
この使用例では、ネイティブ・フォーマット・ビルダーにより、異なるaddressを持つ複数のレコードを含んだaddress.txt
という複合タイプのファイルが使用されます。この使用例では2つのレコード・タイプを持つスキーマを作成します。RecOneレコードはテキスト「YES」で終わるレコードのデータを取得し、RecTwoレコードはテキスト「NO」で終わるレコードのデータを取得します。
この使用例を使用すると、NXSDを生成してテストすることもできます。この使用例を実行する手順は、次のとおりです。
サンプル・テキスト・ファイルaddress.txt内のデータは、次のとおりです。
Name1,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", YES Name2,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", NO Name3,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", NO Name4,"2 Old Street, Old Town,Manchester",20-08-1954,"0161-499-1718", YES
アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
「次へ」をクリックします。「タイプの選択」ページが表示されます。
「複合タイプ」を選択して「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。
「参照」をクリックしてaddress.txtファイルを選択し、「ルート要素」フィールドにAddressと入力します。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
「複合タイプの追加」アイコンをクリックします。「スキーマ・ツリー」で、「Address」の下に複合タイプ<new_complex_type>が作成されます。
「サンプル・ファイル」セクションの右ペインからサンプル・テキストの1行目を選択し、「<new_complex_type>」ノードにドラッグ・アンド・ドロップします。「複合タイプ詳細」ダイアログが表示されます。
「複合タイプ名」フィールドにRECORD1
と入力し、「デリミタ」リストで「カンマ(,)」を選択します。
「OK」をクリックします。図6-52に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
同様に、RECORD2という別の複合タイプ・ノードを作成します。図6-53に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
「選択ノードの追加」をクリックします。「選択オプション・タイプ」ダイアログが表示されます。
「選択オプション・タイプ」ダイアログで、図6-54に示すようにオプションを設定して「OK」をクリックします。
「choice」を選択し、「要素の追加」アイコンをクリックします。choiceノードに「<new_element>」が追加されます。
「ノードの編集」アイコンをクリックします。「要素の詳細」ダイアログが表示されます。
「要素名」フィールドにRECONE
と入力し、データ型として「RECORD1」を選択し、選択条件として「YES」を設定し、「OK」をクリックします。
ステップ14から16に従って、choiceノードのRECTWO
選択要素を作成し、選択条件として「NO 」を設定します。
注意: 合計文字数を3文字にする必要があるため、文字「NO」の後に空白を1個挿入しています。 |
図6-55に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ダイアログが表示されます。
RECORD1複合タイプをchoiceの下のRECONE要素にドラッグ・アンド・ドロップし、RECORD2複合タイプをchoiceの下のRECTWO要素にドラッグ・アンド・ドロップします。ネイティブ・フォーマット・ビルダーの「設計スキーマ」ダイアログが表示されます。
「次へ」をクリックします。図6-56に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示され、ネイティブ・フォーマット・ファイルが表示されます。
ネイティブ・スキーマ
前述のネイティブ・データに対応するネイティブ・スキーマの定義は、次のように定義できます。
<?xml version="1.0" encoding="UTF-8" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" xmlns:tns="http://TargetNamespace.com/tesNew" targetNamespace="http://TargetNamespace.com/tesNew" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:version="NXSD" nxsd:stream="chars" nxsd:encoding="ASCII" > <xsd:element name="Root-Element"> <xsd:complexType> <xsd:choice minOccurs="1" maxOccurs="unbounded" nxsd:choiceCondition="${X}" nxsd:lookAhead="70" nxsd:scanLength="3" nxsd:assignTo="${X}"> <xsd:element name="RECTWO" type="tns:RECORD2" nxsd:conditionValue="NO " /> <xsd:element name="RECONE" type="tns:RECORD1" nxsd:conditionValue="YES" /> </xsd:choice> </xsd:complexType> </xsd:element> <xsd:complexType name="RECORD2"> <xsd:sequence> <xsd:element name="C1" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," /> <xsd:element name="C2" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," /> <xsd:element name="C3" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," /> <xsd:element name="C4" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," /> <xsd:element name="C5" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="RECORD1"> <xsd:sequence> <xsd:element name="C1" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," /> <xsd:element name="C2" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," /> <xsd:element name="C3" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," /> <xsd:element name="C4" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="," /> <xsd:element name="C5" type="xsd:string" nxsd:style="terminated" nxsd:terminatedBy="${eol}" /> </xsd:sequence> </xsd:complexType> </xsd:schema>
「テスト」をクリックします。「NXSDスキーマのテスト」ダイアログが表示されます。
「XMLの生成」アイコンをクリックします。図6-57に示すように、「NXSDスキーマのテスト」ダイアログの右ペインに「結果XML」が表示されます。
ネイティブ・スキーマを使用して変換したXML
変換されたXMLは次のようになります。
<?xml version = '1.0' encoding = 'UTF-8'?> <Root-Element xmlns="http://TargetNamespace.com/tesNew"> <RECONE> <C1>Name1</C1> <C2>2 Old Street, Old Town,Manchester</C2> <C3>20-08-1954</C3> <C4>0161-499-1718</C4> <C5> YES</C5> </RECONE> <RECTWO> <C1>Name2</C1> <C2>2 Old Street, Old Town,Manchester</C2> <C3>20-08-1954</C3> <C4>0161-499-1718</C4> <C5> NO </C5> </RECTWO> <RECTWO> <C1>Name3</C1> <C2>2 Old Street, Old Town,Manchester</C2> <C3>20-08-1954</C3> <C4>0161-499-1718</C4> <C5> NO </C5> </RECTWO> <RECONE> <C1>Name4</C1> <C2>2 Old Street, Old Town,Manchester</C2> <C3>20-08-1954</C3> <C4>0161-499-1718</C4> <C5> YES</C5> </RECONE> </Root-Element>
注意: RECONEおよびRECTWOという2つのレコード・タイプがあります。RECONEは文字YESで終わるレコードを取得し、RECTWOは文字NOで終わるレコードを取得します。 |
「OK」をクリックします。「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「終了」ページが表示されます。
この使用例では、ネイティブ・フォーマット・ビルダーにより、項目の配列を含んだarray.txtという複合タイプのファイルが使用されます。サンプル・データには、4つの名前をセミコロンで区切って末尾にピリオド1個を付けたものが含まれています。この使用例では、メンバー名がセミコロンで区切られて配列がピリオド1個で終了する配列タイプを使用したスキーマを作成します。この使用例を使用すると、NXSDを生成してテストすることもできます。
この使用例を実行する手順は、次のとおりです。
サンプル・テキスト・ファイルarray.txt内のデータは、次のとおりです。
John;Steve;Paul;Todd.
アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
「次へ」をクリックします。「タイプの選択」ページが表示されます。
「複合タイプ」を選択して「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。
図6-58に示すように、「参照」をクリックしてarray.txtファイルを選択します。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
NewArrayというグローバル要素を作成し、このグローバル要素にネイティブ・データをドラッグ・アンド・ドロップします。
図6-59に示すように、「NewArray」を選択して「ノードの編集」アイコンをクリックします。「要素の詳細」ダイアログが表示されます。
「要素の詳細」ダイアログで、図6-60に示すようにオプションを設定して「OK」をクリックします。
ネイティブ・フォーマット・ビルダーの「設計スキーマ」ダイアログが表示されます。
「次へ」をクリックします。図6-61に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示され、ネイティブ・フォーマット・ファイルが表示されます。
ネイティブ・スキーマ
前述のネイティブ・データに対応するネイティブ・スキーマの定義は、次のように定義できます。
<?xml version="1.0" encoding="UTF-8" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" xmlns:tns="http://TargetNamespace.com/testnewArray" targetNamespace="http://TargetNamespace.com/testnewArray" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:version="NXSD" nxsd:stream="chars" nxsd:encoding="ASCII" > <xsd:element name="Root-Element"> <xsd:complexType> <xsd:sequence> <xsd:element name="NewArray" type="xsd:string" maxOccurs="unbounded" nxsd:style="array" nxsd:cellSeparatedBy=";" nxsd:arrayTerminatedBy="." /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
「テスト」をクリックします。「NXSDスキーマのテスト」ダイアログが表示されます。
「XMLの生成」アイコンをクリックします。図6-62に示すように、「NXSDスキーマのテスト」ダイアログの右ペインに「結果XML」が表示されます。
ネイティブ・スキーマを使用して変換したXML
変換されたXMLは次のようになります。
<?xml version = '1.0' encoding = 'UTF-8'?> <Root-Element xmlns="http://TargetNamespace.com/testnewArray"> <NewArray>John</NewArray> <NewArray>Steve</NewArray> <NewArray>Paul</NewArray> <NewArray>Todd</NewArray> </Root-Element>
「OK」をクリックします。「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「終了」ページが表示されます。
この使用例では、DTDファイルというネイティブ・データ・タイプのスキーマを定義する手順を説明します。
このネイティブ・ファイルのXMLスキーマを作成する際には、ネイティブ・フォーマット・ビルダー・ウィザードの「XSDに変換するDTD」オプションを使用します。
この使用例では、ネイティブ・フォーマット・ビルダーにより、DTDファイル・タイプ*.dtd
が使用されます。対応するNXSDを生成し、同様にテストできます。この使用例を実行する手順は、次のとおりです。
任意のDTDファイルを使用します。
図6-4に示すように、アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。図6-5に示すように、「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
「次へ」をクリックします。図6-26に示すように、「タイプの選択」ページが表示されます。
「XSDに変換するDTD」を選択します。図6-63に示すように、「タイプの選択」ページが表示されます。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「DTDの説明」ページが表示されます。
図6-64に示すように、「参照」
をクリックしてdb.dtdファイルを選択し、「ルート要素」リストから「DatabaseInventory」を選択します。
「次へ」をクリックします。図6-65に示すように、「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
図6-65 「ネイティブ・フォーマット・ビルダー・ウィザード - フィールド・プロパティ」ページ
生成されたサンプル・ネイティブ・スキーマを次に示します。
<?xml version="1.0" encoding="UTF-8" ?> <!--This Schema has been generated from a DTD. A target namespace has been added to the schema.--> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://TargetNamespace.com/ReadUI" xmlns="http://TargetNamespace.com/ReadUI" nxsd:version="DTD" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"> <xs:element name="GlobalDatabaseName" type="xs:string"/> <xs:element name="DatabaseAttributes"> <xs:complexType> <xs:attribute name="Type" use="required"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="Production"/> <xs:enumeration value="Development"/> <xs:enumeration value="Testing"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="Version" use="optional" default="9i"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="7"/> <xs:enumeration value="8"/> <xs:enumeration value="8i"/> <xs:enumeration value="9i"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> </xs:element> <xs:element name="Comments" type="xs:string"/> <xs:element name="Administrator"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="EmailAlias" use="required" type="xs:string"/> <xs:attribute name="Extension" use="optional" type="xs:string"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="OracleSID" type="xs:string"/> <xs:element name="DatabaseName"> <xs:complexType> <xs:sequence> <xs:element ref="GlobalDatabaseName"/> <xs:element ref="OracleSID"/> <xs:element ref="DatabaseDomain"/> <xs:element maxOccurs="unbounded" ref="Administrator"/> <xs:element ref="DatabaseAttributes"/> <xs:element ref="Comments"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="DatabaseDomain" type="xs:string"/> <xs:element name="DatabaseInventory"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" ref="DatabaseName"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「終了」ページが表示されます。
「終了」をクリックします。生成されたNXSDを含んだアダプタ構成ウィザードの「メッセージ」ページが表示されます。
この使用例は、変換用のネイティブ・スキーマ・ファイルを作成するために、Oracleファイル/FTPアダプタが(ネイティブ・フォーマット・ビルダー・ウィザードを使用して)COBOLコピーブック・フォーマットのファイルをどのように処理するかを示しています。
次のCOBOLコピーブックの例も提供されています。
COBOLコピーブックには、複数のルート・レベルを含めることができます。すべてのルート・レベルが01
のレベルの場合、各グループは暗黙的に他のグループを再定義します。
この使用例では、ネイティブ・フォーマット・ビルダーにより、購入者名、住所および項目などの注文書詳細を含んだpo-ccb.cpy
という固定長ファイル・タイプが使用されます。このpo-ccb.cpy
ネイティブ・ファイル内の要素は、すべて固定長です。サンプル・テキスト・ファイルpo-ccb.cpy
内のデータは、次のとおりです。
05 PO-RECORD. 10 PO-BUYER. 15 PO-UID PIC 9(7). 15 PO-NAME PIC X(15). 15 PO-ADDRESS. 20 PO-STREET PIC X(15). 20 PO-CITY PIC X(10). 20 PO-ZIP PIC 9(5). 20 PO-STATE PIC X(2). 10 PO-ITEM. 15 POITEM OCCURS 3 TIMES. 20 PO-LINE-ITEM. 25 PO-ITEM-ID PIC 9(3). 25 PO-ITEM-NAME PIC X(40). 25 PO-ITEM-QUANTITY PIC 9(2). 25 PO-ITEM-PRICE PIC 9(5)V9(2). 10 PO-TOTALPIC 9(7)V9(2).
対応するNXSDを生成し、同様にテストできます。この使用例を実行する手順は、次のとおりです。
Adapters-105CobolCopyBook
サンプルに含まれているartifacts.zip
ファイルから次のファイルを取得します。
artifacts/samples/po-ccb.cpy
artifacts/samples/po-ebcdic.data
Adapters-105CobolCopyBook
サンプルを入手するには、Oracle SOA Sample Codeサイトにアクセスします。
これらのファイルをサンプル・ディレクトリにコピーします。
図6-4に示すように、アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。図6-5に示すように、「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
「次へ」をクリックします。図6-26に示すように、「タイプの選択」ページが表示されます。
「ネイティブ・フォーマットに変換するCOBOLコピーブック」を選択します。図6-66に示すように、「タイプの選択」ページが表示されます。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「COBOLコピーブックの説明」ページが表示されます。
図6-67に示すように、「参照」
をクリックしてpo-ccb.cpyファイルを選択します。
「Root-Element」
フィールドにPurchaseOrderと入力して「次へ」をクリックします。図6-68に示すように、「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
図6-68 「ネイティブ・フォーマット・ビルダー・ウィザード - 生成されたネイティブ・フォーマット・ファイル」ページ
最上位のペイロード・レコードは、choiceモデル・グループに囲まれています。各ペイロード・レコードには、実行時のデータ・ファイルの処理中におけるレコード・タイプの識別に役立つnxsd:lookAhead
およびnxsd:lookFor
の2つの属性もあります。そのため、これらの属性に値を追加する必要があります。たとえば、PAYROLL-F-TRANS-CODEフィールドの値がFRのときに、PAYROLL-F-RECORDが発生するとします。その後、レコード要素は次のようになります。
<xsd:element name="PAYROLL-F-RECORD" nxsd:lookAhead="10" nxsd:lookFor="FR">
値10はlookaheadフィールドの位置を示します。次のCOBOLコピーブックでは、05レベルに複数のルート要素があります。
05 ORG-NUM PIC 99. 05 EMP-RECORD. 10 EMP-SSN PIC 9(4)V(6). 10 EMP-WZT PIC 9(6).
ネイティブ・スキーマ
<?xml version="1.0" encoding="UTF-8" ?> <!--Native format was generated from COBOL copybook : C:\Documents and Settings\vdinesh\Desktop\sample_files\po-ccb.cpy--> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" xmlns:extn="http://xmlns.oracle.com/pcbpel/nxsd/extensions" targetNamespace="http://TargetNamespace.com/Read" xmlns:tns="http://TargetNamespace.com/Read" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:version="NXSD" nxsd:encoding="cp037" nxsd:byteOrder="bigEndian" nxsd:stream="chars"> <xsd:element name="PurchaseOrder"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 05 PO-RECORD--> <xsd:element name="PO-RECORD" minOccurs="1" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 10 PO-BUYER--> <xsd:element name="PO-BUYER"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 15 PO-UID PIC 9(7)--> <xsd:element name="PO-UID" type="xsd:long" nxsd:style="fixedLength" nxsd:padStyle="head" nxsd:paddedBy="0" nxsd:length="7"/> <!--COBOL declaration : 15 PO-NAME PIC X(15)--> <xsd:element name="PO-NAME" type="xsd:string" nxsd:style="fixedLength" nxsd:padStyle="tail" nxsd:paddedBy=" " nxsd:length="15"/> <!--COBOL declaration : 15 PO-ADDRESS--> <xsd:element name="PO-ADDRESS"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 20 PO-STREET PIC X(15)--> <xsd:element name="PO-STREET" type="xsd:string" nxsd:style="fixedLength" nxsd:padStyle="tail" nxsd:paddedBy=" " nxsd:length="15"/> <!--COBOL declaration : 20 PO-CITY PIC X(10)--> <xsd:element name="PO-CITY" type="xsd:string" nxsd:style="fixedLength" nxsd:padStyle="tail" nxsd:paddedBy=" " nxsd:length="10"/> <!--COBOL declaration : 20 PO-ZIP PIC 9(5)--> <xsd:element name="PO-ZIP" type="xsd:long" nxsd:style="fixedLength" nxsd:padStyle="head" nxsd:paddedBy="0" nxsd:length="5"/> <!--COBOL declaration : 20 PO-STATE PIC X(2)--> <xsd:element name="PO-STATE" type="xsd:string" nxsd:style="fixedLength" nxsd:padStyle="tail" nxsd:paddedBy=" " nxsd:length="2"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <!--COBOL declaration : 10 PO-ITEM--> <xsd:element name="PO-ITEM"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 15 POITEM OCCURS 3 TIMES--> <xsd:element name="POITEM" minOccurs="3" maxOccurs="3"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 20 PO-LINE-ITEM--> <xsd:element name="PO-LINE-ITEM"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 25 PO-ITEM-ID PIC 9(3)--> <xsd:element name="PO-ITEM-ID" type="xsd:long" nxsd:style="fixedLength" nxsd:padStyle="head" nxsd:paddedBy="0" nxsd:length="3"/> <!--COBOL declaration : 25 PO-ITEM-NAME PIC X(40)--> <xsd:element name="PO-ITEM-NAME" type="xsd:string" nxsd:style="fixedLength" nxsd:padStyle="tail" nxsd:paddedBy=" " nxsd:length="40"/> <!--COBOL declaration : 25 PO-ITEM-QUANTITY PIC 9(2)--> <xsd:element name="PO-ITEM-QUANTITY" type="xsd:long" nxsd:style="fixedLength" nxsd:padStyle="head" nxsd:paddedBy="0" nxsd:length="2"/> <!--COBOL declaration : 25 PO-ITEM-PRICE PIC 9(5)V9(2)--> <xsd:element name="PO-ITEM-PRICE" type="xsd:decimal" nxsd:style="virtualDecimal" extn:assumeDecimal="5" extn:picSize="7"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <!--COBOL declaration : 10 PO-TOTAL PIC 9(7)V9(2)--> <xsd:element name="PO-TOTAL" type="xsd:decimal" nxsd:style="virtualDecimal" extn:assumeDecimal="7" extn:picSize="9"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
「テスト」をクリックします。「NXSDスキーマのテスト」ダイアログが表示されます。
「参照」をクリックし、「ファイル名」
フィールドでpo-ebcdic.dataファイルを選択します。図6-69に示すように、「NXSDスキーマのテスト」ダイアログが表示されます。
「XMLの生成」アイコンをクリックします。図6-70に示すように、「NXSDスキーマのテスト」ダイアログの右ペインに「結果XML」が表示されます。
対応するネイティブ・スキーマ・フォーマットを使用したネイティブ・データは、次のXMLに変換されます。
<?xml version = '1.0' encoding = 'UTF-8'?> <PurchaseOrder xmlns="http://TargetNamespace.com/Read"> <PO-RECORD> <PO-BUYER> <PO-UID>6335722</PO-UID> <PO-NAME>Company One</PO-NAME> <PO-ADDRESS> <PO-STREET>First Street</PO-STREET> <PO-CITY>San Jose</PO-CITY> <PO-ZIP>95129</PO-ZIP> <PO-STATE>CA</PO-STATE> </PO-ADDRESS> </PO-BUYER> <PO-ITEM> <POITEM> <PO-LINE-ITEM> <PO-ITEM-ID>1</PO-ITEM-ID> <PO-ITEM-NAME>BPEL Process Manager Enterprise Edition</PO-ITEM-NAME> <PO-ITEM-QUANTITY>2</PO-ITEM-QUANTITY> <PO-ITEM-PRICE>40000.0</PO-ITEM-PRICE> </PO-LINE-ITEM> </POITEM> <POITEM> <PO-LINE-ITEM> <PO-ITEM-ID>2</PO-ITEM-ID> <PO-ITEM-NAME>BPEL Process Manager Standard Edition</PO-ITEM-NAME> <PO-ITEM-QUANTITY>5</PO-ITEM-QUANTITY> <PO-ITEM-PRICE>50000.0</PO-ITEM-PRICE> </PO-LINE-ITEM> </POITEM> <POITEM> <PO-LINE-ITEM> <PO-ITEM-ID>3</PO-ITEM-ID> <PO-ITEM-NAME>BPEL Process Manager Developer Edition</PO-ITEM-NAME> <PO-ITEM-QUANTITY>20</PO-ITEM-QUANTITY> <PO-ITEM-PRICE>20000.0</PO-ITEM-PRICE> </PO-LINE-ITEM> </POITEM> </PO-ITEM> <PO-TOTAL>730000.0</PO-TOTAL> </PO-RECORD> </PurchaseOrder>
この場合(01
レベル以外の場合)、バインドされていない一連のルート・レベル・アイテムが生成されます。
「OK」をクリックします。「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「終了」ページが表示されます。
「終了」をクリックします。生成されたNXSDを含んだアダプタ構成ウィザードの「メッセージ」ページが表示されます。
単一のルート・レベル、仮想小数点、固定長配列
次のCOBOLコピーブックには、単一のルート・レベル・アイテムPO-RECORD
があります。単一のルート・レベルの場合には、コンバータの動作は同じであるためレベル番号は問題ではありません。このCOBOLコピーブックでは、仮想小数点として宣言されたフィールド(PO-ITEM-PRICE
)の例も示しています。
05 PO-RECORD. 10 PO-BUYER. 15 PO-UID PIC 9(7). 15 PO-NAME PIC X(15). 15 PO-ADDRESS. 20 PO-STREET PIC X(15). 20 PO-CITY PIC X(10). 20 PO-ZIP PIC 9(5). 20 PO-STATE PIC X(2). 10 PO-ITEM. 15 POITEM OCCURS 3 TIMES. 20 PO-LINE-ITEM. 25 PO-ITEM-ID PIC 9(3). 25 PO-ITEM-NAME PIC X(40). 25 PO-ITEM-QUANTITY PIC 9(2). 25 PO-ITEM-PRICE PIC 9(5)V9(2). 10 PO-TOTAL PIC 9(7)V9(2).
生成されるスキーマは次のようになります。
<?xml version="1.0" encoding="UTF-8" ?> <!--Native format was generated from COBOL copybook : D:\work\ jDevProjects\CCB\Copybooks\po-ccb.cpy--> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" xmlns:extn="http://xmlns.oracle.com/pcbpel/nxsd/extensions" targetNamespace="http://TargetNamespace.com/ccb/singleRoot" xmlns:tns="http://TargetNamespace.com/ccb/singleRoot" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:version="NXSD" nxsd:encoding="cp037" nxsd:byteOrder="bigEndian" nxsd:stream="chars"> <xsd:element name="Root-Element"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 05 PO-RECORD --> <xsd:element name="PO-RECORD" minOccurs="1" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 10 PO-BUYER--> <xsd:element name="PO-BUYER"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 15 PO-UID PIC 9(7)--> <xsd:element name="PO-UID" type="xsd:long" nxsd:style="fixedLength" nxsd:padStyle="head" nxsd:paddedBy="0" nxsd:length="7"/> <!--COBOL declaration : 15 PO-NAME PIC X(15)--> <xsd:element name="PO-NAME" type="xsd:string" nxsd:style="fixedLength" nxsd:padStyle="tail" nxsd:paddedBy=" " nxsd:length="15"/> <!--COBOL declaration : 15 PO-ADDRESS--> <xsd:element name="PO-ADDRESS"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 20 PO-STREET PIC X(15)--> <xsd:element name="PO-STREET" type="xsd:string" nxsd:style="fixedLength" nxsd:padStyle="tail" nxsd:paddedBy=" " nxsd:length="15"/> <!--COBOL declaration : 20 PO-CITY PIC X(10)--> <xsd:element name="PO-CITY" type="xsd:string" nxsd:style="fixedLength" nxsd:padStyle="tail" nxsd:paddedBy=" " nxsd:length="10"/> <!--COBOL declaration : 20 PO-ZIP PIC 9(5)--> <xsd:element name="PO-ZIP" type="xsd:long" nxsd:style="fixedLength" nxsd:padStyle="head" nxsd:paddedBy="0" nxsd:length="5"/> <!--COBOL declaration : 20 PO-STATE PIC X(2)--> <xsd:element name="PO-STATE" type="xsd:string" nxsd:style="fixedLength" nxsd:padStyle="tail" nxsd:paddedBy=" " nxsd:length="2"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <!--COBOL declaration : 10 PO-ITEM--> <xsd:element name="PO-ITEM"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 15 POITEM OCCURS 3 TIMES--> <xsd:element name="POITEM" minOccurs="3" maxOccurs="3"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 20 PO-LINE-ITEM--> <xsd:element name="PO-LINE-ITEM"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 25 PO-ITEM-ID PIC 9(3)--> <xsd:element name="PO-ITEM-ID" type="xsd:long" nxsd:style="fixedLength" nxsd:padStyle="head" nxsd:paddedBy="0" nxsd:length="3"/> <!--COBOL declaration : 25 PO-ITEM-NAME PIC X(40)--> <xsd:element name="PO-ITEM-NAME" type="xsd:string" nxsd:style="fixedLength" nxsd:padStyle="tail" nxsd:paddedBy=" " nxsd:length="40"/> <!--COBOL declaration : 25 PO-ITEM-QUANTITY PIC 9(2)--> <xsd:element name="PO-ITEM-QUANTITY" type="xsd:long" nxsd:style="fixedLength" nxsd:padStyle="head" nxsd:paddedBy="0" nxsd:length="2"/> <!--COBOL declaration : 25 PO-ITEM-PRICE PIC 9(5)V9(2)--> <xsd:element name="PO-ITEM-PRICE" type="xsd:decimal" nxsd:style="virtualDecimal" extn:assumeDecimal="5" extn:picSize="7"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <!--COBOL declaration : 10 PO-TOTAL PIC 9(7)V9(2)--> <xsd:element name="PO-TOTAL" type="xsd:decimal" nxsd:style="virtualDecimal" extn:assumeDecimal="7" extn:picSize=" "/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
可変長配列
05 EMP-RECORD . 10 EMP-NAME PIC X(30). 10 EMP-DIV-NUM PIC 9(5). 10 DIV-ENTRY OCCURS 1 TO 50 TIMES DEPENDING ON EMP-DIV-NUM. 20 DIV-CODE PIC X(30).
<?xml version="1.0" encoding="UTF-8" ?> <!--Native format was generated from COBOL copybook : D:\work\ jDevProjects\CCB\Copybooks\odo.cpy--> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" xmlns:extn="http://xmlns.oracle.com/pcbpel/nxsd/extensions" targetNamespace="http://TargetNamespace.com/ccb/varLengthArray" xmlns:tns="http://TargetNamespace.com/ccb/varLengthArray" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:version="NXSD" nxsd:encoding="cp037" nxsd:byteOrder="bigEndian" nxsd:stream="chars"> <xsd:element name="Root-Element"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration :05 EMP-RECORD --> <xsd:element name="EMP-RECORD" minOccurs="1" maxOccurs="unbounded"> <xsd:annotation> <xsd:appinfo> <nxsd:variables> <nxsd:variable name="DIV-ENTRY_var0"/> </nxsd:variables> </xsd:appinfo> </xsd:annotation> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 10 EMP-NAME PIC X(30)--> <xsd:element name="EMP-NAME" type="xsd:string" nxsd:style="fixedLength" nxsd:padStyle="tail" nxsd:paddedBy=" " nxsd:length="30"/> <!--COBOL declaration : 10 EMP-DIV-NUM PIC 9(5)--> <xsd:element name="EMP-DIV-NUM" type="xsd:long" nxsd:style="fixedLength" nxsd:padStyle="head" nxsd:paddedBy="0" nxsd:length="5"> <xsd:annotation> <xsd:appinfo> <nxsd:variables> <nxsd:assign name="DIV-ENTRY_var0" value="${0}"/> </nxsd:variables> </xsd:appinfo> </xsd:annotation> </xsd:element> <!--COBOL declaration : 10 DIV-ENTRY OCCURS 1 TO 50 TIMES DEPENDING ON EMP-DIV-NUM--> <xsd:element name="DIV-ENTRY" nxsd:style="array" nxsd:arrayLength="${DIV-ENTRY_var0}" minOccurs="1" maxOccurs="50"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 20 DIV-CODE PIC X(30)--> <xsd:element name="DIV-CODE" type="xsd:string" nxsd:style="fixedLength" nxsd:padStyle="tail" nxsd:paddedBy=" " nxsd:length="30"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
数値のタイプ
01 NUMERIC-FORMATS. 05 Salary PIC 9(5) COMP-3. 05 Rating PICTURE S9(5). 05 Age PIC 9(3) USAGE COMP. 05 Revenue PIC 9(3)V9(2). 05 Growth PIC S9(3) SIGN IS LEADING. 05 Computation COMP-1.
<?xml version="1.0" encoding="UTF-8" ?> <!--Native format was generated from COBOL copybook : D:\work\jDevProjects\CCB\Copybooks\numeric.cpy--> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" xmlns:extn="http://xmlns.oracle.com/pcbpel/nxsd/extensions" targetNamespace="http://TargetNamespace.com/ccb/numeric" xmlns:tns="http://TargetNamespace.com/ccb/numeric" elementFormDefault="qualified" attributeFormDefault="unqualified" nxsd:version="NXSD" nxsd:encoding="cp037" nxsd:byteOrder="bigEndian" nxsd:stream="bytes"> <xsd:element name="Numerics"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration :01 NUMERIC-FORMATS--> <xsd:element name="NUMERIC-FORMATS" minOccurs="1" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <!--COBOL declaration : 05 Salary PIC 9(5) COMP-3--> <xsd:element name="Salary" type="xsd:long" nxsd:style="comp3" extn:sign="unticked" extn:picSize="5"/> <!--COBOL declaration : 05 Rating PICTURE S9(5)--> <xsd:element name="Rating" type="xsd:string" nxsd:style="signZoned" extn:sign="ticked" extn:picSize="5" extn:signPosn="tailUpperNibble"/> <!--COBOL declaration : 05 Age PIC 9(3) USAGE COMP--> <xsd:element name="Age" type="xsd:long" nxsd:style="comp" extn:picSize="3" extn:sign="unticked"/> <!--COBOL declaration : 05 Revenue PIC 9(3)V9(2)--> <xsd:element name="Revenue" type="xsd:decimal" nxsd:style="virtualDecimal" extn:assumeDecimal="3" extn:picSize="5"/> <!--COBOL declaration : 05 Growth PIC S9(3) SIGN IS LEADING--> <xsd:element name="Growth" type="xsd:string" nxsd:style="signZoned" extn:sign="ticked" extn:picSize="3" extn:signPosn="headUpperNibble"/> <!--COBOL declaration : 05 Computation COMP-1--> <xsd:element name="Computation" type="xsd:float" nxsd:style="comp1" extn:sign="ticked"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
この場合、すべての数値のタイプはIBM COBOLフォーマットに応じて指定されたフォーマットに従います。異なるレイアウトを使用して異なるシステムで作成されたデータ・ファイルの場合は、生成されたスキーマを変更する必要があります。
nXSD注釈が正しいことや、生成されたXML/ネイティブ・データがビジネス・セマンティクスに準拠していることを確認するために、nXSDスキーマのテストが必要になる場合があります。現在この作業を行うには、インバウンドまたはアウトバウンド、あるいはその両方のファイル・アダプタ・パートナ・リンクを含んだBPELプロセスを記述し、適切なnXSDスキーマで構成した後、SOAサーバー上でそれらをテストする必要があります。この場合、作業に時間がかかり、エラーも起こりやすくなります。
単純なスタンドアロン・テスト・クライアントを使用することで、NXSDスキーマを検証できるようになります。テスト・ツールjarは、http://download.oracle.com/otndocs/test-translator.jar
からダウンロードできます。
テスト・クライアントを使用してNXSDスキーマを検証する前に、次のjarをクラスパスに追加します。これらのjar (test-translator.jar
を除く)は、SOAインストールに含まれています。テスト・クライアントを実行するには、Java 6を使用する必要があります。
bpm-infra.jar
これはnXSDランタイムjarで、次の場所にあります。
$SOA_HOME/soa/modules/oracle.soa.fabric_11.1.1
xmlparserv2.jar
これは解析用のOracle XDKライブラリで、次の場所にあります。
$FMW_HOME/oracle_common/modules/oracle.xdk_11.1.0
xml.jar
。これはスキーマ検証用のOracle XDKライブラリで、次の場所にあります。
$FMW_HOME/oracle_common/modules/oracle.xdk_11.1.0
mail.jar
。これはJavaメールAPIです。
test-translator.jar
jarrからjarに拡張子を変更する必要があります。
java xlator.util.Translate -help
を実行すると、次のように使用方法が表示されます。-help
オプションを指定することで、ツールのオプションおよびデフォルトのリストを表示できます。
次の例では、テスト・クライアントを実行してaddress-csv.txt
ファイルをaddress-csv.xmlに変換しています。
コマンドは次のとおりです。
java xlator.util.Translate -inbound -schema address-csv.xsd -root Root-Element -input address-csv.txt -output address-csv.xml
テスト・クライアントを実行してaddress-csv.xml
をaddress-csv.txt
に変換する例は、次のとおりです。
java xlator.util.Translate -outbound -schema address-csv.xsd -root Root-Element -input address-csv.xml -output address-csv.txt
次のテスト・クライアントの実行例では、デバッチ処理を使用してaddress-csv.txt
を一連のaddress-csv.xml_batch_%SEQ%.xmlファイル
に変換します。
java xlator.util.Translate -inbound -debatch 1 -schema address-csv.xsd -root Root-Element -input address-csv.txt -output address-csv.xml
図6-74 テスト・ツールを使用したaddress-csv.txtから一連のバッチxmlファイルへの変換