プライマリ・コンテンツに移動
Oracle® Fusion Middlewareテクノロジ・アダプタの理解
12c (12.2.1.1)
E79351-01
目次へ移動
目次

前
次

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

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

この章の内容は次のとおりです。

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

各Oracle JCAアダプタは、様々なエンタープライズ情報システム(EIS)とOracle BPEL Process Manager (Oracle BPEL PM)、Oracle Mediator (メディエータ)またはOracle Service Bus (OSB)の統合を可能にするソフトウェア・コンポーネントです。アダプタは、ネイティブ・メッセージをXMLまたは非XMLフォーマットで受け取り、Oracle BPEL PMまたはメディエータにXMLメッセージとしてパブリッシュします。また、XMLメッセージを受け取り、ネイティブEISフォーマットに変換することもできます。このネイティブ・データ・フォーマットとXMLの間の変換は、定義ファイル(非XMLスキーマ定義)を使用して実行され、定義ファイル自体はXMLスキーマ・フォーマットで定義されます。ネイティブ・フォーマット・ビルダー・ウィザードを使用すると、サンプル・ネイティブ・データを使用し、ネイティブXSD (NXSD)構文をネイティブ・データの変換用に作成できます。

図6-1に示すように、アダプタ構成ウィザードの「メッセージ」ページで「ネイティブ・フォーマットのスキーマの定義」ボタンをクリックすると、ネイティブ・フォーマット・ビルダー・ウィザードが表示されます。「メッセージ」ページは、アダプタ構成ウィザードで「終了」ページの前に表示される最後のページです。

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

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

6.1.1 サポートされているファイル形式

ネイティブ・フォーマット・ビルダー・ウィザードでは、図6-2に示されているファイル形式からのネイティブ・スキーマ・ファイルの作成を支援します。ネイティブ・スキーマを作成するには、選択されたタイプのサンプル・データのファイル形式が必要です。また、このウィザードを使用して作成された既存のネイティブ・スキーマ(Document Type Definition (DTD)またはCOBOLコピーブック・ファイル・タイプから生成されたものを除く)を編集することもできます。ネイティブ・スキーマ・ファイルの編集の詳細は、「ネイティブ・スキーマ・ファイルの編集」を参照してください。

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

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

6.1.1.1 デリミタ

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

6.1.1.2 固定長(位置固定)

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

6.1.1.3 複合タイプ

このオプションを選択すると、レコード用のネイティブ・スキーマを作成できます。この場合、フィールドそのものがレコードで複数のデリミタ・タイプを持つ可能性があります。

6.1.1.4 DTD

このオプションを選択すると、ユーザーが指定したDTDからネイティブ・スキーマを生成できます。DTDには、XMLドキュメントの構造に関する情報が含まれています。

6.1.1.5 COBOLコピーブック

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

COBOLメインフレーム・アプリケーションでは、通常COBOLコピーブック・ファイルを使用してデータ・レイアウトを定義します。実行時トランスレータが、関連するデータ・ファイルを解析できるように、コンバータがCOBOLコピーブックからネイティブ・スキーマを作成します。

COBOLコピーブックは、グループ・アイテム(構造)のコレクションです。これらのグループ・アイテムには、グループまたは基本アイテムであるその他のアイテムが含まれます。基本アイテムはそれ以上分割できないアイテムです。次に例を示します。

01 Purchase-Order
        05 Buyer
                 10 BuyerName PIC X(5) USAGE DISPLAY.
        04 Seller
                 08 SellerName PICTURE XXXXX.

Purchase-orderは、2つの子グループ・アイテム(BuyerSeller)を持つグループ・アイテムです。010504などの数値は、グループのレベル(そのグループ内のデータの階層)を示します。

グループは、階層の同じレベルに異なるレベル番号を持つように定義することもできます。たとえば、BuyerおよびSellerには異なるレベル番号がありますが、階層内では同じレベルです。グループ・アイテムには、そのグループのレベル番号以下のレベル番号が発生するまで続く、すべてのグループと基本アイテムが含まれます。

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

COBOLのグループ・アイテムは、XMLスキーマのcomplexTypeタイプの要素にマップできます。同様に、基本アイテムは、実行時トランスレータが対応するデータ・ファイルを解析するのに役立つ特定のネイティブ・フォーマットの注釈が付けられたsimple typeタイプの要素にマップできます。たとえば、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> 
6.1.1.5.1 ユーザー入力

次の情報を指定する必要があります。

  • 生成されるネイティブ・スキーマのターゲット・ネームスペース。

  • データ・ファイルが生成されたホスト・コンピュータのキャラクタ・セット。デフォルトではEBCDICに設定されます(ebcdic-cp-us)。

  • データ・ファイルが生成されたホスト・コンピュータのバイト順。デフォルトではビッグ・エンディアンに設定されます。

  • レコード・デリミタ(通常は改行文字)、デリミタなし、またはユーザー指定の文字列。

  • 生成されたネイティブ・スキーマのコンテナ・タグの名前。デフォルトではRoot-Elementに設定されます。

6.1.1.5.2 COBOL句

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

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

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

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


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

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

PIC X(n)

Y

Y

XXX…

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

PIC A(n)

Y

Y

AA…

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

PIC 9(n) DISPLAY

Y

Y

9999…

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

OCCURS n TIMES

Y

Y

固定長配列

JUSTIFIED

Y

Y

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

REDEFINES

Y

Y

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

PIC 9(m)V9(n) DISPLAY

Y

Y

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

OCCURS DEPENDING ON

Y

Y

該当なし

BLANK WHEN ZERO

I

I

無視されます

RENAMES

N

N

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

INDEX

N

N

4バイトの索引です

SYNCHRONIZED

I

I

SYNC

該当なし

POINTER

N

N

該当なし

PROCEDURE-POINTER

該当なし

FILLER

Y

Y

該当なし


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


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

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

USAGE [IS]

Y

Y

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

PIC 9(n) COMP

Y

Y

COMPUTATIONAL、BINARY、COMP-4

nで長さが変わります。

  • n = 1-4 (2バイト)

  • n = 5-9 (4バイト)

  • n = 10-18 (8バイト)

COMP-1

Y

Y

COMPUTATIONAL-1

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

COMP-2

Y

Y

COMPUTATIONAL-2

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

PIC 9(n) COMP-3

Y

Y

PACKED-DECIMAL、COMPUTATIONAL-3

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

PIC 9(n) COMP-4

Y

Y

COMPUTATIONAL-4

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

PIC 9(n) COMP-5

N

N

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

PIC S9(n) DISPLAY

Y

Y

PIC S99…

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

PIC S9(n) COMP

Y

Y

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

PIC S9(n) COMP-3

Y

Y

該当なし

PIC 9(m)V9(n) COMP

Y

Y

長さはCOMPと同じです。

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

Y

Y

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


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

  • SIGN IS LEADING

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

  • SIGN IS TRAILING

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

  • SIGN IS LEADING SEPARATE

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

  • SIGN IS TRAILING SEPARATE

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

注意:

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

6.1.1.5.3 ピクチャ編集タイプ

表6-3に、ピクチャ編集タイプを示します。


表6-3 編集済ピクチャ

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

編集済英数字

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

編集済浮動数値

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

編集済数値

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

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

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

  • 浮動挿入: cs + -

  • ゼロの抑止: Z *

  • 置換挿入: Z * + - c


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

05   AMOUNT     PIC 999.99  

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

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

6.1.1.6 XSDに変換されるMFL

MFLファイルをXSD形式に変換できます。詳細は、「MFLフォーマット・ファイルからスキーマ・フォーマットへの変換」を参照してください。

6.1.1.7 JSON Interchangeフォーマット

指定の場所で、JSONサンプル・ファイルまたはJSONファイルからNXSDスキーマを生成します。JSONは、人間が判読可能なデータの交換を行うためのテキストベースのオープン・スタンダードです。JSONは、オブジェクトと呼ばれる、単純なデータ構造および連想配列を表現するためのJavaScriptスクリプト言語から導出されます。

このオプションを選択すると、ネイティブ・フォーマット・ビルダー・ウィザードに「JSONファイルの説明」画面が表示されます。次の項目を入力できます。

  • ファイル名: JSONファイルの名前。

  • ターゲット・ネームスペース: ターゲット・ネームスペースが表示されます。

  • ルート要素: JSONルート・レベルを指定します。

  • キャラクタ・セット: 使用するキャラクタ・セットを選択します。

JSONの使用の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteでのSOAアプリケーションの開発 12c Release 1 (12.1.3.0)』を参照してください。

6.1.2 ネイティブ・スキーマ・ファイルの編集

デリミタ付き、固定長または複合タイプのファイルをサンプリングすることで、ネイティブ・フォーマット・ビルダー・ウィザードを使用して生成された既存のネイティブ・スキーマを編集できます。既存のネイティブ・スキーマを編集するには、ネイティブ・フォーマット・ビルダー・ウィザードの「タイプの選択」ページで「既存ファイルの編集」オプションを選択し、「参照」をクリックして既存のスキーマ・ファイルの場所にナビゲートし、編集対象のネイティブ・スキーマ・ファイルを選択します。ネイティブ・フォーマット・ビルダー・ウィザードに表示される指示に従って、ネイティブ・スキーマ・ファイルを編集します。

注意:

Document Type Definition (DTD)またはCOBOLコピーブック・ファイル・タイプから生成されたネイティブ・スキーマは編集できません。

図6-3に、「ネイティブ・フォーマット・ビルダー - タイプの選択」ページで「既存ファイルの編集」オプションが選択されている様子を示します。

図6-3 「ネイティブ・フォーマット・ビルダー・ウィザード - タイプの選択」ページ

図6-3の説明が続きます
「図6-3 「ネイティブ・フォーマット・ビルダー・ウィザード - タイプの選択」ページ」の説明

ネイティブ・スキーマ・ファイルを編集する前に、スキーマ内の注釈で指定されているサンプル・ファイルが存在することを確認する必要があります。この注釈は、ネイティブ・スキーマがサンプル・ファイルから初めて生成される際に自動的に追加されます。

次の例に、生成される注釈を示します。

例 - 生成される注釈

 <xsd:annotation>
      <xsd:appinfo>NXSDSAMPLE=/scratch/bob/sample.txt</xsd:appinfo>
      <xsd:appinfo>USEHEADER=true</xsd:appinfo>
 </xsd:annotation>

たとえば、注釈で指定されたサンプル・ファイルのパスが<!--NXSDWIZ:C:\Temp\Book1Out.csv:-->の場合に、このファイルが指定のパスに存在しなければ、ウィザードでエラーが表示されます。

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

この項では、ネイティブ・フォーマット・データをXMLに変換するために使用するネイティブ・スキーマの各種コンストラクトの概要と、これらのネイティブ・スキーマ・コンストラクトの使用方法について説明します。

この項には次のトピックが含まれます:

6.2.1 ネイティブ・スキーマ・コンストラクトについて

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


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

構文 説明

byteOrder

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

encoding

実際のデータが格納されるエンコーディング。通常は、相互運用性とUnicodeがサポートされているため、UTF-8をお薦めします。Javaランタイム環境でサポートされている有効なエンコーディングは、いずれも指定できます。サポートされているエンコーディングの完全な一覧については、http://download.oracle.com/javase/6/docs/technotes/guides/intl/encoding.doc.htmlを参照してください。エンコーディングは、アダプタ・プロキシ・メタデータに関連付けられた(N)XSDで指定できます。例: nxsd:encoding="iso-8859-1

nxsd:alwaysQuote

アウトバウンドでネイティブの非xmlデータを強制的に引用符で囲む必要がある場合は、trueに設定します。

headerLines

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

headerLinesTerminatedBy

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

standalone

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

stream

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

uniqueMessageSeparator

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

version

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

xmlversion

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

outboundHeader

アウトバウンド・メッセージに挿入するヘッダー値を指定する文字列。

dataLines

ネイティブ・ファイルで処理する行数を指定する整数。

fieldValidation

trueに設定すると、トランスレータではネイティブから読み取ったトークンのデータ型検証が実行されます。

フィールドValidationコンストラクトは組込みの単純型でのみサポートされています。

validation

trueに設定すると、トランスレータではインバウンドとアウトバウンドの両方で結果の検証が実行されます。

validateNxsd

trueに設定すると、詳細なネイティブ構文の検証が実行されます。このコンストラクトはデフォルトでオフになっており、本番環境ではパフォーマンスを向上させるためにオフにする必要があります。

useArrayIdentifiers

trueに設定すると、ネイティブ・フレームワークは配列識別子を処理するために最適化されます。これにより、非常に大きなペイロードの場合にパフォーマンス・ヒットになる場合があります。デフォルトでは、arrayIdentifiersはサポートされていません。

parseBom

trueに設定すると、ネイティブ・ストリーム内でバイト順マークが検索され、ここからエンコーディングが導出されます。

encodeLineTerminators

trueに設定すると、${eol}のセマンティックが\nのかわりに\r\nと解釈されます。


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


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

構文 説明

arrayIdentifierLength

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

arrayLength

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

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

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

arrayTerminatedBy

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

assign

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

cellSeparatedBy

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

choiceCondition

fixedLengthまたはterminatedです。

conditionValue

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

dataLines

このコンストラクトに指定された値は、データ全体ではなくデータの一部のみを変換するために使用されます。

dateFormat

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

identifierLength

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

itemSeparatedBy

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

leftSurroundedBy,

rightSurroundedBy

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

length

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

listTerminatedBy

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

lookAhead

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

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

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

paddedBy

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

padStyle

headtailまたはnone

quotedBy

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

デフォルトでは、指定された文字列は&quot;(")です。データにこの文字が含まれている場合は、フィールドが引用符で囲まれていない場合にも、このデフォルトをオーバーライドする必要があります。詳細は、「終了データの定義」「変換されるネイティブ・データ・フォーマット: デフォルトの引用符文字を含むデータ」を参照してください。

skip

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

skipLines

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

skipUntil

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

startsWith

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

style

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

surroundedBy

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

terminatedBy

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

variable

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

variables

一連の変数を宣言するか、宣言されている変数に値を割り当てます。


6.2.2 ネイティブ・スキーマ・コンストラクトの使用

この項には次のトピックが含まれます:

6.2.2.1 固定長データの定義

ネイティブ・フォーマットの固定長データは、固定長スタイルを使用してネイティブ・スキーマに定義できます。固定長には次の3つのタイプがあります。

  • 余白あり

  • 余白なし

  • ネイティブ・データから実際の長さも読み取られるタイプ

変換されるネイティブ・データ・フォーマット: 余白あり

実際のデータが指定された長さに満たない場合があります。この場合には、headまたはtailとしてpaddedByおよびpadStyleを指定できます。データが読み取られると、余白はそれに従って削除されます。変換対象のサンプルのネイティブ・データを次に示します。

GBP*UK000012550.00

ネイティブ・スキーマ: 余白あり

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="fixedlength">
  <complexType>
    <sequence>
      <element name="currency_code" nxsd:style="fixedLength" nxsd:length="4"
         nxsd:padStyle="tail" nxsd:paddedBy="*">
        <simpleType>
          <restriction base="string">
            <maxLength value="4" />
          </restriction>
        </simpleType>
      </element>
      <element name="country_code" nxsd:style="fixedLength" nxsd:length="2"
         nxsd:padStyle="none">
        <simpleType>
          <restriction base="string">
            <length value="2" />
          </restriction>
        </simpleType>
      </element>
      <element name="to_usd_rate" nxsd:style="fixedLength" nxsd:length="12"
         nxsd:padStyle="head" nxsd:paddedBy="0">
        <simpleType>
          <restriction base="string">
            <maxLength value="12" />
          </restriction>
        </simpleType>
      </element>
    </sequence>
  </complexType>
</element>
 
</schema>

ネイティブ・スキーマを使用して変換したXML: 余白あり

<fixedlength xmlns="http://www.oracle.com/ias/processconnect">
   <currency_code>GBP</currency_code>
   <country_code>UK</country_code>
   <to_usd_rate>12550.00</to_usd_rate>
</fixedlength>

変換されるネイティブ・データ・フォーマット: 余白なし

ネイティブ・スキーマに固定長データを定義するには、固定長スタイルを使用できます。実際のデータが指定された長さに満たない場合、空白は削除されません。変換対象のサンプルのネイティブ・データを次に示します。

GBP*UK000012550.00

ネイティブ・スキーマ: 余白なし

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="fixedlength">
  <complexType>
    <sequence>
      <element name="currency_code" nxsd:style="fixedLength" nxsd:length="4">
        <simpleType>
          <restriction base="string">
            <maxLength value="4" />
          </restriction>
        </simpleType>
      </element>
      <element name="country_code" nxsd:style="fixedLength" nxsd:length="2">
        <simpleType>
          <restriction base="string">
            <length value="2" />
          </restriction>
        </simpleType>
      </element>
      <element name="to_usd_rate" nxsd:style="fixedLength" nxsd:length="12">
        <simpleType>
          <restriction base="string">
            <maxLength value="12" />
          </restriction>
        </simpleType>
      </element>
    </sequence>
  </complexType>
</element>
 
</schema>

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

<fixedlength xmlns="http://www.oracle.com/ias/processconnect">
   <currency_code>GBP*</currency_code>
   <country_code>UK</country_code>
   <to_usd_rate>000012550.00</to_usd_rate>
</fixedlength>

変換されるネイティブ・データ・フォーマット: ネイティブ・データから実際の長さも読み取られる場合

データの長さもネイティブ・ストリームに保存される場合、まず長さの読取り、次に読み取られた長さに応じたデータの読取りにこのスタイルが使用されます。変換対象のサンプルのネイティブ・データを次に示します。

03joe13DUZac.1HKVmIY

ネイティブ・スキーマ: ネイティブ・データから実際の長さも読み取られる場合

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="fixedlength">
  <complexType>
    <sequence>
      <element name="user" type="string" nxsd:style="fixedLength"
         nxsd:identifierLength="2" />
      <element name="encr_user" type="string" nxsd:style="fixedLength"
         nxsd:identifierLength="2" />
    </sequence>
  </complexType>
</element>
 
</schema>

ネイティブ・スキーマを使用して変換したXML: ネイティブ・データから実際の長さも読み取られる場合

<fixedlength xmlns="http://www.oracle.com/ias/processconnect">
   <user>joe</user>
   <encr_user>DUZac.1HKVmIY</encr_user>
</fixedlength>

6.2.2.2 終了データの定義

このフォーマットは、終了マーク自体をデリミタではなく、実際のデータとして処理する場合に使用されます。マークが実際のデータの一部であるかどうかが不明な場合は、念のためにnxsd:quotedByを使用できます。nxsd:quotedByを指定すると、対応するネイティブ・データが引用符で囲まれる場合と囲まれない場合があります。囲まれている場合、実際のデータは、nxsd:quotedByでの指定に応じて開始の引用符から終了の引用符まで読み取られます。囲まれていない場合は、terminatedBy文字が検出されるまで読み取られます。

デフォルトでは、終了マークは&quot;(")です。データにこの文字が含まれている場合は、フィールドが引用符で囲まれていない場合にも、このデフォルトをオーバーライドする必要があります。詳細は、後述の「変換されるネイティブ・データ・フォーマット: デフォルトの引用符文字を含むデータ」を参照してください。

以降の各項では、引用符付き(オプション)と引用符なしのシナリオ、およびデフォルトの引用符文字を含むシナリオを示します。

変換されるネイティブ・データ・フォーマット: 引用符付き(オプション)

変換対象のサンプルのネイティブ・データを次に示します。

Fred,"2 Old Street, Old Town,Manchester",20-08-1954,0161-499-1718

ネイティブ・スキーマ: 引用符付き(オプション)

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="terminated">
  <complexType>
    <sequence>
      <element name="PersonName" type="string" nxsd:style="terminated"
         nxsd:terminatedBy="," />
      <element name="Address" type="string" nxsd:style="terminated"
         nxsd:terminatedBy="," nxsd:quotedBy="&quot;"/>
      <element name="DOB" type="string" nxsd:style="terminated"
         nxsd:terminatedBy="," />
      <element name="Telephone" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="${eol}" />
    </sequence>
  </complexType>
</element>

ネイティブ・スキーマを使用して変換したXML: 引用符付き(オプション)

<terminated xmlns="http://www.oracle.com/ias/processconnect">
   <PersonName>Fred</PersonName>
   <Address>2 Old Street, Old Town,Manchester</Address>
   <DOB>20-08-1954</DOB>
   <Telephone>0161-499-1718</Telephone>
</terminated>

変換されるネイティブ・データ・フォーマット: 引用符なし

データが特定の文字列または文字で終了する場合に使用されます。変換対象のサンプルのネイティブ・データを次に示します。

1020,16,18,,1580.00

ネイティブ・スキーマ: 引用符なし

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="terminated">
  <complexType>
    <sequence>
      <element name="product" type="string" nxsd:style="terminated"
         nxsd:terminatedBy="," />
      <element name="ordered" type="string" nxsd:style="terminated"
         nxsd:terminatedBy="," />
      <element name="inventory" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="," />
      <element name="backlog" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="," />
      <element name="listprice" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="${eol}" />
    </sequence>
  </complexType>
</element>
 
</schema>

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

<terminated xmlns="http://www.oracle.com/ias/processconnect">
   <product>1020</product>
   <ordered>16</ordered>
   <inventory>18</inventory>
   <backlog></backlog>
   <listprice>1580.00</listprice>
</terminated>

変換されるネイティブ・データ・フォーマット: デフォルトの引用符文字を含むデータ

変換対象のサンプルのネイティブ・データを次に示します。

aaa,"bbbbb,[cccc

この場合、フィールドはカンマで終了し、"文字は2番目のフィールドのデータに含まれ、[文字は3番目のフィールドのデータに含まれています。

デフォルトのnxsd:quotedBy終了マークは&quot;(")であるため、このフィールドがカンマ文字で終了すると指定しても、Oracleファイル・アダプタはフィールド2の変換に失敗します。このデータを正常に変換するには、デフォルトのnxsd:quotedBy終了マークを、このフィールドのデータに含まれていない任意の文字にオーバーライドする必要があります。この例では、&lt;(<)はフィールド2に含まれることがないため、デフォルトのnxsd:quotedBy終了マークをこの文字にオーバーライドします。

<element name="FieldTwo" type="string" nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="&lt;"/>

対照的に、フィールド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="&lt;"/>
      <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>

6.2.2.3 囲みデータの定義

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

囲みデータには次のタイプがあります。

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

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

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

左右の囲みマークが異なる場合に変換対象となるサンプルのネイティブ・データを次に示します。

(Ernest Hemingway Museum){Whitehead St.}

ネイティブ・スキーマ: 左右の囲みマークが異なる場合

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        xmlns:tns="http://www.oracle.com/ias/processconnect"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
<element name="limstring">
  <complexType>
    <sequence>
      <element name="Landmark" type="string" nxsd:style="surrounded" nxsd:leftSurroundedBy="(" nxsd:rightSurroundedBy=")" />
      <element name="Street" type="string" nxsd:style="surrounded" nxsd:leftSurroundedBy="{" nxsd:rightSurroundedBy="}" />
    </sequence>
  </complexType>
</element>
</schema>

ネイティブ・スキーマを使用して変換したXML: 左右の囲みマークが異なる場合

<limstring xmlns="http://www.oracle.com/ias/processconnect">
   <Landmark>Ernest Hemingway Museum</Landmark>
   <Street>Whitehead St.</Street>
</limstring>

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

左右の囲みマークが同じ場合に変換対象となるサンプルのネイティブ・データを次に示します。

.FL..Florida Keys.+Key West+

ネイティブ・スキーマ: 左右の囲みマークが同じ場合

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        xmlns:tns="http://www.oracle.com/ias/processconnect"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
<element name="limstring">
  <complexType>
    <sequence>
      <element name="State" type="string" nxsd:style="surrounded" nxsd:surroundedBy="."/>
      <element name="Region" type="string" nxsd:style="surrounded" nxsd:surroundedBy="." />
      <element name="City" type="string" nxsd:style="surrounded" nxsd:surroundedBy="+" />
    </sequence>
  </complexType>
</element>
</schema>

ネイティブ・スキーマを使用して変換したXML: 左右の囲みマークが同じ場合

<limstring xmlns="http://www.oracle.com/ias/processconnect">
   <State>FL</State>
   <Region>Florida Keys</Region>
   <City>Key West</City>
</limstring>

6.2.2.4 リストの定義

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

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

以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済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>
6.2.2.4.2 最後のアイテムを含みすべてのアイテムが同じマークで区切られている場合(バインドなし)

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

6.2.2.5 配列の定義

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

配列タイプの例を次に示します。

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

以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済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>
6.2.2.5.2 最後のセルを含み、すべてのセルが同じマークで区切られている場合(バインドなし)

以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済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>
6.2.2.5.3 セルはマークで区切られていないが最後のセルがマークで終了している場合(バインド済)

以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済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>
6.2.2.5.4 ネイティブ・データからセルの数が読み取られる場合

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

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

6.2.2.6 条件付き処理

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

6.2.2.6.1 条件に基づき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
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>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>
6.2.2.6.2 条件に基づきsequenceモデル・グループ内の複数の要素を処理する場合

以降の各項では、変換されるデータのフォーマット、ネイティブ・スキーマおよび変換済XMLについて説明します。

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

PO28/06/2004^|ABCD Inc.|Oracle
OracleApps025070,000.00
Database  021230,000.00
ProcessCon021040,000.00
PO01/07/2004^|EFGH Inc.|Oracle
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>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>

6.2.2.7 日付の定義

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

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

11/16/0224/11/02
11-20-2002
23*11*2002
01/02/2003 01:02
01/02/2003 03:04:05

ネイティブ・スキーマ

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="dateformat">
  <complexType>
    <sequence>
      <element name="StartDate" type="dateTime" nxsd:dateFormat="MM/dd/yy"  
         nxsd:style="fixedLength" nxsd:length="8" />
      <element name="EndDate" type="dateTime"   nxsd:dateFormat="dd/MM/yy"  
         nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      <element name="Milestone" type="dateTime" nxsd:dateFormat="MM-dd-yyyy"
         nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      <element name="DueDate" type="dateTime"   nxsd:dateFormat="dd*MM*yyyy"
         nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      <element name="Date" type="dateTime"   nxsd:dateFormat="MM/dd/yyyy hh:mm"
         nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
      <element name="Date" type="dateTime"   nxsd:dateFormat="MM/dd/yyyy hh:mm:ss"
         nxsd:style="terminated" nxsd:terminatedBy="${eol}" />
    </sequence>
  </complexType>
</element>
 
</schema>

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

<dateformat xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest">
   <StartDate>2002-11-16T00:00:00</StartDate>
   <EndDate>2002-11-24T00:00:00</EndDate>
   <Milestone>2002-11-20T00:00:00</Milestone>
   <DueDate>2002-11-23T00:00:00</DueDate>
   <Date>2003-01-02T01:02:00</Date>
   <Date>2003-01-02T03:04:05</Date>
</dateformat>

注意:

既存の日付フォーマットにnxsd:dateParsingMode="lax/strict"およびロケール・サポートが追加されています。

6.2.2.7.1 日付の定義: ローカル・サポートあり

次の例に、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>

6.2.2.8 変数の使用

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

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

{,;}Fred,"2 Old Street, Old Town,Manchester","20-08-1954";"0161-499-1718"
phone-2
phone-3

ネイティブ・スキーマ

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 <element name="variable">
  <annotation>
    <documentation>
      1. var1 - variable declaration
      2. var2 - variable declaration with default value
      3. EOL - variable declaration with referencing a system variable
    </documentation>
    <appinfo>
      <junkies/>
      <nxsd:variables>
        <nxsd:variable name="var1" />
        <nxsd:variable name="var2" value="," />
        <nxsd:variable name="SystemEOL" value="${system.line.separator}" />
      </nxsd:variables>
      <junkies/>
      <junkies/>
      <junkies/>
    </appinfo>
  </annotation>
  
  <complexType>
    <sequence>
      <element name="delims" type="string" nxsd:style="surrounded"
          nxsd:leftSurroundedBy="{" nxsd:rightSurroundedBy="}" >
         <annotation>
           <appinfo>
             <junkies/>
             <junkies/>
             <junkies/>
             <nxsd:variables>
              <nxsd:assign name="var1" value="${0,1}"/>
              <nxsd:assign name="var2" value="${1}" />
             </nxsd:variables>
           </appinfo>
         </annotation>
      </element>
 
      <element name="PersonName" type="string" nxsd:style="terminated"
          nxsd:terminatedBy="${var1}" nxsd:quotedBy="&quot;" />
      <element name="Address" type="string" nxsd:style="terminated"
          nxsd:terminatedBy="${var1}" nxsd:quotedBy="&quot;"/>
      <element name="DOB" type="string" nxsd:style="terminated"
          nxsd:terminatedBy="${var2}" nxsd:quotedBy='"'/>
      <element name="Telephone1" type="string" nxsd:style="terminated"
          nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/>
      <element name="Telephone2" type="string" nxsd:style="terminated"
          nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/>
      <element name="Telephone3" type="string" nxsd:style="terminated"
          nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/>
    </sequence>
  </complexType>
</element>
 
</schema>

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

<variable xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest">
   <delims>,;</delims>
   <PersonName>Fred</PersonName>
   <Address>2 Old Street, Old Town,Manchester</Address>
   <DOB>20-08-1954</DOB>
   <Telephone1>0161-499-1718</Telephone1>
   <Telephone2>phone-2</Telephone2>
   <Telephone3>phone-3</Telephone3>
</variable>

6.2.2.9 接頭辞と接尾辞の定義

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

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

     Fred,  "2 Old Street, Old Town,Manchester","20-08-1954",0161-499-1718

ネイティブ・スキーマ

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD"
        >

<element name="terminated">
  <complexType>
    <sequence>
      <element name="PersonName" type="string" nxsd:prefixWith="Mr."
       nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="&quot;" />
      <element name="Address" type="string" nxsd:suffixWith="]]"
       nxsd:prefixWith="[[" nxsd:style="terminated" nxsd:terminatedBy=","
       nxsd:quotedBy="&quot;"/>
      <element name="DOB" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy='"'/>
      <element name="Telephone" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/>
    </sequence>
  </complexType>
</element>

</schema>

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

<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest">
   <PersonName>Mr.Fred</PersonName>
   <Address>[[2 Old Street, Old Town,Manchester]]</Address>
   <DOB>20-08-1954</DOB>
   <Telephone>0161-499-1718</Telephone>
</terminated>

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

トランスレータは、次の例に示すように、skipModeコンストラクトに応じてデータの読取り前または読取り後にスキップします。

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

     Fred,   "2 Old Street, Old Town,Manchester","20-08-1954",0161-499-1718

ネイティブ・スキーマ

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD"
        >

<element name="terminated">
  <complexType>
    <sequence>
      <element name="PersonName" type="string" nxsd:skip="5"
       nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="&quot;" />
      <element name="Address" type="string" nxsd:skipMode="before" nxsd:skip="3"
       nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy="&quot;"/>
      <element name="DOB" type="string" nxsd:skipMode="after" nxsd:skip="6"
       nxsd:style="terminated" nxsd:terminatedBy="," nxsd:quotedBy='"'/>
      <element name="Telephone" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/>
    </sequence>
  </complexType>
</element>

</schema>

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

<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest">
   <PersonName>Fred</PersonName>
   <Address>2 Old Street, Old Town,Manchester</Address>
   <DOB>20-08-1954</DOB>
   <Telephone>99-1718</Telephone>
</terminated>

6.2.2.11 fixedおよびdefault値の定義

nxsd注釈を付けずに要素を宣言し、値fixedまたはdefaultを指定すると、トランスレータは指定された値を使用し、例外をスローしません。

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

Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718"

ネイティブ・スキーマ

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">

<element name="terminated">
  <annotation>
    <appinfo>
      <nxsd:variables>
        <nxsd:variable name="x" value="hello" />
      </nxsd:variables>
      <junkies/>
      <junkies/>
      <junkies/>
    </appinfo>
  </annotation>

  <complexType>
    <sequence>
      <element name="PersonName" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy="&quot;" />
      <element name="Age" type="string" fixed="16"  />
      <element name="Address" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy="&quot;"/>
      <element name="DOB" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy='"'/>
      <element name="salutation" type="string" default="${x}"  />
      <element name="Telephone" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/>
    </sequence>
  </complexType>
</element>

</schema>

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

<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest">
   <PersonName>Fred</PersonName>
   <Age>16</Age>
   <Address>2 Old Street, Old Town,Manchester</Address>
   <DOB>20-08-1954</DOB>
   <salutation>hello</salutation>
   <Telephone>0161-499-1718</Telephone>
</terminated>

6.2.2.12 writeの定義

writeコンストラクトは、実際のデータの書込み前または書込み後に、出力ストリームの現在位置にリテラルを書き込みます。

入力XML

<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest">
   <PersonName>Fred</PersonName>
   <Address>2 Old Street, Old Town,Manchester</Address>
   <DOB>20-08-1954</DOB>
   <Telephone>0161-499-1718</Telephone>
</terminated>

ネイティブ・スキーマ

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD"
        >

<element name="terminated">
  <complexType>
    <sequence>
      <element name="PersonName" type="string" nxsd:writeMode="before"
       nxsd:write="Mr." nxsd:style="terminated" nxsd:terminatedBy=","
       nxsd:quotedBy="&quot;" />
      <element name="Address" type="string" nxsd:writeMode="after"
       nxsd:write="Over." nxsd:style="terminated" nxsd:terminatedBy=","
       nxsd:quotedBy="&quot;"/>
      <element name="DOB" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy='"'/>
      <element name="Telephone" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/>
    </sequence>
  </complexType>
</element>

</schema>

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

Mr.Fred,"2 Old Street, Old Town,Manchester",Over.20-08-1954,0161-499-1718

6.2.2.13 LookAheadの定義

LookAheadコンストラクトには次のタイプがあります。

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

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

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

</schema>

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

<LookAhead xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest">
   <PersonName>Fred</PersonName>
   <Address>2 Old Street, Old Town,Manchester</Address>
   <DOB>20-08-1954</DOB>
   <Telephone>0161-499-1718</Telephone>
</LookAhead>
6.2.2.13.2 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>

6.2.2.14 正規表現を使用したレコードの条件付き処理に対する複雑なlookAhead戦略の定義

NXSDウィザードは、固定長レコードと可変長レコードの両方をフィルタリングするための正規表現パターンを指定できるlookahead属性を提供します。

固定長、デリミタ付きおよび複合ファイル・タイプでlookahead属性を使用することで、条件付き処理がサポートされます。

この条件付き処理を使用すると、正規表現を満たすレコードのみがXMLでパブリッシュされる結果を取得できます。

また、レコードが正規表現を満たさない場合に例外を発生するオプションも指定できます。選択条件を指定することによって条件付き処理がサポートされます。

正規表現のサポートによって、正規表現と照合する文字列を指定できます。文字列はレコード境界を超えることはできません。

固定長レコードでは、レコード長とレコードの様々なフィールドがあらかじめわかっています。このことは、正規表現と照合するストリームの開始位置と長さを指定する際に役立ちます。

固定長レコードのnxsdコンストラクトとその定義のリストは、表6-6を参照してください。

コンストラクトは、nxsd:の形式で提供されますが、ネイティブ・フォーマット・ビルダーのユーザー・インタフェースと同等の役割を果たし、ネイティブ・フォーマット・ビルダー・ウィザードの該当する画面の説明で参照されます。


表6-6 固定長レコードのLookAheadコンストラクト

構文 説明

nxsd:lookAhead

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

nxsd:lookAhead="20" nxsd:lookForPattern=".*Pattern.*" nxsd:scanLength="30"

これは、20文字をスキップし、次の30文字の中でjava.util.regex.Pattern ".*Pattern.*"を検索することを意味します。パターンが検出されるとそのレコードが処理され、検出されない場合はスキップされます。

このコンストラクトは、lookForおよびlookForPatternの両方を持つユーザーになります。

nxsd:lookForPattern

入力ストリームと照合する正規表現java.util.regex.Patternを指定します。

nxsd:scanLength

lookAheadの後の入力ストリームのデータ長を指定します。このデータはlookForPatternと照合されます。

nxsd:reportLookAheadError

データとlookForPatternが一致しないとエラーを発生するかどうかについて、ブール値を指定します。デフォルト値はfalseで、データとlookForPatternが一致しない場合にエラーを発生せず、不一致のレコードをスキップします。この場合、不一致のレコードは処理されず、データの喪失としてユーザーに表示されることがあります。


次の使用例を参照してください。

  • nxsd:scanLengthを指定しない場合は、uniqueMessageSeparatorを使用して文字列が特定されます。

    uniqueMessageSeparatorは、大量のメッセージにおいて、ネイティブ・データの一意のメッセージ・セパレータを指定する文字列です。uniqueMessageSeparatorが指定されていない場合、デフォルトの${eol}が使用されます。

    次のシナリオでは、nxsd:scanLengthが指定されていないため、トランスレータはuniqueMessageSeparatorを使用して正規表現と照合する文字列を特定します。

    • アドレスがNew Townのすべてのレコードをスキャンします。ネイティブ・データは次のとおりです。

      #Fred,"2 Old Street, Old Town, Manchester","17-08-1954","0161-498-1718", YES
      #Tred,"2 Old Street, Old Town, Manchester","16-08-1974","0161-486-1718", YES
      John,"2 Old Street, New Town, Manchester","20-08-2004","0161-497-1718", NO
      #
      

      これに対するNXSDは次のとおりで、文字列を特定するためにuniqueMessageSeparatorを使用します。

      <schema …
       nxsd:uniqueMessageSeparator="#">
      <sequence minOccurs="0" maxOccurs="unbounded" nxsd:lookAhead="0" nxsd:lookForPattern="*New Town*">
      
    • アドレスがNew Townで、nxsd:uniqueMessageSeparatorが指定されていないすべてのレコードをスキャンします。トランスレータは${eol}を使用して、正規表現と照合する文字列を特定します。

      Fred,"2 Old Street, Old Town, Manchester","17-08-1954","0161-498-1718", YES
      Tred,"2 Old Street, Old Town, Manchester","16-08-1974","0161-486-1718", YES
      John,"2 Old Street, New Town, Manchester","20-08-2004","0161-497-1718", NAH
      

      これに対するNXSDは次のとおりです。

      <sequence minOccurs="0" maxOccurs="unbounded" nxsd:lookAhead="0" nxsd:lookForPattern="*New Town*">
      
  • 次の使用例では、nxsd:uniqueMessageSeparatorを使用しません。

    2つ目の使用例では、文字列を特定するためにnxsd:scanLengthを指定します。

    Fred,"2 Old Street, New Town, Manchester","17-08-1954","0161-498-1718", YES
    Tred,"2 Old Street, Old Town, Manchester","16-08-1974","0161-486-1718", YES
    John,"2 Old Street, New Town, Manchester","20-08-2004","0161-497-1718", NAH
    

    このデータに対して使用するNXSDは次のとおりです。

    <sequence minOccurs="0" maxOccurs="3" nxsd:lookAhead="0" nxsd:lookForPattern=".*New Town.*" nxsd:scanLength="73">
    
    • 2つ目のフィールドが数字のみで構成されるすべてのレコードをスキャンします。ネイティブ・データは次のとおりです。

      Fred, add, 20-08-1954, 0161-498-1718", YES
      Tred, 100, 20-08-1954, 0161-486-1718", YES
      John, add, 20-08-1954, 0161-497-1718", NAH
      

      2つ目のフィールドが数字のみで構成されるかどうかを特定するNXSDは次のとおりです。

      <sequence minOccurs="0" maxOccurs="3" nxsd:lookAhead="0" nxsd:lookForPattern=".*,\d+,.*" nxsd:scanLength="38"> 
      
    • zipに5桁の数字のみが含まれるすべてのレコードをスキャンします。ネイティブ・データは次のとおりです。

      Fred, zipID, 20-08-1954, 0161-498-1718", YES
      Tred, 90210, 20-08-1954, 0161-486-1718", YES
      John, 9021Z, 20-08-1954, 0161-497-1718", NAH
      

      適切なパターンを検索し、5桁の数字を特定するNXSDは次のとおりです。

      <sequence minOccurs="0" maxOccurs="3" nxsd:	lookAhead="0" nxsd:lookForPattern=".*,\d{5},.*" nxsd:scanLength="40">
      
    • 名前に数字が含まれず、2つ目のフィールドに5桁のzipコードが含まれるすべてのレコードをスキャンします。ネイティブ・データは次のとおりです。

      JohnBrown, zipID, 20-08-1954, 0161-498-1718", YES
      Sweety101, 90210, 20-08-1954, 0161-486-1718", YES
      CrowyBowy, 90210, 20-08-1954, 0161-497-1718", NAH
      

      正規表現の使用に対するこのNXSDは次のとおりです。

      <sequence minOccurs="0" maxOccurs="4" nxsd:lookAhead="0" nxsd:lookForPattern="[a-zA-Z]*,\d{5},.*" nxsd:scanLength="45">
      

スキャンの長さの使用は固定長レコードで適切に機能しますが、可変長レコードには、長さが事前にわからないという制限があります。そのため、nxsd:scanLength属性をこのようなシナリオで使用することはできません。トランスレータには、正規表現と照合する文字列を特定する方法が必要です。

可変長レコードのこの制限に対処するには、複雑なlookaheadを実行するときに、nxsd:scanLengthを使用するのではなく、2つの属性(nxsd:LookFromおよびnxsd:lookTill)を使用できます。

パターンが一致する文字列は、nxsd:lookFrom属性およびnxsd:lookTill属性を介して導出できます。可変長レコードのlookaheadスキャンに対する基本NXSDは、次のとおりです。

nxsd:lookFrom="FirstInstanceOfString" nxsd:lookTill="firstInstanceOfString after lookFrom" 
nxsd:lookForPattern="java.util.regex.Pattern" [nxsd:skipUntill="${eol} or Literal"]

可変長レコードのlookaheadコンストラクトのリストは、表6-7を参照してください。

コンストラクトは、nxsd:の形式で提供されますが、ネイティブ・フォーマット・ビルダーのユーザー・インタフェースと同等の役割を果たし、該当する画面の説明で参照されます。


表6-7 可変長レコードのlookaheadコンストラクト

構文 定義

nxsd:lookFrom

リテラルを定義します。lookFromリテラルが入力ストリームに見つかった後にのみ、データが照合されます。

nxsd:lookForPattern

入力ストリームと照合するjava.util.regex.Pattern (正規表現)を指定します。

nxsd:lookTill

入力ストリームのデータ照合の終点となるリテラルを指定します。nxsd:lookFrom (除外)とlookTill (除外)の間にある入力ストリームのデータが、lookForPatternと照合されます。

nxsd:skipUntil

データがlookForPatternと一致しないときに、入力ストリームのデータのスキップの終点となるリテラルを指定します。

nxsd:reportLookAheadError

データがlookForPatternと一致しないときにエラーを発生する場合のブール値を指定します。デフォルト値はfalseで、データがlookForPatternと一致しない場合にエラーを発生せず、不一致のレコードもスキップします。


ネイティブ・ファイルを変換するためのNXSDを作成する場合、スキーマでlookAheadを指定すると、lookForPatternを使用して指定した正規表現に基づいて値を抽出できます。

ただし、可変長レコードを抽出する場合は、レコードの長さがわからないため、NXSD要素でlookFrom属性とlookTill属性を使用できます。JDeveloperネイティブ・フォーマット・ビルダーのユーザー・インタフェース・ウィンドウで、skipUntilを使用するか、または使用せずにlookFromおよびlookTillに値を指定します。

複雑なlookaheadを可変長レコードとともに使用する場合、これらのコンストラクトの理解に関連する使用例がいくつかあります。

  • 1つ目の使用例では、nxsd:lookTillがレコードの終わりであり、New Townにアドレスがあるレコードをすべてスキャンします。この例では、スキーマ要素のカーディナリティを超過せず、nxsd:lookForPatternが一致しない場合に、トランスレータがスキップ位置を認識している必要があります。

    Tred,"2 Old Street, NEW Town,Manchester",@NAH
    Bred,"2 Old Street, Old Town,Manchester",@NAH
    dred,"2 Old Street, New Town,Manchester",@YES
    Hred,"2 Old Street, Old Town,Manchester",@YES
    Bred,"2 Old Street, Old Town,Manchester",@YES
    

    この使用例に対するNXSDは次のとおりです。nxsd:lookTill="${eol}によってレコードの最後を示し、New Townを検索することを示しています。

    <sequence minOccurs="0" maxOccurs="3" nxsd:lookFrom="Street" nxsd:lookTill="${eol}" nxsd:lookForPattern=".*New Town.*">
    
  • nxsd:lookTillがレコードの終わりではない使用例もあります。この例では、トランスレータは、レコードが一致しない場合にスキップ位置を認識していません。

    nxsd:skipUntil属性を使用すると、レコードが情報と一致しない場合にスキップ位置を指定できます。

    nxsd:lookTill句とともにnxsd:skipUntil句を明示的に定義する必要があります。

    nxsd:skipUntilを使用する場合は、次のようにレコードの終わりを指定します。

    nxsd:skipUntil=" ${eol} or Literal"

    • この使用例では、New Townにアドレスがあるすべてのレコードをスキャンします。ネイティブ・データは次のとおりです。

      Tred,"2 Old Street, NEW Town, Manchester", @NAH
      Bred,"2 Old Street, Old Town, Manchester", @NAH
      Dred, "2 Old Street, New Town, Manchester", @YES
      Hred,"2 Old Street, Old Town, Manchester", @YES
      Bred,"2 Old Street, Old Town, Manchester", @YES
      

      次のNXSDは、レコードが一致しない場合にファイルの終わりまでスキップしますが、Manchesterが見つかるまで検索を行うことを示しています。

      <sequence minOccurs="0" maxOccurs="3" nxsd:lookFrom="Street" nxsd:lookTill=" Manchester" nxsd:lookForPattern=".*New Town.*" nxsd:skipUntil="${eol}">
      
    • 事前定義された位置から、特定の文字列が見つかる位置まで正規表現を照合することもできます。そのためには、nxsd:lookTill属性とともにnxsd:lookAheadを使用して開始位置を指定します。

      これは、nxsd:lookFrom属性については不明であるが、レコードの終わりがわかっているシナリオで役立ちます。

      そのようなシナリオでは、nxsd:lookAhead="0"nxsd:lookTill="end of record"を指定できます。この場合、レコードの終わりまでnxsd:lookTillを指定する必要があります。

      次の例では、New Townにアドレスがあるすべてのレコードをスキャンします。ネイティブ・データは次のとおりです。

      Tred,"2 Old Street, NEW Town, Manchester", @NAHBred,"2 Old Street, Old Town, Manchester", @NAHDred,"2 Old Street, New Town, Manchester", @YESHred,"2 Old Street, Old Town, Manchester", @YESBred,"2 Old Street, Old Town, Manchester", @YES
      

      レコードの終わりがわかっているこの使用例のNXSDは、次のとおりです。

      <sequence minOccurs="0" maxOccurs="3" nxsd:lookAhead="0" nxsd:lookForPattern=".*New Town.*" nxsd:lookTill="${eol}">
      
    • nxsd:lookTillがレコードの終わりではない例もあります。nxsd:skipUntilを指定する必要があります。これは、特定の正規表現と一致しないレコードをトランスレータがスキップする必要があるポイントを示します。

      次の例では、New Townにアドレスがあるすべてのレコードをスキャンします。

    • Tred,"2 Old Street, NEW Town, Manchester", @NAH
      Bred,"2 Old Street, Old Town, Manchester", @NAH
      Dred,"2 Old Street, New Town, Manchester", @YES
      Hred,"2 Old Street, Old Town, Manchester", @YES
      Bred,"2 Old Street, Old Town, Manchester", @YES
      

      nxsd:skipUntilがレコードの終わりを定義している場合のNXSDは、次のとおりです。

      <sequence minOccurs="0" maxOccurs="3" nxsd:lookAhead="0" nxsd:lookForPattern=".*New Town.*" nxsd:lookTill="Manchester" nxsd:skipUntil="${eol}">
      
    • JDeveloperネイティブ・フォーマット・ビルダーのユーザー・インタフェース・ウィンドウで、skipUntilを使用するか、使用せずにlookAheadlookTillに値を指定できますが、JDeveloper UIでそれらを選択して次に進み、NXSDソースを表示すると、スキーマにlookTill属性が含まれません。この問題を防ぐには、lookAhead属性とともに<namespace>:lookTill="literal"を明示的に記述します。

6.2.2.14.1 パターンの検索時に改行文字を含める

改行文字があるレコードの各行では、文の最後の単語を見つけるために複雑なLookAheadパターンを定義する場合に、改行文字をcharとして含める必要があります。

たとえば、次のレコードを検索する場合、

canvas,"1 17th Cross, North
London,England","17-08-1954","0161-498-1718",YES 

検索用のパターンとして次を使用できると考えるかもしれません。

nxsd:lookAhead="73" nxsd:scanLength="3" 
nxsd:lookForPattern=".ES"

しかし、検索するレコードが実際は改行文字を含む次の内容の場合、

canvas,"1 17th Cross, North 
London,England","17-08-1954","0161-498-1718",YES\n

このレコードを検索するlookForPattern句は、次のようにする必要があります。

nxsd:lookForPattern=".ES\n"

または、デリミタに対応する場合は、次のようにします。

nxsd:lookForPattern=".ES." 

そのため、属性は次のようになります。

nxsd:lookAhead="73" nxsd:scanLength="4" 
nxsd:lookForPattern=".ES\n" or nxsd:lookForPattern=".ES." 

6.2.2.15 outboundHeaderの定義

outboundHeaderの実際の内容には変数(特に${eol})を使用できます。headerLinesおよびoutboundHeaderの両方が使用可能な場合、アウトバウンドではoutboundHeaderが優先されます。

注意:

インバウンド方向では、ヘッダー・スキップ機能がサポートされています。他の変数はアクセスできないか、リテラルのみが含まれているため、ヘッダーで使用できるのは事前定義済の変数のみです。

入力XML

<terminated xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest">
   <PersonName>Fred</PersonName>
   <Address>2 Old Street, Old Town,Manchester</Address>
   <DOB>20-08-1954</DOB>
   <Telephone>0161-499-1718</Telephone>
</terminated>

ネイティブ・スキーマ

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD"
        nxsd:hasHeader="true"
        nxsd:outboundHeader="This is a header ${eol}">

<element name="terminated">
  <complexType>
    <sequence>
      <element name="PersonName" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy="&quot;" />
      <element name="Address" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy="&quot;"/>
      <element name="DOB" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="," nxsd:quotedBy='"'/>
      <element name="Telephone" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" nxsd:quotedBy='"'/>
    </sequence>
  </complexType>
</element>

</schema>

変換されたデータ

This is a header
Fred,"2 Old Street, Old Town,Manchester",20-08-1954,0161-499-1718

6.2.2.16 conditionValueでの複雑な条件の定義

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

6.2.2.17 choiceConditionでの複雑な条件の定義

choiceConditionコンストラクトは、フィールドが複数タイプのデリミタで区切られている複雑なレコードに対し、conditionValueコンストラクトとともに使用されます。複数タイプ以外にchoiceConditionに使用できるタイプは、FixedLengthVariableおよび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>

6.2.2.18 dataLinesの定義

データ全体ではなくデータの一部のみを変換することが要件の場合は、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>

6.2.2.19 タイムゾーンを使用した日付書式の定義

トランスレータでは、日付または時刻がタイムゾーンに関連付けられている必要があります。トランスレータでは、ネイティブ・データの日付とXMLの日付の両方について、タイムゾーンを使用した日付書式がサポートされています。

日付/時間文字列の変換時には、2つの部分があります。第1の部分はネイティブ・データの日付の書式(dateformat)で、第2の部分は第1の部分の解析に使用するタイムゾーン(timeZoneまたはuseTimeZone)です。トランスレータでは、これらの詳細が日付/時間文字列の解析中に使用されます。

デフォルトでは、解析後に日付文字列がXMLのISO-8601フォーマットに変換されます。このデフォルトは、XMLDateFormatXMLTimeZoneまたは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>

6.2.2.20 変換中の検証の実装

Oracle JCAアダプタは、変換中の検証を実装するように構成する必要があります。検証により、Oracle JCAアダプタにより変換中に無効なメッセージがパブリッシュされないことを保証できます。

次のタイプの検証の一方または両方を実装できます。

6.2.2.20.1 ペイロード検証

ペイロード検証では、Oracle JCAアダプタにより処理される入力と出力のXMLメッセージを検証する必要があります。ペイロード検証は、次のいずれかのレベルで設定できます。

  • トップレベル検証

  • フィールドレベル検証

    NXSDレイヤー(nxsd:validateのトップレベルのフラグを使用)またはサービス・エンジン・レイヤーのいずれかで検証を実行できます。サービス・エンジン・レイヤー検証の詳細は、『Oracle® Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』のBPELプロセス・サービス・エンジン・プロパティの構成に関する項を参照してください。

トップレベル検証

トップレベル検証では、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" 
   > 
6.2.2.20.2 スキーマ検証

スキーマ検証では、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"検証フラグは、ペイロード・レベルの検証に影響しません

6.2.2.21 BOMを使用したファイルの処理

バイト順マーク(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>

6.2.3 インバウンドおよびアウトバウンド・ネイティブ・データのマルチバイト変換

ネイティブ・フォーマット・ビルダーは、文字でインバウンドの固定長ネイティブ・データを処理します。トランスレータは、内部で文字データを使用します。12cのマルチバイト・ストリーミングのサポートにより、文字ではなくバイトでフィールドの長さを指定できます。これにより、インバウンドOracleトランスレータは、バイトとしてデータを読取り、使用されるエンコーディングに基づいて文字に変換できます。同様に、アウトバウンド・トランスレータはXMLデータを(文字ではなく)バイトに変換し、出力ストリームに書き込みます。

6.2.3.1 初期の問題

しかし、バイトとしてフィールド長を指定したり、バイトによる長さの指定が必要な固定長データを処理することが必要な場合もあります。固定長バイナリ・データでは、文字の長さを指定しても意味がないため、バイトでの指定はとても役に立ちます。

これは、シングルバイト・キャラクタ・セットでは問題になりませんが、バイト単位の長さは文字単位の長さとは等しくないため、マルチバイト・キャラクタ・セットでは問題になります。

6.2.3.2 解決策

この問題を解決してバイトでフィールド長を指定できるようにするために、NXSDトランスレータはバイトでのフィールド長の指定をサポートしています。特に、長さの単位は、ByteまたはCharのいずれかで指定できます。デフォルト値はCharです。この単位の長さを指定するには、次の規則を使用します。

nxsd:lengthUnits="Byte|Char"

Byteではフィールド長がバイトによって変換されるように指定され、Charではフィールド長が文字によって指定されることが示されています。

インバウンドとアウトバウンドの両方のマルチバイト変換に指定するファイルは、手動で変更する必要があります。ネイティブ・フォーマット・ビルダーのユーザー・インタフェースからは実行できません。

6.2.3.3 パディング・データの指定

インバウンド・データをパディング・データとして指定することもできます。これを行うと、トランスレータによってパディング・データの発生がすべて取り除かれます。

この機能を使用するには、取り除かれるパディング・バイト・データの書式をトランスレータで把握できるようにする必要があります。そのためには、次の規則を使用します。

nxsd:paddedDataType="decimal|binary|octal|hexbinary|string" nxsd:paddedBy="XYZ"

次の表に、入力として指定できるパディング・データ型の書式の説明を示します。


書式 説明

10進

パディング・データを10進数の書式で指定します。パディングされるバイトに対応する10進数の値を指定する必要があります。

各10進数は、nnnの書式で表します(例: 32は032と表します)。複数の数字を指定する場合は、各数字を同じ書式にする必要があります(例: 001002123は3バイト(1、2および123)を意味します)。

nxsd:paddedDataType="decimal" nxsd:padStyle="head"
nxsd:paddedBy='032032'

バイナリ

パディング・データを2進数の書式で指定します。パディングされるバイトに対応する2進数の値を指定する必要があります。パディング・データを1バイトを超えて指定する場合は、各バイトに対応する長さを8にする必要があります。次に例を示します。

nxsd:paddedDataType="binary" nxsd:padStyle="head" nxsd:paddedBy='0010000000100000'/

8進

パディング・データを8進数の書式で指定します。パディングされるバイトに対応する8進数の値を指定する必要があります。パディング・データを1バイトを超えて指定する場合は、各バイトに対応する長さを3にする必要があります。例:

nxsd:paddedDataType="octal" nxsd:padStyle="head" nxsd:paddedBy='040040'

16進

パディング・データを16進数の書式で指定します。パディングされるバイトに対応する16進数の値を指定する必要があります。パディング・データを1バイトを超えて指定する場合は、各バイトに対応する長さを2にする必要があります。例:

nxsd:paddedDataType="hexBinary" nxsd:padStyle="head" nxsd:paddedBy='2020'

string

パディング・データを文字列の書式で指定します。トランスレータは、スキーマ・レベルで指定されたエンコーディング(nxsd:encoding)を使用します。例:

nxsd:paddedDataType="string" nxsd:padStyle="head"nxsd:paddedBy='

注意:

paddedDataType="string"の場合のみ、パディングでSJIS文字を使用できることに注意してください。

6.2.3.4 接頭辞または接尾辞の指定

受信データに追加される可能性がある接頭辞および接尾辞は、XMLにパブリッシュされる前に指定することもできます。これを行うには、次の規則を使用します。

nxsd:prefixWith="XXXX" nxsd:suffixWith="YYYY"

注意:

FixedLengthスタイルのバイト・モードでデータの読取り/書込みをする間は、base64BinaryデータおよびhexBinaryデータを使用した接頭辞と接尾辞の指定がトランスレータではサポートされません。

6.2.3.5 マルチストリーム・データによるトランスレータの動作

トランスレータの動作は、XMLにパブリッシュされるデータのタイプに依存します。たとえば、次のようにタイプを指定できます。

type="xsd:string|xsd:hexBinary|xsd:base64Binary"

データ・タイプがstringに指定されている場合は、入力ストリームに対して指定されたバイト数がトランスレータによって読み取られます。

ただし、入力ストリームに十分なデータが含まれていない場合は、トランスレータによって例外がスローされます。

指定されたバイト数がトランスレータによって読み取られると、その読み取ったバイトからパディング・データがすべて取り除かれます。パディング・データを削除した後に、トランスレータは残りのバイトを文字に変換します。

残りのバイトが文字境界に一致しないか、または残りのバイトがなんらかの理由で文字に変換できない場合は、トランスレータにより例外がスローされます。

データを文字に変換することに成功した場合、それらの文字はXMLにパブリッシュされます。

指定するデータ・タイプがhexBinaryまたはbase64Binaryの場合は、パディング・データの削除後に、トランスレータによって残りのバイトが指定されたデータ・タイプに変換され、さらにXMLにパブリッシュされます。

6.2.3.6 アウトバウンド変換の動作

アウトバウンド変換では、バイトでフィールド長を指定できます。トランスレータにより、XML内で指定されたデータに対応するバイトが生成されます。

データがバイトに変換されると、トランスレータではまず接頭辞または接尾辞(存在する場合)が削除されます。

文字列タイプ(スキーマでxsd:hexBinaryまたはxsd:base64Binaryとして定義されていない要素)では、パディングおよび書出しのために値をバイトに変換する前に接頭辞と接尾辞が削除されます。

バイナリ・タイプでは、接頭辞と接尾辞は前述のとおり使用できません。

トランスレータは、スキーマで指定された長さに従って生成されたバイト数をチェックします。生成されたバイト数がスキーマで指定されたものより大きい場合は、トランスレータによって例外がスローされます。

生成されたバイトが長さで指定されたものより小さい場合は、トランスレータにより、生成されたバイトの開始位置または終了位置にpaddedByデータがスキーマの指定に従って追加されます。

6.2.3.7

次の例は、変換を表すXSD、XMLおよびテキスト・ファイルを示しています。

6.2.3.7.1 Base 64バイナリ・パディング・データ

次の例は、Base 64バイナリ・パディング・データの変換を示しています。XSDで、トランスレータはnxsd:paddedDataType=を使用して文字列を削除するよう指示されます

<?xml version="1.0" encoding="SJIS"?>
 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
            targetNamespace="http://xmlns.oracle.com/test"
            xmlns:tns="http://xmlns.oracle.com/test"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified" 
              nxsd:stream="bytes" nxsd:version="NXSD" 
                   nxsd:encoding="SJIS" >
  <xsd:element name="root">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="field1" type="xsd:base64Binary" nxsd:style="fixedLength" nxsd:length="14"
           nxsd:lengthUnit="byte" nxsd:paddedDataType="string" 
            nxsd:padStyle="head" nxsd:paddedBy="‚Ì"/>
      <xsd:element name="field2" type="xsd:base64Binary"
              nxsd:style="fixedLength" nxsd:length="13" 
               nxsd:lengthUnit="byte"  
                   nxsd:paddedDataType="string" 
                    nxsd:padStyle="tail" 
                     nxsd:paddedBy="‚Ì"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

XMLは次のとおりです

<root xmlns="http://xmlns.oracle.com/test">
   <field1>g32Di4Ngg2+DQ4Nn</field1>
   <field2>IILMg1SDfIFbg2c=</field2>
</root>
6.2.3.7.2 バイナリ

次の例は、複数フィールドのバイナリ・データの変換を示しています。

XSDは次のとおりです。フィールド長を示すnxsd:lengthUnits="Byte"はバイトで変換されます。

<?xml version="1.0" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
            targetNamespace="http://style.onron.com/pcbpel/demo"
            xmlns:tns="http://style.onron.com/pcbpel/demo"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified"              nxsd:stream="bytes" nxsd:version="NXSD" 
            nxsd:encoding="SJIS"
            >
  <xsd:element name="Root-Element">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="field1" type="xsd:base64Binary" nxsd:style="fixedLength" nxsd:length="10" 
               nxsd:lengthUnit="Byte"/>
                <xsd:element name="field2" 
              type="xsd:base64Binary" nxsd:style="fixedLength" 
                     nxsd:length="10" 
                    nxsd:lengthUnit="Byte"/>
        <xsd:element name="field3" type="xsd:hexBinary" 
                nxsd:style="fixedLength" nxsd:length="20"
                 nxsd:lengthUnit="Byte"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

XMLは次のとおりです。

<Root-Element xmlns="http://style.onron.com/pcbpel/demo">
   <field1>gqCCooKkICAgIA==</field1>
   <field2>gqmCq4KtICAgIA==</field2>
   <field3>82BD82BF82C282C482C620202020202020202020
                    </field3>
</Root-Element>
6.2.3.7.3 シフトJISエンコーディング

次の例は、バイトでのシフトJISエンコーディングを示しています。

XSDは次のとおりです。

<?xml version="1.0" encoding="SJIS"?>
 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/
                                pcbpel/nxsd"
            targetNamespace="http://xmlns.oracle.com/
                              test"
            xmlns:tns="http://xmlns.oracle.com/test"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified"
              nxsd:stream="bytes" 
               nxsd:version="NXSD"
                  nxsd:encoding="SJIS" >
  <xsd:element name="root">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="field1"
           type="xsd:hexBinary"
                  nxsd:style="fixedLength"
        nxsd:length="14" nxsd:lengthUnit="byte" 
            nxsd:paddedDataType="string" 
                     nxsd:padStyle="head"
                nxsd:paddedBy="‚Ì"/>
      <xsd:element name="field2" 
                  type="xsd:hexBinary" 
            nxsd:style="fixedLength"
                  nxsd:length="13" 
            nxsd:lengthUnit="byte"  
            nxsd:paddedDataType="string" 
            nxsd:padStyle="tail"                   nxsd:paddedBy="‚Ì"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

対応するXMLは次のとおりです。

<root xmlns="http://xmlns.oracle.com/test">
   <field1>837D838B8360836F83438367</field1>
   <field2>2082CC8354837C815B8367</field2>
</root>
6.2.3.7.4 識別子の長さの例

IdentifierLengthコンストラクトは実際のデータの長さが保存される文字数およびバイト数を示し、lengthUnitによりバイトでフィールド長を指定できます。

<?xml version="1.0" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
            targetNamespace="http://style.onron.com/pcbpel/demo"
            xmlns:tns="http://style.onron.com/pcbpel/demo"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified"
               nxsd:stream="bytes" nxsd:version="NXSD" 
            nxsd:encoding="SJIS"
            >
            
  <xsd:element name="Root-Element">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="field1" type="xsd:string"
              nxsd:style="fixedLength" 
              nxsd:identifierLength="2" 
              nxsd:lengthUnit="Byte"/>
        <xsd:element name="field3" type="xsd:string"
              nxsd:style="fixedLength" 
              nxsd:identifierLength="2" 
              nxsd:lengthUnit="Byte"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
6.2.3.7.5 識別子の例(base64BInary)

次の例は類似したIdentifierlength文を示していますが、タイプがbase64Binaryである部分が異なります。

XSDは次のとおりです。

<?xml version="1.0" ?>
 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
            targetNamespace="http://style.onron.com/pcbpel/demo"
            xmlns:tns="http://style.onron.com/pcbpel/demo"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified" nxsd:stream="bytes" nxsd:version="NXSD" 
            nxsd:encoding="SJIS"
            >
            
  <xsd:element name="Root-Element">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="field1" type="xsd:base64Binary"                  nxsd:style="fixedLength" nxsd:identifierLength="2" 
          nxsd:lengthUnit="Byte"/>
        <xsd:element name="field3" type="xsd:hexBinary"
          nxsd:style="fixedLength" 
          nxsd:identifierLength="2" nxsd:lengthUnit="Byte"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

XMLは次のとおりです。

<Root-Element xmlns="http://style.onron.com/pcbpel/demo">
   <field1>gqCCooKkICAgIA==</field1>
   <field3>82BD82BF82C282C482C620202020202020202020</field3>
</Root-Element>
6.2.3.7.6 識別子: SJISを使用したパディング・データ

次に類似した識別子の例を示しますが、パディング・データ(32文字にパディング)を使用し、SJISエンコーディングに変換する部分が異なります。

XSDは次のとおりです。

<?xml version="1.0" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
            targetNamespace="http://style.onron.com/pcbpel/demo"
            xmlns:tns="http://style.onron.com/pcbpel/demo"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified" 
              nxsd:stream="bytes" nxsd:version="NXSD" 
              nxsd:encoding="SJIS"
            >
  <xsd:element name="Root-Element">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="field1" type="xsd:string"
           nxsd:style="fixedLength" nxsd:identifierLength="2" nxsd:lengthUnit="Byte" nxsd:padStyle="head" nxsd:paddedBy='32'/>
        <xsd:element name="field3" type="xsd:string" 
           nxsd:style="fixedLength" 
           nxsd:identifierLength="2"  
           nxsd:lengthUnit="Byte" 
           nxsd:padStyle="tail" 
           nxsd:paddedBy='32'/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
6.2.3.7.7 識別子: バイナリのパディング

もう1つの識別子の例は、パディングされるバイナリ・データを示しています。

この例のXSDは次のとおりです。

<?xml version="1.0" ?>
 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
            targetNamespace="http://style.onron.com/pcbpel/demo"
            xmlns:tns="http://style.onron.com/pcbpel/demo"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified" nxsd:stream="bytes" nxsd:version="NXSD" 
            nxsd:encoding="SJIS"
            >
  <xsd:element name="Root-Element">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="field1" type="xsd:base64Binary" nxsd:style="fixedLength" nxsd:identifierLength="2"
          nxsd:lengthUnit="Byte" nxsd:padStyle="head" 
           nxsd:paddedBy='32'/>
        <xsd:element name="field3" type="xsd:hexBinary" 
           nxsd:style="fixedLength" nxsd:identifierLength="2" nxsd:lengthUnit="Byte" nxsd:padStyle="tail" 
           nxsd:paddedBy='32'/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

XMLは次のとおりです。

<Root-Element xmlns="http://style.onron.com/pcbpel/demo">
   <field1>gqmCq4KC</field1>
   <field3>82BD82BF82C282C482C6</field3>
</Root-Element>
6.2.3.7.8 マルチバイト・バイナリ要素のパディング

マルチバイト・バイナリのパディングのXSDは次のとおりです。

<?xml version="1.0" ?>
 
 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
            targetNamespace="http://style.onron.com/pcbpel/demo"
            xmlns:tns="http://style.onron.com/pcbpel/demo"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified" 
                nxsd:stream="bytes"
                nxsd:version="NXSD" 
            nxsd:encoding="SJIS"
            nxsd:validateNxsd="true">
            
  <xsd:element name="Root-Element">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="field1" type="xsd:base64Binary" nxsd:style="fixedLength" nxsd:length="10" nxsd:lengthUnit="Byte" nxsd:paddedDataType="binary" nxsd:padStyle="head" nxsd:paddedBy='0010000000100000'/>

        <xsd:element name="field2" type="xsd:hexBinary" 
           nxsd:style="fixedLength" nxsd:length="20" 
           nxsd:lengthUnit="Byte" nxsd:padStyle="tail" 
          nxsd:paddedDataType="binary" 
          nxsd:paddedBy='0010000000100000'/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

XMLは次のとおりです。

<Root-Element xmlns="http://style.onron.com/pcbpel/demo">
   <field1>gqmCq4Kt</field1>
   <field2>82BD82BF82C282C482C6</field2>
</Root-Element>
6.2.3.7.9 マルチバイトの10進数のパディング

マルチバイトの10進数のパディングのXMLは次のとおりです。

<?xml version="1.0" ?>
 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
            targetNamespace="http://style.onron.com/pcbpel/demo"
            xmlns:tns="http://style.onron.com/pcbpel/demo"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified" 
               nxsd:stream="bytes" 
               nxsd:version="NXSD" 
               nxsd:encoding="SJIS">
            
  <xsd:element name="Root-Element">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="field1" type="xsd:base64Binary" nxsd:style="fixedLength" nxsd:length="10" 
         nxsd:lengthUnit="Byte"
         nxsd:paddedDataType="decimal" 
         nxsd:padStyle="head" 
         nxsd:paddedBy='032032'/> 
        <xsd:element name="field2" type="xsd:hexBinary" 
        nxsd:style="fixedLength" nxsd:length="20"
         nxsd:lengthUnit="Byte" nxsd:padStyle="tail" 
         nxsd:paddedDataType="decimal" 
         nxsd:paddedBy='032032'/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

6.2.4 SOSIサポート

トランスレータは、入力ストリームからバイト(SHIFT_OUT、SHIFT_IN)をエスケープするためのサポートも提供しています。

このサポートは、特にSJISエンコーディングをサポートするために提供されており、このエンコーディングでは、混在2バイト・キャラクタ・セット・モードで、モードの変更(1バイトから2バイト)を示すために、SHIFT_OUTバイトおよびSHIFT_INバイトがデータに挿入されます。

トランスレータでSOSIサポートを使用するには、次の規則を使用します。

nxsd:escapeBytes="sosi"

paddedDataType="string"の場合のみ、パディングでSJIS文字を使用できることに注意してください。

6.3 トランスレータXPath関数

トランスレータXPath関数では、データをネイティブ・フォーマット(CSV、固定長、タブ区切り、COBOLコピーブックなどのフォーマット)からXMLフォーマットに、およびXMLフォーマットからネイティブ・フォーマットに変換できます。トランスレータXPath関数には、ストリーミングと非ストリーミングの2タイプがあります。

違いは、ストリーミング・トランスレータXPath関数はバッチ処理によるトランスフォーメーション・アプローチを実行するのに対して、非ストリーミングXPath関数はこのアプローチを実行しないことです。バッチ処理によるトランスフォーメーション・アプローチでは、数GB程度のファイルをメモリー問題が発生することなく処理できます。

この項には次のトピックが含まれます:

6.3.1 用語

この項では、トランスレータ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文書も処理可能です。

6.3.2 トランスレータXPath関数

ファイルの読取りおよび書込み中にトランスレータが必要になる場合があります。この項では、次のトランスレータXPath関数について説明します。

6.3.2.1 doTranslateFromNative関数

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パラメータの設定に応じた処理が行われます。

  • 'DOM': 変換したデータをDOMとして返します。

  • 'ATTACHMENT': 変換したデータを添付として返します。XPath関数にオプション・パラメータ(attachmentElement)が指定されている場合、XPath関数は対応するhref属性を使用して、変換したXMLを書き込みます。これに対して、このパラメータが未指定の場合は、XPath関数はデータベース・ベースの新しい添付を作成し、これを返します。詳細は、次の例を参照してください。

  • 'SDOM': 変換したデータをSDOMとして返します。これは、返されるXMLファイルが非常に大きい場合は使用が必須です。

attachmentElement

このパラメータはオプションです。これは、返されるXMLファイルの添付です。


例 - 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データです。

例 - 入力データが添付で、DOMに変換する必要がある場合

  1. attachmentElementをBPELプロセスのスキーマに次のように定義します。

    <schema targerNamespace="…">
            <element name="attachmentElement">
                <complexType>
                    <attribute name="href" type="string"/>
                </complexType>
            </element>
    </schema>
    
  2. タイプが添付要素の変数をBPELプロセスのスキーマに次のように作成します。

      <variables>
         <variable…/>
        <variable name="attachmentVariable"          type="client:attachmentElement"/>
      </variables>
    
  3. 変換する必要があるソース・ファイルのパスを次のように割り当てます。

    <assign name="AssignAttachmentReference">
      <copy>
        <from expression="'/tmp/xpath/in/address.csv'"/>
        <to variable="attachmentVariable"
                query="/client:attachmentElement/@href"/>
      </copy>
    </assign>
    
  4. 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データです。

例 - XPath関数の構成: 入力データがBase64でエンコードされていて、DOMに変換する必要がある場合

  1. base64でエンコードされている要素をBPELプロセスのスキーマに次のように定義します。

    <schema targerNamespace="…">
      <element name="mtomElement" type="base64Binary"/>
    </schema>
    
  2. タイプがmtom要素の変数をBPELプロセスのスキーマに次のように作成します。

    <variables>
         <variable…/>
        <variable name="encodedData" type="client:mtomElement"/>
    </variables>
    
  3. 変換する必要があるソース・ファイルのパスを次のように割り当てます。

    <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データです。

例 - XPath関数の構成: 入力データが文字列タイプで、ファイル・パスで参照される添付に変換する必要がある場合

  1. attachmentElementをBPELプロセスのスキーマに次のように定義します。

    <schema targerNamespace="…">
            <element name="attachmentElement">
                <complexType>
                    <attribute name="href" type="string"/>
                </complexType>
            </element>
    </schema>
    
  2. タイプが文字列の入力変数と、タイプが添付の出力変数を、BPELプロセスのスキーマに次のように作成します。

    <variables>
        <variable…/>
        <variable name="csv_data" type="xsd:string"/> 
        <variable name="returnAttachmentVariable" 
                type="client:attachmentElement"/> 
    </variables>
    
  3. 変換する必要があるCSVデータを次のように割り当てます。

    <assign name="assignCSVData">
        <copy>
          <from expression="'this, is, csv, data…'"/>
          <to variable="csv_data"/>
        </copy>
    </assign>
    
  4. 変換したデータを格納するファイルのパスを次のように添付に移入します。

    <assign name="AssignAttachmentReferenceForOutput">
        <copy>
          <from expression="'/tmp/xpath/output/address.xml'"/>
          <to variable=" returnAttachmentVariable "
                query="/client:attachmentElement/@href"/>
        </copy>
    </assign>
    
  5. 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は、返された添付です。

注意: この例では、targetTypeATTACHMENTに設定され、returnAttachmentVariableは変換したXMLが書き込まれるファイル・パスを指しています。

ただし、5つ目のパラメータ(bpws:getVariableData('returnAttachmentVariable'))はオプションです。このパラメータが未指定の場合、XPath関数ではデータベース・ベースの添付を作成し、これを返します。これを行うには、XPath関数を次のように構成します。

  1. attachmentElementをBPELプロセスのスキーマに次のように定義します。

    <schema targerNamespace="…">
            <element name="attachmentElement">
                <complexType>
                    <attribute name="href" type="string"/>
                </complexType>
            </element>
    </schema>
    
  2. タイプが文字列の入力変数と、タイプが添付の出力変数を、BPELプロセスのスキーマに次のように作成します。

    <variables>
        <variable…/>
        <variable name="csv_data" type="xsd:string"/> 
        <variable name="returnAttachmentVariable"
            type="client:attachmentElement"/> 
    </variables>
    
  3. 変換する必要がある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を使用する必要があります。

6.3.2.2 doTranslateToNative関数

doTranslateToNative XPath関数は、入力DOMを文字列データまたは添付に変換します。

構文

ora:dotranslateToNative('input','nxsdTemplate','nxsdRoot','targetType','attachmentElement?')

次の表では、前述の構文で使用されているこの関数のパラメータについて説明します。


表6-8 doTranslateToNative関数のパラメータ

パラメータ 説明

input

XPath関数の入力データ。データとしては、CSVなどのネイティブ・フォーマットに変換する必要があるDOMまたはSDOMデータを使用できます。

nxsdTemplate

入力データからXMLフォーマットへの変換に使用するNXSDスキーマ。

nxsdRoot

NXSDスキーマ内のルート要素の名前。

targetType

このパラメータは、XPath関数がXMLデータをネイティブ・フォーマットに変換する方法を指定します。'STRING'または'ATTACHMENT'に設定する必要があります。次のように、targetTypeパラメータの設定に応じた処理が行われます。

  • STRING: 変換したデータを文字列として返します。

  • ATTACHMENT: 変換したデータを添付として返します。XPath関数にオプション・パラメータ(attachmentElement)が指定されている場合、XPath関数は対応するhref属性を使用して、変換したネイティブ・データを書き込みます。これに対して、このパラメータが未指定の場合は、XPath関数はデータベース・ベースの新しい添付を作成し、これを返します。詳細は、次の例を参照してください。

attachmentElement

このパラメータはオプションです。これは、変換したデータが書き込まれる添付です。


例 - 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データを含んでいる文字列変数です。

例 - XPath関数の構成: 入力XML DOMを、変換したCSVのターゲット・ファイルのパスを表す添付に変換する場合

  1. attachmentElementをBPELプロセスのスキーマに次のように定義します。

    <schema targerNamespace="…">
            <element name="attachmentElement">
                <complexType>
                    <attribute name="href"
                        type="string"/>
                </complexType>
            </element>
    </schema>
    
  2. タイプがattachmentElementの入力変数をBPELプロセスのスキーマに次のように作成します。

    <variables>
         <variable…/>
        <variable name="inputDOM"
            type="ns1:Root-Element"/>
        <variable name="attachmentVariable" 
             type="client:attachmentElement"/>
      </variables>
    
  3. 変換したCSVを書き込むターゲット・ファイルのパスを次のように割り当てます。

    <assign name="AssignAttachmentReference">
      <copy>
         <from expression=
                         "'/tmp/xpath/out/address.csv'"/>
         <to variable="attachmentVariable"
                query="/client:attachmentElement/@href"/>
      </copy>
    </assign>
    
  4. 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で表されるターゲット出力ファイルへのパスです。

注意: この例では、targetTypeATTACHMENTに設定され、AttachmentVariableは変換したCSVファイルが書き込まれるファイル・パスを指しています。

ただし、5つ目のパラメータ(bpws:getVariableData('attachmentVariable'))はオプションです。このパラメータが未指定の場合、XPath関数ではデータベース・ベースの添付を作成し、これを返します。これを行うには、XPath関数を次のように構成します。

  1. attachmentElementをBPELプロセスのスキーマに次のように定義します。

    <schema targerNamespace="…">
            <element name="attachmentElement">
                <complexType>
                    <attribute name="href" type="string"/>
                </complexType>
            </element>
    </schema>
    
  2. タイプがattachmentElementの入力変数をBPELプロセスのスキーマに次のように作成します。

    <variables>
         <variable…/>
        <variable name="inputDOM" type="ns1:Root-Element"/>
        <variable name="attachmentVariable" 
           type="client:attachmentElement"/>
      </variables>
    
  3. 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に移入されます。

6.3.2.3 doStreamingTranslate関数

XPath関数は、バッチ処理によるトランスフォーメーション・アプローチを実行します。このアプローチでは、数GB程度のファイルをメモリー問題が発生することなく処理できます。トランスフォーメーション・エンジンはトランスフォーメーションの結果をそのメモリーに格納しないため、任意の大きさのペイロードを処理できます。トランスフォーメーション・エンジンは、大きなファイルの要素のバッチ処理後に、メモリーをフラッシュします。デフォルトのバッチ・サイズは要素数10000で、トランスフォーメーション・エンジンはこの数の要素を処理するとメモリーをフラッシュします。このパラメータはオプションであり、内部で使用されます。

注意:

バッチ処理によるトランスフォーメーション・アプローチは、繰返し構造のXMLドキュメントに対してのみサポートされています。

構文

ora:doStreamingTranslate('input','streamingXpathContext','targetType','attachmentElement?')

表6-9に、前述の構文で使用されているこの関数のパラメータを示します。


表6-9 doStreamingTranslateのパラメータ

パラメータ 説明

input

XPath関数の入力データ。データとしては、SDOMまたは添付要素を使用できます。

streamingXpathContext

XPathコンテキストを表すDOM。

targetType

このパラメータは、XPath関数が入力データを添付に変換する方法を指定します。SDOMまたはATTACHMENTに設定する必要があります。

attachmentElement

このパラメータはオプションです。これは、データがストリームされる添付です。

sourceDocumentType

ソース要素がattachmentElementを指している場合は、ATTACHMENTに設定します。


streamingXPathContextパラメータは、ストリーミング・トランスフォーメーションのコンテキストを指定し、次のスキーマ要素に一致する必要があります。

例 - 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="sourceDocumentType"
                    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>

表6-10 streamingXPathContextパス・パラメータ

パラメータ 説明

sourceSchema

ネイティブ・データからXMLへの変換に使用するソースNXSDスキーマ。

sourceRootElement

ネイティブ・データからXMLへの変換に使用するソースNXSDスキーマ。

sourceType

入力データに応じてxmlまたはnativeに設定します。

xsl

XSLの相対パス。

targetSchema

XMLからネイティブ・データへの変換に使用するターゲットNXSDスキーマ。

targetRootElement

ターゲットNXSDスキーマ内のルート要素の名前。

targetType

出力データに応じてxmlまたはnativeに設定します。

batchSize

トランスフォーメーション・エンジンがメモリーをフラッシュするまでに処理する要素数。


6.3.2.4 バッチ処理によるトランスフォーメーションの特徴

この項では、バッチ処理によるトランスフォーメーションが持つ次の特徴を説明します。

適用性

バッチ処理によるトランスフォーメーションの適用対象は次のとおりです。

  • 繰返し構造のドキュメント

  • ドキュメント全体の集計が不要なXSLT

XSLTエンジンのバッチ起動

XSLTエンジンのバッチ起動の主な手順は次のとおりです。

  1. ソース・ドキュメントを、1つ以上のレコードを含む複数のバッチに分割します。

  2. 1度に1つのバッチについてXSLTトランスフォーメーションを実行します。

  3. XSLT起動の結果を単一のターゲット・ドキュメントに結合します。

分割または結合の即時実行

ソース・ドキュメントの分割と分割結果のターゲット・ドキュメントへの結合は、次のように実行されます。

  • 中間メモリーやディスク記憶域は使用しません。

  • SAXイベントのパイプラインまたはインターセプトが行われます。

小さくて済む、メモリーでのフットプリント

バッチ処理によるトランスフォーメーションでは、次のタスクにメモリーをあまり使用しません。

  • 任意の大きさ(ターゲット・システムによって制約あり)のXMLドキュメントの変換

  • スタンドアロン・テストでは、540MBの変換は3分未満で完了

次の例では、ストリーミング・トランスフォーメーションXPath関数を使用して、FlatStructureファイル・アダプタのサンプルを実装します。このサンプルの使用例では、インバウンドのネイティブ添付をCSVフォーマットからXMLフォーマットに変換してから、生成されたXMLファイルにユーザー指定のXSLファイルを適用します。これにより、変換済XMLファイルは、添付が表す固定長コンテンツに変換されます。

例 - ストリーミング・トランスフォーメーションXPath関数の使用

  1. attachmentElementを次のように定義します。

    例 - attachmentElementの定義

    <schema targerNamespace="…">
        <element name="attachmentElement">
            <complexType>
               <attribute name="href"
                  type="string"/>
            </complexType>
        </element>
    </schema>
    
  2. インバウンド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>
    

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

この説では、次の使用例について説明します。

注意:

現在、ネイティブ・フォーマット・ビルダーでは、複数文字のデリミタを含むデータのサンプリングはサポートされていません。この種のデータをサンプリングするには、適切なDelimited By文字列を使用してNXSDをハンド・コーディングします。

6.4.1 デリミタ付きファイル構造のスキーマの定義

カンマ区切り値(CSV)ファイルは、一般的なXML以外のファイル構造です。

このネイティブ・ファイルのXMLスキーマを作成する際には、ネイティブ・フォーマット・ビルダー・ウィザードの「デリミタ」オプションを使用します。

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

この使用例では、ネイティブ・フォーマット・ビルダーにより、名前、番地、市区町村、都道府県および国などの住所詳細を含んだデリミタ付きサンプル・ファイル・タイプが使用されます。このサンプル・ネイティブ・ファイル内の要素は、すべてカンマ(,)で区切られています。対応するNXSDを生成し、同様にテストできます。この使用例を実行する手順は、次のとおりです。

  1. サンプル・テキスト・ファイル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
    
  2. 図6-4に示すように、アダプタ構成ウィザードの「メッセージ」ページにナビゲートし、「ネイティブ・フォーマットのスキーマの定義」ボタンをクリックします。

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

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

    図6-5に示すように、「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。

    図6-5 「ネイティブ・フォーマット・ビルダー・ウィザード - ようこそ」ページ

    図6-5の説明が続きます
    「図6-5 「ネイティブ・フォーマット・ビルダー: ようこそ」ページ」の説明
  3. 「次」を選択します。図6-6に示すように、「タイプの選択」ページが表示されます。

    図6-6 「ネイティブ・フォーマット・ビルダー・ウィザード - タイプの選択」ページ

    図6-6の説明が続きます
    「図6-6 「ネイティブ・フォーマット・ビルダー・ウィザード - タイプの選択」ページ」の説明
  4. 「次」を選択します。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。
  5. 図6-7に示すように、「参照」をクリックしてaddress-csv.txtファイルを選択します。

    図6-7 「ネイティブ・フォーマット・ビルダー・ウィザード - ファイルの説明」ページ

    図6-7の説明が続きます
    「図6-7 「ネイティブ・フォーマット・ビルダー・ウィザード - ファイルの説明」ページ」の説明
  6. 「次」を選択します。図6-8に示すように、「レコード編成」ページが表示されます。

    図6-8 「ネイティブ・フォーマット・ビルダー・ウィザード - レコード編成」ページ

    図6-8の説明が続きます
    「図6-8 「ネイティブ・フォーマット・ビルダー・ウィザード - レコード編成」ページ」の説明
  7. 「ファイルはマルチ・レコード・インスタンスを含む」を選択してから「1つのタイプの複数レコード」を選択し、「次へ」をクリックします。「要素の指定」ページが表示されます。
  8. 図6-9に示すように、「複数レコードを含む要素名の入力」フィールドにAddressBookと入力し、「レコードを表す要素名の入力」フィールドにAddressと入力します。

    図6-9 「ネイティブ・フォーマット・ビルダー・ウィザード - 要素の指定」ページ

    図6-9の説明が続きます
    「図6-9 「ネイティブ・フォーマット・ビルダー・ウィザード - 要素の指定」ページ」の説明
  9. 「次」を選択します。図6-10に示すように、「デリミタの指定」ページが表示されます。(複雑なlookAhead戦略の詳細は、「正規表現を使用したレコードの条件付き処理に対する複雑なlookAhead戦略の定義」を参照してください)。

    図6-10 「ネイティブ・フォーマット・ビルダー・ウィザード - デリミタの指定」ページ

    図6-10の説明が続きます
    「図6-10 「ネイティブ・フォーマット・ビルダー・ウィザード - デリミタの指定」ページ」の説明
  10. 「デリミタ」フィールドで「カンマ(,)」オプションが選択されていることを確認し、「次へ」をクリックします。図6-11に示すように、「フィールド・プロパティ」ページが表示されます。

    図6-11 「ネイティブ・フォーマット・ビルダー・ウィザード - フィールド・プロパティ」ページ

    図6-11の説明が続きます
    「図6-11 「ネイティブ・フォーマット・ビルダー・ウィザード - フィールド・プロパティ」ページ」の説明
  11. 「フィールド名として最初のレコードを使用」を選択し、「次へ」をクリックします。図6-12に示すように、「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。

    注意:

    最初のレコードはフィールド名として使用され、変換時にはヘッダー・レコードとして処理されてスキップされます。

    図6-12 「ネイティブ・フォーマット・ビルダー・ウィザード - 生成されたネイティブ・フォーマット・ファイル」ページ

    図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="&quot;" />
                  <xsd:element name="Street1"
              type="xsd:string"
                   nxsd:style="terminated" 
                   nxsd:terminatedBy=","
                   nxsd:quotedBy="&quot;" />
                   <xsd:element name="Street2"
                     type="xsd:string"
                   nxsd:style="terminated"
                   nxsd:terminatedBy=","
                   nxsd:quotedBy="&quot;" />
                  <xsd:element name="City" type="xsd:string"
                   nxsd:style="terminated"
                   nxsd:terminatedBy=","
                   nxsd:quotedBy="&quot;" />
                  <xsd:element name="State"
                     type="xsd:string"
                   nxsd:style="terminated"
                   nxsd:terminatedBy=","
                   nxsd:quotedBy="&quot;" />
                  <xsd:element name="Country"
                      type="xsd:string"
                   nxsd:style="terminated" 
                   nxsd:terminatedBy="${eol}"
                   nxsd:quotedBy="&quot;" />
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
    
  12. 「テスト」をクリックします。図6-13に示すように、「NXSDスキーマのテスト」ダイアログが表示されます。

    図6-13 「NXSDスキーマのテスト」ダイアログ

    図6-13の説明が続きます
    「図6-13 「NXSDスキーマのテスト」ダイアログ」の説明
  13. 「XMLの生成」アイコンをクリックします。図6-14に示すように、生成されたXMLが「NXSDスキーマのテスト」ダイアログの「結果XML」ペインに表示されます。

    図6-14 「NXSDスキーマのテスト」ダイアログ

    図6-14の説明が続きます
    「図6-14 「NXSDスキーマのテスト」ダイアログ」の説明

    対応するネイティブ・スキーマ・フォーマットを使用したネイティブ・データは、次の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>
    
  14. 「OK」をクリックします。図6-12に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示されます。
  15. 「次」を選択します。図6-15に示すように、「ネイティブ・フォーマット・ビルダー: 終了」ページが表示されます。

    図6-15 「ネイティブ・フォーマット・ビルダー・ウィザード - 終了」ページ

    図6-15の説明が続きます
    「図6-15 「ネイティブ・フォーマット・ビルダー・ウィザード - 終了」ページ」の説明
  16. 「終了」をクリックします。図6-16に示すように、生成されたNXSDを含んだアダプタ構成ウィザードの「メッセージ」ページが表示されます。

    図6-16 「アダプタ構成ウィザード - メッセージ」ページ

    図6-16の説明が続きます
    「図6-16 「アダプタ構成ウィザード - メッセージ」ページ」の説明

6.4.1.1 アスタリスク(*)区切り値ファイルの構造の定義

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

このネイティブ・ファイルのXMLスキーマを作成する際には、ネイティブ・フォーマット・ビルダー・ウィザードの「デリミタ」タイプ・オプションを使用します。

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

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

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

ネイティブ・スキーマ

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

6.4.2 固定長ファイル構造のスキーマの定義

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

このネイティブ・ファイルのXMLスキーマを作成するには、ネイティブ・フォーマット・ビルダー・ウィザードの「固定長」オプションを使用します。

この使用例では、ネイティブ・フォーマット・ビルダーにより、名前、番地、市区町村、都道府県および国などの住所詳細を含んだaddressという固定長ファイル・タイプが使用されます。このaddressネイティブ・ファイル内の要素は、すべて固定長です。対応するNXSDを生成し、同様にテストできます。この使用例を実行する手順は、次のとおりです。

  1. サンプル・テキスト・ファイルaddress.txt内のデータは、次のとおりです。
    Name                  Street    City      State     Country
    ABC Private Limited   Street1   Bangalore Karnataka India
    XYZ Private Limited   Street1   Bangalore Karnataka India 
    
  2. 図6-4に示すように、アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。図6-5に示すように、「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
  3. 「次」を選択します。「タイプの選択」ページが表示されます。
  4. 図6-17に示すように、ファイル・タイプとして「固定長」を選択します。

    図6-17 「ネイティブ・フォーマット・ビルダー・ウィザード - タイプの選択」ページ

    図6-17の説明が続きます
    「図6-17 「ネイティブ・フォーマット・ビルダー・ウィザード - タイプの選択」ページ」の説明
  5. 「次」を選択します。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。
  6. 図6-18に示すように、「参照」をクリックしてaddress.txtファイルを選択します。

    図6-18 「ネイティブ・フォーマット・ビルダー・ウィザード - ファイルの説明」ページ

    図6-18の説明が続きます
    「図6-18 「ネイティブ・フォーマット・ビルダー・ウィザード - ファイルの説明」ページ」の説明
  7. 「次」を選択します。図6-19に示すように、「レコード編成」ページが表示されます。

    図6-19 「ネイティブ・フォーマット・ビルダー・ウィザード - レコード編成」ページ

    図6-19の説明が続きます
    「図6-19 「ネイティブ・フォーマット・ビルダー・ウィザード - レコード編成」ページ」の説明
  8. 「1つのタイプの複数レコード」を選択して「次へ」をクリックします。「要素の指定」ページが表示されます。
  9. 図6-20に示すように、「複数レコードを含む要素名の入力」フィールドにAddressBookと入力し、「レコードを表す要素名の入力」フィールドにAddressと入力します。

    図6-20 「ネイティブ・フォーマット・ビルダー・ウィザード - 要素の指定」ページ

    図6-20の説明が続きます
    「図6-20 「ネイティブ・フォーマット・ビルダー・ウィザード - 要素の指定」ページ」の説明
  10. 「次」を選択します。「マルチ・レコード・ファイルのフィールド長」ページが表示されます。
  11. 図6-21に示すように、必要な位置でルーラーをクリックしてサンプル・テキスト領域のフィールドをマーク付けし、「次へ」をクリックします。「フィールド・プロパティ」ページが表示されます。

    図6-21 「ネイティブ・フォーマット・ビルダー・ウィザード - マルチ・レコード・ファイルのフィールド長」ページ

    図6-21の説明が続きます
    「図6-21 「ネイティブ・フォーマット・ビルダー・ウィザード - マルチ・レコード・ファイルのフィールド長」ページ」の説明
  12. 図6-22に示すように、「フィールド名として最初のレコードを使用」を選択します。

    図6-22 「ネイティブ・フォーマット・ビルダー・ウィザード - フィールド・プロパティ」ページ

    図6-22の説明が続きます
    「図6-22 「ネイティブ・フォーマット・ビルダー・ウィザード - フィールド・プロパティ」ページ」の説明
  13. 「次」を選択します。図6-23に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示されます。

    図6-23 「ネイティブ・フォーマット・ビルダー・ウィザード - 生成されたネイティブ・フォーマット・ファイル」ページ

    図6-23の説明が続きます
    「図6-23 「ネイティブ・フォーマット・ビルダー・ウィザード - 生成されたネイティブ・フォーマット・ファイル」ページ」の説明

    対応するネイティブ・スキーマ定義はCSVファイルの定義と似ていますが、固定長スタイルの関連する属性とともに、stylenxsd: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>
    
  14. 「テスト」をクリックします。図6-24に示すように、「NXSDスキーマのテスト」ダイアログが表示されます。

    図6-24 「NXSDスキーマのテスト」ダイアログ

    図6-24の説明が続きます
    「図6-24 「NXSDスキーマのテスト」ダイアログ」の説明
  15. 「XMLの生成」アイコンをクリックします。図6-25に示すように、生成されたXMLが「NXSDスキーマのテスト」ダイアログの「結果XML」ペインに表示されます。

    図6-25 「NXSDスキーマのテスト」ダイアログ

    図6-25の説明が続きます
    「図6-25 「NXSDスキーマのテスト」ダイアログ」の説明

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

    例 - ネイティブ・スキーマFormatTranslated 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>
    
  16. 「OK」をクリックします。図6-23に示すように、「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
  17. 「次」を選択します。図6-15に示すように、「ネイティブ・フォーマット・ビルダー: 終了」ページが表示されます。
  18. 「終了」をクリックします。図6-16に示すように、生成されたNXSDを含んだアダプタ構成ウィザードの「メッセージ」ページが表示されます。

6.4.3 複雑なファイル構造のスキーマの定義

請求書のファイル構造は、前述の使用例で説明したCSV、*SVおよび固定長のファイルの構造よりも複雑です。通常、請求書には購入者の情報、販売者の情報および明細項目が含まれます。これらの各要素には、複合タイプを使用できます。たとえば、購入者要素をpartner-typeとして定義し、partner-typeをid、nameおよびaddressという3つの要素で構成できます。

このネイティブ・ファイルのXMLスキーマを作成する際には、ネイティブ・フォーマット・ビルダー・ウィザードの「複合タイプ」オプションを使用します。

この使用例では、ネイティブ・フォーマット・ビルダーにより、buyer、seller、itemsなどの複数のレコードを含んだinvoiceという複合ファイル・タイプのinvoice.txtが使用されます。この使用例を使用すると、NXSDを生成してテストすることもできます。この使用例を実行する手順は、次のとおりです。

  1. サンプル・テキスト・ファイルinvoice.txt内のデータは、次のとおりです。

    6335722^Company OnêFirst Street   999       San Jose       95129USCA650-801-6250
     ^Oraclê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
    
  2. 図6-4に示すように、アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。図6-5に示すように、「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。

  3. 「Next」をクリックします。図6-26に示すように、「タイプの選択」ページが表示されます。

    図6-26 「ネイティブ・フォーマット・ビルダー・ウィザード - タイプの選択」ページ

    図6-26の説明が続きます
    「図6-26 「ネイティブ・フォーマット・ビルダー・ウィザード - タイプの選択」ページ」の説明
  4. 「複合タイプ(フィールドそのものがレコードで複数のデリミタ・タイプを持つ可能性があるレコードが含まれています)」を選択します。

  5. 「Next」をクリックします。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。

  6. 図6-27に示すように、「参照」をクリックしてinvoice.txtファイルを選択し、「ルート要素」フィールドにInvoiceと入力します。

    図6-27 「ネイティブ・フォーマット・ビルダー・ウィザード - ファイルの説明」ページ

    図6-27の説明が続きます
    「図6-27 「ネイティブ・フォーマット・ビルダー・ウィザード - ファイルの説明」ページ」の説明
  7. 「Next」をクリックします。図6-28に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」が表示されます。

    図6-28 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ

    図6-28の説明が続きます
    「図6-28 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ」の説明

partner-type複合タイプの作成

invoice.txtサンプルを使用して作成できるスキーマ構造は、次のとおりです。

Invoice

Buyer => partner-type

Seller => partner-type

Items => item-type

Invoice-total => double

ネイティブ・データの1行目は購入者の詳細で構成され、販売者の詳細、明細項目および明細項目の合計が続きます。購入者要素と販売者要素の両方が、次のように同じ複雑な構造を持っています。

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

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

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

これをネイティブ・フォーマット・ビルダーで作成するには、次の手順を実行します。

  1. 「複合タイプの追加」アイコンをクリックします。図6-29に示すように、「スキーマ・ツリー」でInvoiceの下に複合タイプ<new_complex_type>が作成されます。

    図6-29 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ

    図6-29の説明が続きます
    「図6-29 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ」の説明
  2. 「サンプル・ファイル」セクションの右ペインからサンプル・テキストの1行目を選択し、「<new_complex_type>」ノードにドラッグ・アンド・ドロップします。「複合タイプ詳細」ダイアログが表示されます。

  3. 図6-30に示すように、「複合タイプ名」フィールドにpartner-typeと入力します。

    図6-30 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ: 「複合タイプ詳細」ダイアログ

    図6-30の説明が続きます
    「図6-30 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ: 「複合タイプ詳細」ダイアログ」の説明
  4. 必要な位置でルーラーをクリックしてサンプル・テキスト領域のフィールドをマーク付けし、「フィールドの生成」ボタンをクリックします。システムが定義済フィールドのデータのスタイルを解釈します。

    注意:

    「固定長」または「混在」デリミタ・タイプ・オプションを選択した場合は、ルーラー・ベースのテキスト領域が表示されます。ルーラーを使用して、サンプル・テキスト内のフィールドを識別する必要があります。デリミタ付きデータの場合は、「デリミタ」フィールドで該当するデリミタを選択または入力します。

  5. 図6-31に示すように、「名前」フィールドにidnameおよびaddressと入力します。

    図6-31 「複合タイプ詳細」ダイアログ

    図6-31の説明が続きます
    「図6-31 「複合タイプ詳細」ダイアログ」の説明
  6. 各フィールドの横にある鉛筆アイコンをクリックし、フィールド・プロパティを編集可能な対応する「フィールド詳細の編集」ダイアログを表示します。たとえば、「名前」フィールドの横にある鉛筆アイコンをクリックします。図6-32に示すように、「フィールド詳細の編集」ダイアログが表示されます。

    図6-32 「フィールド詳細の編集」ダイアログ

    図6-32の説明が続きます
    「図6-32 「フィールド詳細の編集」ダイアログ」の説明
  7. 図6-32に示すように、次のフィールド・プロパティを編集します。

    • タイプ: サンプル・テキストのデータ型。「タイプ」リストで「String」を選択します。

    • スタイル: 複合タイプ要素のスタイルを表します。次の4つのオプションから選択できます。

      • 固定長

      • surrounded

      • terminated

      • 左囲み/右囲み

      この例では、surroundedを選択します。

    • 囲み: このオプションが表示されるのは、「スタイル」オプションでsurroundedを選択した場合です。この例では、「囲み」フィールドにカレット(^)を入力します。

    このパネルに表示されるフィールド・プロパティは、スキーマに使用されているNXSD属性に対応しています。

  8. 「OK」をクリックします。選択したフィールド・プロパティを含んだ「複合タイプ詳細」ダイアログが表示されます。

  9. 「名前」フィールドのidおよびaddressのフィールド・プロパティを確認または編集します。

  10. 「複合タイプ詳細」ダイアログで「OK」をクリックします。図6-33に示すように、ネイティブ・フォーマット・ビルダー「設計スキーマ」ページが表示されます。

    図6-33 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ: partner-type複合タイプ

    図6-33の説明が続きます
    「図6-33 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ: partner-type複合タイプ」の説明

address-type複合タイプの作成

address要素を、さらに固定長の番地、市区町村などのフィールドを含んだ別のcomplex-typeとして定義できます。

これを行うには、次の手順を実行します。

  1. 「スキーマ・ツリー」で別の<noncompliant>ノードを作成します。「partner-type複合タイプの作成」のステップ1を参照してください。

  2. サンプル・テキストの1行目のaddressパートを複合タイプ<noncompliant>にドラッグ・アンド・ドロップします。「複合タイプ詳細」ダイアログが表示されます。

  3. 「複合タイプ名」フィールドにaddress-typeと入力します。

  4. ルーラーをクリックしてサンプル・テキスト領域のフィールドをマーク付けし、「フィールドの生成」ボタンをクリックします。次に、図6-34に示すように、「名前」フィールドにstreet1street2cityzipcountrystateおよびphoneと入力します。

    図6-34 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ: 「複合タイプ詳細」ダイアログ

    図6-34の説明が続きます
    「図6-34 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ: 「複合タイプ詳細」ダイアログ」の説明
  5. 「OK」をクリックします。図6-35に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。

    図6-35 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ

    図6-35の説明が続きます
    「図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に示すように、「フィールド詳細の編集」ダイアログが表示されます。

    図6-36 「フィールド詳細の編集」ダイアログ

    図6-36の説明が続きます
    「図6-36 「フィールド詳細の編集」ダイアログ」の説明
  1. 「タイプ」リストで「address-type」オプションを選択し、「OK」をクリックします。図6-37に示すように、ネイティブ・フォーマット・ビルダー「設計スキーマ」ページでaddressフィールド要素にaddress-typeオプションが割り当てられます。

    図6-37 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ

    図6-37の説明が続きます
    「図6-37 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ」の説明

buyerおよびsellerグローバル要素の作成

  1. 「Invoice」を選択し、「要素の追加」アイコンをクリックします。「スキーマ・ツリー」で、ルート要素「Invoice」の下に要素<new_element>が作成されます。

  2. 名前をbuyerに変更します。

  3. 再び「Invoice」を選択し、「要素の追加」アイコンをクリックします。「スキーマ・ツリー」で、「Invoice」の下に要素<new_element>が作成されます。

  4. 名前をsellerに変更します。

    各buyerおよびsellerノード上にpartner-typeノードをドラッグ・アンド・ドロップして、これらのノードにpartner-type複合タイプを割り当てます。図6-38に示すように、「スキーマ・ツリー」が表示されます。

    図6-38 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ

    図6-38の説明が続きます
    「図6-38 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ」の説明

item-type複合タイプとitemsおよびinvoice-total要素ノードの作成

items要素はitem-typeの配列とみなすことができます。ネイティブ・ファイル内の最後の明細項目では、番号記号(#)の後に明細項目の合計が続いて終了しています。

  1. 「Invoice」を選択し、「要素の追加」アイコンをクリックします。「スキーマ・ツリー」で、「Invoice」の下に要素<new_element>が作成されます。

  2. 名前をitemsに変更します。

  3. 図6-39に示すように、item-type複合タイプを作成してフィールド・プロパティを定義します。

    図6-39 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ

    図6-39の説明が続きます
    「図6-39 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ」の説明
  4. item-type複合タイプをitems要素にドラッグ・アンド・ドロップして、この要素にitem-typeを割り当てます。

  5. items - item-typeを選択して鉛筆アイコンをクリックします。「要素の詳細」ダイアログが表示されます。

    図6-40 「要素の詳細」ダイアログ

    図6-40の説明が続きます
    「図6-40 「要素の詳細」ダイアログ」の説明
  6. 図6-40に示すように、「要素の詳細」ダイアログで次のプロパティを設定します。

    1. 「最大発生数」を「バインドなし」に設定します。

    2. 「配列」を選択します。「セル・セパレータ」および「配列セパレータ」が有効になります。

    3. 「セル・セパレータ」を「${eol}」に設定します。

    4. 「配列セパレータ」を「#」に設定します

    注意:

    要素itemsitem-typeの配列として定義されます。

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

  8. invoice-total要素を作成し、サンプル・テキスト(110000)を<new_element>ノードにドラッグ・アンド・ドロップします。「要素の詳細」ダイアログが表示されます。

  9. 「要素名」フィールドにinvoice-totalと入力し、「フィールドの生成」をクリックします。図6-41に示すように、「アラート」メッセージが表示されます。

    図6-41 「要素の詳細」ダイアログ - 「アラート」メッセージ

    図6-41の説明が続きます
    「図6-41 「要素の詳細」ダイアログ - 「アラート」メッセージ」の説明

    グローバル要素のサンプル・データで単一フィールドが識別されている場合、このデータのプロパティがグローバル要素自体に適用されます。

  10. 「アラート」メッセージで「OK」をクリックします。「要素の詳細」ダイアログが表示されます。

  11. 「データ型」リストで「double」を選択し、「OK」をクリックします。図6-42に示すように、ネイティブ・フォーマット・ビルダー「設計スキーマ」ページが表示されます。

    図6-42 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ: 完成したスキーマ・ツリー

    図6-42の説明が続きます
    「図6-42 「ネイティブ・フォーマット・ビルダー・ウィザード - 設計スキーマ」ページ: 完成したスキーマ・ツリー」の説明
  12. 「Next」をクリックします。図6-43に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示され、ネイティブ・フォーマット・ファイルが表示されます。

    図6-43 「ネイティブ・フォーマット・ビルダー・ウィザード - 生成されたネイティブ・フォーマット・ファイル」ページ

    図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>
    
  13. 「テスト」をクリックします。図6-44に示すように、「NXSDスキーマのテスト」ダイアログが表示されます。

    図6-44 「NXSDスキーマのテスト」ダイアログ

    図6-44の説明が続きます
    「図6-44 「NXSDスキーマのテスト」ダイアログ」の説明
  14. 「XMLの生成」アイコンをクリックします。図6-45に示すように、「NXSDスキーマのテスト」ダイアログの右ペインに「結果XML」が表示されます。

    図6-45 「NXSDスキーマのテスト」ダイアログ - 結果XML

    図6-45の説明が続きます
    「図6-45 「NXSDスキーマのテスト」ダイアログ - 結果XML」の説明

    次の例に、変換済の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>
    
  15. 「OK」をクリックします。図6-43に示すように、「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。

  16. 「Next」をクリックします。図6-15に示すように、「ネイティブ・フォーマット・ビルダー: 終了」ページが表示されます。

  17. 「終了」をクリックします。図6-16に示すように、生成されたNXSDを含んだアダプタ構成ウィザードの「メッセージ」ページが表示されます。

6.4.4 ネームスペースのないXMLのネームスペースの削除または追加

ネイティブ・データがXMLでありそのXMLにネームスペースがない場合は、ネイティブ・フォーマット・トランスレータを使用してインバウンドXMLドキュメントにネームスペースを追加したりアウトバウンドXMLドキュメントからネームスペースを削除したりできます。

次のいずれかに該当する場合、XMLにはネームスペースがありません。

  • XMLに対応するXMLスキーマがあり、そのXMLスキーマにターゲット・ネームスペースが指定されていない場合。

  • XMLに対応するDTDがあり、それがXMLスキーマに変換されたDTDである場合。

どちらの場合も、targetNamespaceが指定されたラッパー・スキーマを作成し、そのラッパー・スキーマに実際のスキーマを含める必要があります。また、ラッパー・スキーマにはDTDに設定されたnxsd:version属性も必要です。次に例を示します。

--wrapper.xsd
<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://www.w3.org/2001/XMLSchema"
   targetNamespace="myNamespace"
   xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
   nxsd:version="DTD">
   <include schemaLocation="actual.xsd"/>
</schema>

注意:

実際のスキーマにelementFormDefault="qualified"が指定されていることを確認してください。

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

6.4.5 複雑なファイル構造の選択条件スキーマの定義

この使用例では、ネイティブ・フォーマット・ビルダーにより、order、customer、itemsなどの複数のレコード・タイプを含んだorder.txtという複合タイプのファイルが使用されます。この使用例を使用すると、NXSDを生成してテストすることもできます。この使用例を実行する手順は、次のとおりです。

  1. サンプル・テキスト・ファイル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
    
  2. order、customerおよびitemのネイティブ・データごとに1行をドラッグして、次の複合タイプを作成します。
    • OrderType

    • ItemType

    • CustomerType

    複合タイプの作成の詳細は、「複雑なファイル構造のスキーマの定義」を参照してください。

    図6-46に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。

    図6-46 「ネイティブ・フォーマット・ビルダー - 設計スキーマ」ページ

    図6-46の説明が続きます
    「図6-46 「ネイティブ・フォーマット・ビルダー - 設計スキーマ」ページ」の説明
  3. 「選択ノードの追加」をクリックします。「選択オプション・タイプ」ダイアログが表示されます。
  4. 「選択オプション・タイプ」ダイアログで、図6-47に示すようにオプションを設定して「OK」をクリックします。

    図6-47 「選択オプション・タイプ」ダイアログ

    図6-47の説明が続きます
    「図6-47 「選択オプション・タイプ」ダイアログ」の説明
  5. 「choice」を選択し、「要素の追加」アイコンをクリックします。choiceノードに「<new_element>」が追加されます。
  6. 新規に追加した要素の名前をOrderChoiceに変更し、「OrderType」複合タイプ要素を「OrderChoice」にドラッグ・アンド・ドロップします。
  7. 「OrderChoice - string」を選択して「ノードの編集」アイコンをクリックします。「要素の詳細」ダイアログが表示されます。
  8. 図6-48に示すように、「選択値」フィールドにOrderと入力して「OK」をクリックします。

    注意:

    「長さ」フィールドの値が4に設定されているため、「選択値」フィールドでは4文字を指定する必要があります。

    図6-48 「要素の詳細」ダイアログ

    図6-48の説明が続きます
    「図6-48 「要素の詳細」ダイアログ」の説明
  9. ステップ5から8に従って、ItemTypeデータ型のItemChoice選択複合タイプとCustomerTypeデータ型のCustomerChoice選択複合タイプを作成します。図6-49に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ダイアログが表示されます。

    図6-49 「ネイティブ・フォーマット・ビルダー - 設計スキーマ」ページ

    図6-49の説明が続きます
    「図6-49 「ネイティブ・フォーマット・ビルダー - 設計スキーマ」ページ」の説明
  10. 「次」を選択します。図6-50に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示され、ネイティブ・フォーマット・ファイルが表示されます。

    図6-50 「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページ

    図6-50の説明が続きます
    「図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>
    
  11. 「テスト」をクリックします。「NXSDスキーマのテスト」ダイアログが表示されます。
  12. 「XMLの生成」アイコンをクリックします。図6-51に示すように、「NXSDスキーマのテスト」ダイアログの右ペインに「結果XML」が表示されます。

    図6-51 「NXSDスキーマのテスト」ダイアログ

    図6-51の説明が続きます
    「図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>
    
  13. 「OK」をクリックします。「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
  14. 「次」を選択します。ネイティブ・フォーマット・ビルダーの「終了」ページが表示されます。

6.4.6 複雑なファイル構造のlookAheadを使用する選択条件の定義

この使用例では、ネイティブ・フォーマット・ビルダーにより、異なるaddressを持つ複数のレコードを含んだaddress.txtという複合タイプのファイルが使用されます。この使用例では2つのレコード・タイプを持つスキーマを作成します。RecOneレコードはテキスト「YES」で終わるレコードのデータを取得し、RecTwoレコードはテキスト「NO」で終わるレコードのデータを取得します。

この使用例を使用すると、NXSDを生成してテストすることもできます。

この使用例を実行する手順は、次のとおりです。

  1. サンプル・テキスト・ファイル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
    
  2. アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
  3. 「次」を選択します。「タイプの選択」ページが表示されます。
  4. 「複合タイプ」を選択して「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。
  5. 「参照」をクリックしてaddress.txtファイルを選択し、「ルート要素」フィールドにAddressと入力します。
  6. 「次」を選択します。ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
  7. 「複合タイプの追加」アイコンをクリックします。「スキーマ・ツリー」で、「Address」の下に複合タイプ<new_complex_type>が作成されます。
  8. 「サンプル・ファイル」セクションの右ペインからサンプル・テキストの1行目を選択し、「<new_complex_type>」ノードにドラッグ・アンド・ドロップします。「複合タイプ詳細」ダイアログが表示されます。
  9. 「複合タイプ名」フィールドにRECORD1と入力し、「デリミタ」リストで「カンマ(,)」を選択します。
  10. 「OK」をクリックします。図6-52に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。

    図6-52 「ネイティブ・フォーマット・ビルダー - 設計スキーマ」ページ

    図6-52の説明が続きます
    「図6-52 「ネイティブ・フォーマット・ビルダー - 設計スキーマ」ページ」の説明
  11. 同様に、RECORD2という別の複合タイプ・ノードを作成します。図6-53に示すように、ネイティブ・フォーマット・ビルダー「設計スキーマ」ページが表示されます。

    図6-53 「ネイティブ・フォーマット・ビルダー - 設計スキーマ」ページ

    図6-53の説明が続きます
    「図6-53 「ネイティブ・フォーマット・ビルダー - 設計スキーマ」ページ」の説明
  12. 「選択ノードの追加」をクリックします。「選択オプション・タイプ」ダイアログが表示されます。
  13. 「選択オプション・タイプ」ダイアログで、図6-54に示すようにオプションを設定して「OK」をクリックします。

    図6-54 「選択オプション・タイプ」ダイアログ

    図6-54の説明が続きます
    「図6-54 「選択オプション・タイプ」ダイアログ」の説明
  14. 「choice」を選択し、「要素の追加」アイコンをクリックします。choiceノードに「<new_element>」が追加されます。
  15. 「ノードの編集」アイコンをクリックします。「要素の詳細」ダイアログが表示されます。
  16. 「要素名」フィールドにRECONEと入力し、データ型として「RECORD1」を選択し、選択条件として「YES」を設定し、「OK」をクリックします。
  17. ステップ14から16に従って、choiceノードのRECTWO選択要素を作成し、選択条件としてNOを設定します。

    注意:

    合計文字数を3文字にする必要があるため、文字NOの後に空白を1個挿入しています。

    図6-55に示すように、ネイティブ・フォーマット・ビルダーの「設計スキーマ」ダイアログが表示されます。

    図6-55 「ネイティブ・フォーマット・ビルダー - 設計スキーマ」ページ

    図6-55の説明が続きます
    「図6-55 「ネイティブ・フォーマット・ビルダー - 設計スキーマ」ページ」の説明
  18. RECORD1複合タイプをchoiceの下のRECONE要素にドラッグ・アンド・ドロップし、RECORD2複合タイプをchoiceの下のRECTWO要素にドラッグ・アンド・ドロップします。ネイティブ・フォーマット・ビルダーの「設計スキーマ」ダイアログが表示されます。
  19. 「次」を選択します。図6-56に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示され、ネイティブ・フォーマット・ファイルが表示されます。

    図6-56 「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページ

    図6-56の説明が続きます
    「図6-56 「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページ」の説明

    ネイティブ・スキーマ

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

    例 - 複雑なファイル構造のlookAheadを使用して選択条件を定義するためのネイティブ・スキーマ

    <?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>
     
  20. 「テスト」をクリックします。「NXSDスキーマのテスト」ダイアログが表示されます。
  21. 「XMLの生成」アイコンをクリックします。図6-57に示すように、「NXSDスキーマのテスト」ダイアログの右ペインに「結果XML」が表示されます。

    図6-57 「NXSDスキーマのテスト」ダイアログ

    図6-57の説明が続きます
    「図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で終わるレコードを取得します。

  22. 「OK」をクリックします。「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
  23. 「次」を選択します。ネイティブ・フォーマット・ビルダーの「終了」ページが表示されます。

6.4.7 複雑なファイル構造の配列タイプ・スキーマの定義

この使用例では、ネイティブ・フォーマット・ビルダーにより、項目の配列を含んだarray.txtという複合タイプのファイルが使用されます。サンプル・データには、4つの名前をセミコロンで区切って末尾にピリオド1個を付けたものが含まれています。この使用例では、メンバー名がセミコロンで区切られて配列がピリオド1個で終了する配列タイプを使用したスキーマを作成します。この使用例を使用すると、NXSDを生成してテストすることもできます。

この使用例を実行する手順は、次のとおりです。

  1. サンプル・テキスト・ファイルarray.txt内のデータは、次のとおりです。
    John;Steve;Paul;Todd.
    
  2. アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
  3. 「次」を選択します。「タイプの選択」ページが表示されます。
  4. 「複合タイプ」を選択して「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。
  5. 図6-58に示すように、「参照」をクリックしてarray.txtファイルを選択します。ネイティブ・フォーマット・ビルダーの「ファイルの説明」ページが表示されます。

    図6-58 「ネイティブ・フォーマット・ビルダー - ファイルの説明」ページ

    図6-58の説明が続きます
    「図6-58 「ネイティブ・フォーマット・ビルダー - ファイルの説明」ページ」の説明
  6. 「次」を選択します。ネイティブ・フォーマット・ビルダーの「設計スキーマ」ページが表示されます。
  7. NewArrayというグローバル要素を作成し、このグローバル要素にネイティブ・データをドラッグ・アンド・ドロップします。
  8. 図6-59に示すように、「NewArray」を選択して「ノードの編集」アイコンをクリックします。「要素の詳細」ダイアログが表示されます。

    図6-59 「ネイティブ・フォーマット・ビルダー - 設計スキーマ」ページ

    図6-59の説明が続きます
    「図6-59 「ネイティブ・フォーマット・ビルダー - 設計スキーマ」ページ」の説明
  9. 「要素の詳細」ダイアログで、図6-60に示すようにオプションを設定して「OK」をクリックします。

    図6-60 「要素の詳細」ダイアログ

    図6-60の説明が続きます
    「図6-60 「要素の詳細」ダイアログ」の説明

    ネイティブ・フォーマット・ビルダーの「設計スキーマ」ダイアログが表示されます。

  10. 「次」を選択します。図6-61に示すように、「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページが表示され、ネイティブ・フォーマット・ファイルが表示されます。

    図6-61 「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページ

    図6-61の説明が続きます
    「図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>
    
  11. 「テスト」をクリックします。「NXSDスキーマのテスト」ダイアログが表示されます。
  12. 「XMLの生成」アイコンをクリックします。図6-62に示すように、「NXSDスキーマのテスト」ダイアログの右ペインに「結果XML」が表示されます。

    図6-62 「NXSDスキーマのテスト」ダイアログ

    図6-62の説明が続きます
    「図6-62 「NXSDスキーマのテスト」ダイアログ」の説明

    ネイティブ・スキーマを使用して変換した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>
    
  13. 「OK」をクリックします。「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
  14. 「次」を選択します。ネイティブ・フォーマット・ビルダーの「終了」ページが表示されます。

6.4.8 DTDファイル構造のスキーマの定義

この使用例では、DTDファイルというネイティブ・データ・タイプのスキーマを定義する手順を説明します。

このネイティブ・ファイルのXMLスキーマを作成する際には、ネイティブ・フォーマット・ビルダー・ウィザードの「XSDに変換するDTD」オプションを使用します。

この使用例では、ネイティブ・フォーマット・ビルダーにより、DTDファイル・タイプ*.dtdが使用されます。対応するNXSDを生成し、同様にテストできます。この使用例を実行する手順は、次のとおりです。

  1. 任意のDTDファイルを使用します。
  2. 図6-4に示すように、アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。図6-5に示すように、「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
  3. 「次」を選択します。図6-26に示すように、「タイプの選択」ページが表示されます。
  4. 「XSDに変換するDTD」を選択します。図6-63に示すように、「タイプの選択」ページが表示されます。

    図6-63 「ネイティブ・フォーマット・ビルダー・ウィザード - タイプの選択」ページ

    図6-63の説明が続きます
    「図6-63 「ネイティブ・フォーマット・ビルダー・ウィザード - タイプの選択」ページ」の説明
  5. 「次」を選択します。ネイティブ・フォーマット・ビルダーの「DTDの説明」ページが表示されます。
  6. 図6-64に示すように、「参照」をクリックしてdb.dtdファイルを選択し、「ルート要素」リストから「DatabaseInventory」を選択します。

    図6-64 「ネイティブ・フォーマット・ビルダー・ウィザード - ファイルの説明」ページ

    図6-64の説明が続きます
    「図6-64 「ネイティブ・フォーマット・ビルダー・ウィザード - ファイルの説明」ページ」の説明
  7. 「次」を選択します。図6-65に示すように、「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。

    図6-65 「ネイティブ・フォーマット・ビルダー・ウィザード - フィールド・プロパティ」ページ

    図6-65の説明が続きます
    「図6-65 「ネイティブ・フォーマット・ビルダー・ウィザード - フィールド・プロパティ」ページ」の説明

    次の例に、生成されたネイティブ・フォーマット・ファイルの結果を示します。

    例 - 生成されたネイティブ・フォーマット・ファイル

    <?xml version="1.0" encoding="UTF-8" ?>
    <!--This Schema has been generated from a DTD. 
    A target namespace has beenadded 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>
    
  8. 「次」を選択します。ネイティブ・フォーマット・ビルダーの「終了」ページが表示されます。
  9. 「終了」をクリックします。生成されたNXSDを含んだアダプタ構成ウィザードの「メッセージ」ページが表示されます。

6.4.9 COBOLコピーブック・ファイル構造のスキーマの定義

この使用例は、変換用のネイティブ・スキーマ・ファイルを作成するために、Oracleファイル/FTPアダプタが(ネイティブ・フォーマット・ビルダー・ウィザードを使用して) COBOLコピーブック・フォーマットのファイルをどのように処理するかを示しています。

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

6.4.9.1 複数のルート・レベル

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を生成し、同様にテストできます。この使用例を実行する手順は、次のとおりです。

  1. Adapters-105CobolCopyBookサンプルに含まれているartifacts.zipファイルから次のファイルを取得します。
    • artifacts/samples/po-ccb.cpy

    • artifacts/samples/po-ebcdic.data

    Adapters-105CobolCopyBookサンプルを入手するには、Oracle SOA Sample Codeサイトにアクセスします。

    これらのファイルをサンプル・ディレクトリにコピーします。

  2. 図6-4に示すように、アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。図6-5に示すように、「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。
  3. 「次」を選択します。図6-26に示すように、「タイプの選択」ページが表示されます。
  4. 「ネイティブ・フォーマットに変換するCOBOLコピーブック」を選択します。図6-66に示すように、「タイプの選択」ページが表示されます。

    図6-66 「ネイティブ・フォーマット・ビルダー・ウィザード - タイプの選択」ページ

    図6-66の説明が続きます
    「図6-66 「ネイティブ・フォーマット・ビルダー・ウィザード - タイプの選択」ページ」の説明
  5. 「次」を選択します。ネイティブ・フォーマット・ビルダーの「COBOLコピーブックの説明」ページが表示されます。
  6. 図6-67に示すように、「参照」をクリックしてpo-ccb.cpyファイルを選択します。

    図6-67 「ネイティブ・フォーマット・ビルダー・ウィザード - ファイルの説明」ページ

    図6-67の説明が続きます
    「図6-67 「ネイティブ・フォーマット・ビルダー・ウィザード - ファイルの説明」ページ」の説明
  7. 「Root-Element」フィールドにPurchaseOrderと入力して「次へ」をクリックします。図6-68に示すように、「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。

    図6-68 「ネイティブ・フォーマット・ビルダー・ウィザード - 生成されたネイティブ・フォーマット・ファイル」ページ

    図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>
    
  8. 「テスト」をクリックします。「NXSDスキーマのテスト」ダイアログが表示されます。
  9. 「参照」をクリックし、「ファイル名」フィールドでpo-ebcdic.dataファイルを選択します。図6-69に示すように、「NXSDスキーマのテスト」ダイアログが表示されます。

    図6-69 「NXSDスキーマのテスト」ダイアログ

    図6-69の説明が続きます
    「図6-69 「NXSDスキーマのテスト」ダイアログ」の説明
  10. 「XMLの生成」アイコンをクリックします。図6-70に示すように、「NXSDスキーマのテスト」ダイアログの右ペインに「結果XML」が表示されます。

    図6-70 「NXSDスキーマのテスト」ダイアログ

    図6-70の説明が続きます
    「図6-70 「NXSDスキーマのテスト」ダイアログ」の説明

    対応するネイティブ・スキーマ・フォーマットを使用したネイティブ・データは、次の例に示すように、次の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レベル以外の場合)、バインドされていない一連のルート・レベル・アイテムが生成されます。

  11. 「OK」をクリックします。「生成されたネイティブ・フォーマット・ファイル」ページが表示されます。
  12. 「次」を選択します。ネイティブ・フォーマット・ビルダーの「終了」ページが表示されます。
  13. 「終了」をクリックします。生成されたNXSDを含んだアダプタ構成ウィザードの「メッセージ」ページが表示されます。

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

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

6.4.9.3 可変長配列

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> 

6.4.9.4 数値のタイプ

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

6.5 nXSDトランスレータのテスト用コマンドライン・ツール

nXSD注釈が正しいことや、生成されたXML/ネイティブ・データがビジネス・セマンティクスに準拠していることを確認するために、nXSDスキーマのテストが必要になる場合があります。現在この作業を行うには、インバウンドまたはアウトバウンド、あるいはその両方のファイル・アダプタ・パートナ・リンクを含んだBPELプロセスを記述し、適切なnXSDスキーマで構成した後、SOAサーバー上でそれらをテストする必要があります。この場合、作業に時間がかかり、エラーも起こりやすくなります。

単純なスタンドアロン・テスト・クライアントを使用することで、NXSDスキーマを検証できるようになります。テスト・ツールjarは、http://download.oracle.com/otndocs/test-translator.jarからダウンロードできます

6.5.1 前提条件

テスト・クライアントを使用して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に拡張子を変更する必要があります。

6.5.2 テスト・ツールの実行

java xlator.util.Translate -helpを実行すると、図6-71に示すように使用方法が表示されます。-helpオプションを指定することで、ツールのオプションおよびデフォルトのリストを表示できます。

図6-71 java xlator.util.Translate -helpの実行

図6-71の説明が続きます
「図6-71 java xlator.util.Translate -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です

図6-72 テスト・ツールを使用したtxtからxmlへの変換

図6-72の説明が続きます
「図6-72 テスト・ツールを使用したtxtからxmlへの変換」の説明

テスト・クライアントを実行してaddress-csv.xmladdress-csv.txtに変換する例は、次のとおりです。

java xlator.util.Translate -outbound -schema address-csv.xsd -root Root-Element -input address-csv.xml -output address-csv.txt

図6-73 テスト・ツールを使用したxmlからtxtへの変換

図6-73の説明が続きます
「図6-73 テスト・ツールを使用したxmlから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ファイルへの変換

図6-74の説明が続きます
「図6-74 テスト・ツールを使用したaddress-csv.txtから一連のバッチxmlファイルへの変換」の説明

6.5.3 ネイティブ・フォーマット・ビルダーを使用したMFL変換の実行

Oracle WebLogic統合では、ネイティブ・データを記述する固有の言語である特定のXMLファイル形式(MFLフォーマット言語と呼ばれます)を使用します。MFLはXMLですがスキーマ・ファイルではないため、nXSDファイルを使用しないでSOAトランスフォーメーションおよびマッピングにMFLを使用することはできません。

MFL変換機能により、既存のフレームワークでのMFLのプラガビリティが向上し、MFLフォーマットに対応するスキーマが生成されます。その後、生成されたスキーマを実行時に使用できます。

MFLの詳細は、Open Service Busのドキュメント『Oracle Service Busでのサービスの開発』のメッセージ・フォーマット言語を使用したデータの変換に関する説明を参照してください。

6.5.3.1 MFLフォーマット・ファイルからスキーマ・フォーマットへの変換

最初のステップを実行するには、MFLをNXSDスキーマ・ファイルに変換するようJDeveloperに指示します。

6.5.3.2 スキーマ・ファイルの生成およびSOAコンポジット・プロセスへの追加

JDeveloperを使用して、ネイティブ・フォーマット・ビルダーのトランスレータが使用するスキーマ・ファイルを生成します。MFLファイルにはそれらに関連するターゲット・ネームスペースがないため、生成されたスキーマ・ファイルにターゲット・ネームスペースを指定する必要があります。

MFLからスキーマ・ファイルに変換するときに、生成されたスキーマ・ファイルをSOAプロジェクトのXSDディレクトリに保存した場合は、この手順をスキップできます。

SOAプロジェクト以外のディレクトリでスキーマ・ファイルを生成した場合、ステップ1で生成したスキーマ・ファイルをSOAコンポジット・プロジェクトのXSDフォルダに追加する必要があります。

スキーマ・ファイルをSOAプロジェクトに追加すると、変数へのペイロード・トランスフォーメーションまたはペイロード・マッピングにプロジェクトのスキーマ・ファイルを使用する場合と同様に、このスキーマ・ファイルを使用できます。実行時トランスレータは、スキーマ・ファイルで定義した属性を使用して、実行時にMFLトランスレータを起動します。

6.5.3.2.1 MFLファイルの例

MFLファイルの例は次のとおりです。

<?xml version='1.0' encoding='windows-1252'?>
<!DOCTYPE MessageFormat SYSTEM 'mfl.dtd'>
<MessageFormat name='Root-Element' version='2.01'>
    <StructFormat name='Address' repeat='*'>
      <FieldFormat name='Name' type='String' delim=',' codepage='windows-1252'/>
      <FieldFormat name='Street1' type='String' delim=','            codepage='windows-1252'/>
    </StructFormat>
</MessageFormat>
6.5.3.2.2 MFLファイルの例から作成されるスキーマ・ファイルの例

MFLファイルから作成されるスキーマ・ファイルには、次の2つの新しいネームスペースがあります。

  • xmlns:mfl="http://www.bea.com/mfl"

  • xmlns:nxsd=http://xmlns.oracle.com/pcbpel/nxsd

さらに、スキーマのNXSDトランスレータのバージョンが、次のようにMFLに設定されます(nxsd:version="MFL")。

MFLファイルから作成されるスキーマ・ファイルの例を次に示します。

例 - MFLファイルから作成されるスキーマ・ファイルの例

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                      xmlns="http://MyTNS1"
targetNamespace="http://MyTNS1" 
                    xmlns:mfl="http://www.bea.com/mfl" xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" 
                  elementFormDefault="qualified"
                    nxsd:version="MFL">
    <xsd:import namespace="http://www.bea.com/mfl" 
                    schemaLocation="mfl.xsd"/>
      <xsd:element name="Root-Element">
          <xsd:annotation>
            <xsd:appinfo>
<mfl:MessageFormat encoding="windows-1252"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Address" minOccurs="1" 
                       maxOccurs="unbounded">
<xsd:annotation>
<xsd:appinfo>
<mfl:StructFormat repeat="*"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Name" type="mfl:String">
                                <xsd:annotation>
                                    <xsd:appinfo>
                                        <mfl:FieldFormat delim=","
                                          codepage="windows-1252"/>
                                    </xsd:appinfo>
                                </xsd:annotation>
                            </xsd:element>
                            <xsd:element name=
                               "Street1" type="mfl:String">
                                <xsd:annotation>
                                    <xsd:appinfo>
                                        <mfl:FieldFormat delim=","
                                         codepage="windows-1252"/>
                                    </xsd:appinfo>
                                </xsd:annotation>
                            </xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

6.5.3.3 ネイティブ・フォーマット・ビルダー・ウィザードでのMFLファイル変換のフロー

ネイティブ・フォーマット・ビルダー・ウィザードを使用してMFLファイルの変換およびMFLファイルからのスキーマ・ファイルの生成を行うには、次の手順を実行します。

  1. 「タイプの選択」ページで、「新規作成」→「NXSDに対するMFLの作成」を選択します。

    図6-75 「XSDに変換するMFL」が選択されているネイティブ・フォーマット・ビルダーの「タイプの選択」画面

    図6-75の説明が続きます
    「図6-75 「XSDに変換するMFL」が選択されているネイティブ・フォーマット・ビルダーの「タイプの選択」画面」の説明
  2. ネイティブ・フォーマット・ビルダー・ウィザードに、「説明」画面が表示されます。XSDに変換するMFLファイルの場所とスキーマ・ファイルに指定するターゲット・ネームスペースを指定します。「次へ」をクリックします。

    図6-76 ネイティブ・フォーマット・ビルダー・ウィザードの「MFLの説明」画面

    図6-76の説明が続きます
    「図6-76 ネイティブ・フォーマット・ビルダー・ウィザードの「MFLの説明」画面」の説明
  3. ファイルの場所とターゲット・ネームスペースを指定すると、生成されたスキーマ・ファイルがウィザードに表示されます。必要に応じて、生成されたスキーマ・ファイルを編集して希望の場所に保存できますが、通常は、SOAコンポジット・プロジェクトのXSDフォルダの場所に保存します。

    図6-77 ネイティブ・フォーマット・ビルダーの「生成されたネイティブ・フォーマット・スキーマ・ファイル」画面

    図6-77の説明が続きます
    「図6-77 ネイティブ・フォーマット・ビルダーの「生成されたネイティブ・フォーマット・スキーマ・ファイル」画面」の説明
  4. 「次へ」をクリックすると、スキーマ・ファイルが存在する場所を示す「ネイティブ・フォーマット・ビルダー: 終了」画面が表示されます。

    図6-78 「ネイティブ・フォーマット・ビルダー: 終了」画面

    図6-78の説明が続きます
    「図6-78「ネイティブ・フォーマット・ビルダー: 終了」画面」の説明

「終了」をクリックすると、MFLファイルからのスキーマ・ファイルの生成が完了します。生成されたスキーマ・ファイルは、希望の場所に保存されます。

6.5.4 マルチキャラクタ・ストリーミングのサポート

多くの場合、固定長のデータ長は文字ではなくバイトで使用できます。フィールド・データは、マルチバイト・キャラクタ・エンコーディングです。

この場合、バイト数はフィールドの文字数と等しくなりません。このタイプのデータの読取りは、NXSDトランスレータではサポートされていません。

現在、トランスレータでは文字の長さのみが想定されています。トランスレータは、文字リーダーを使用して指定の文字数を読み取ります。

マルチバイト・ストリーミングのサポートによって、フィールドの長さをバイトで指定できます。トランスレータはバイト・リーダーを使用して指定のバイト数を読み取り、読み取ったバイトを文字に変換します。これらの文字は生成されたXMLに配置されます。

同様に、アウトバンド・トランスレータはXMLデータを指定のバイト長に変換し、これらのバイトを出力ストリームに書き込みます。

6.5.5 共有デリミタ

ネイティブ・フォーマット・ビルダーを使用するときは、多くの場合デリミタを使用します。ネイティブ・フォーマット・ビルダー内でのデリミタの動作は、使用するコンテキストによって異なります。

たとえば、スキーマ・ドキュメントにオプション・ノードがある場合、親のデリミタの存在は、ネイティブ・ストリームにこれらのオプション・ノードに対応するデータがない可能性があることを示しています。または、親のデリミタ自体がオプション・ノードのデータの一部である可能性があります。すべては、コンテキストに依存します。

同様に、アウトバウンド・シナリオでは、グループの最終フィールドを処理するときに、グループ・デリミタが後に続く最終フィールドのデリミタを配置するのか、単にグループ・デリミタを配置するだけで十分なのかといったヒントをNXSDトランスレータに示す必要がある場合があります。

共有デリミタのアプローチによって、NXSDトランスレータは、コンテキストに基づいてデリミタが暗示するこのような微妙な相違に対応し、コンテキスト内のデリミタの意味を制御するためのカスタム注釈を提供します。

6.5.5.1 インバウンドの共有デリミタ処理を使用するNXSDトランスレータの基本概念

共有デリミタは、デリミタがデータ・グループの最後とグループの最終フィールドの最後の両方にマーク付けすることを意味します。デリミタは、グループの最終フィールドとグループの最後の間で共有されます。

6.5.5.1.1 セルおよび配列の終了

NXSDフレームワークでは、配列を使用して繰返し構造を定義します。nxsd:cellSeparatedByコンストラクトは、配列の各セルのデリミタを定義します。このデリミタは、この構造の最終フィールドのデリミタより前に検出された場合に、構造のセルと最終フィールドの両方を終了するために使用します。

nxsd:arrayTerminatedByコンストラクトは、配列自体の最後にマーク付けします。cellSeparatedByデリミタよりも前に検出された場合に、セルと配列を終了するために使用します。

6.5.5.1.2 重要な用語

次の用語は、共有デリミタの概念を理解する上で重要です。

  • 最終の非オプション・ノード: 配列でラップされた列構造に存在するノード。このノードは必須で、これより後ろの後続ノードはすべてオプションです。

  • 後続のオプション・ノード: 配列でラップされた列構造に存在するノード。このノードはオプションで、このノードより後ろの後続ノードはすべてオプションです。

  • 保留中のデリミタのリスト: 隣接した親配列デリミタ(これ自体が、共有デリミタを含む配列の最後の必須ノードである場合があります)から始まるすべてのデリミタを含むリスト。

  • 配列: セルの集合。

  • 配列の終端文字: 配列の最後にマーク付けします。

  • セル・セパレータ: 配列の各セルの最後にマーク付けします。

  • 各セルには構造を含めることができます(一般的に構造は繰り返されるため、配列で囲まれます)。

  • 構造には、必須要素とオプション要素を含めることができます。

  • デリミタは、次の異なるレベルで存在できます。

    • フィールド・レベル

    • グループ・レベル

6.5.5.1.3 セル・セパレータおよび配列の終端文字の共有

セル・セパレータまたは配列の終端文字のいずれか、またはその両方をグループの要素と共有できます。セル・セパレータは、セルの共有境界を定義します。配列の終端文字は配列を定義し、配列に後続のオプション・フィールドがあるかどうかを指定します。

次の2つの注釈を使用して、グループの要素と共有される終端文字を指定できます。

  • nxsd:cellSeparator="shared" 配列のセル・セパレータを、最後の非オプション・フィールドのデリミタまたは後続オプション・フィールドのデリミタと共有することを定義します。この注釈のデフォルト値はnonsharedです。この場合、共有モードで、トランスレータが配列内の最後の非オプション・フィールドまたは後続オプション・フィールドの処理中にセル・セパレータを検出すると、トランスレータはこのフィールドが終了し、配列に後続オプション・フィールドが含まれないとみなします。フィールドが終了し、後続オプション・フィールドがない場合、トランスレータはセルとともに現在のフィールドを閉じます。

  • nxsd:arrayTerminator="shared" 配列の終端文字は、セル・セパレータおよび最後の非オプション・フィールドと共有されるか、後続オプション・フィールドと共有されます。

    この属性のデフォルト値はnonsharedです。この場合、トランスレータが最後の非オプション・フィールドまたは後続オプション・フィールドの処理中に配列の終端文字を検出すると、トランスレータは現在のフィールドが終了し、配列に後続オプション・フィールドが含まれないとみなします。

    配列が終了し、後続オプション・フィールドがない場合、トランスレータは現在のフィールド、現在のセルおよび配列を閉じます。

6.5.5.1.4 動作

共有デリミタの動作もセルの性質に依存します。その他のタイプに加えて、次の3つの主要な動作タイプがあります。

  • 終了

  • 固定長

  • 囲み

終了動作は、後続オプションの子にデリミタがあるかどうか、親デリミタの1つが検出されるかどうかに依存します。

  • 後続オプションの子が終了している場合、トランスレータはネイティブ・データから読み取り、子の終端文字と保留中のデリミタの両方を検索します。

  • 後続オプションの子の終端文字が検出された場合、オプションの子を生成します。

  • ただし、親デリミタの1つが検出された場合、読み取ったデータを現在のオプションの子にマップし、それをXMLで生成し、すべての後続オプションを無視し、親デリミタが検出されたレベルまで親構造を閉じます。

固定長動作は、固定長である後続オプションの子、または保留中のデリミタが存在するかどうかに関連します。

  • 後続オプションの子が固定長の場合、子を処理する前に保留中のデリミタを検索します。

  • 親デリミタの1つが検出された場合、後続オプションを無視して、親デリミタ構造まで構造を閉じます。

  • 保留中のデリミタが存在しない場合、トランスレータはこのオプション・ノードに対応する固定長の文字数を読み取り、固定長の一部となる場合は保留中のデリミタをバイパスし、XMLでオプション・ノードを生成します。

注意:

NXSDトランスレータは、固定長データの最初に共有デリミタが実際に存在するシナリオに対応していません(固定長データを引用としてエスケープできません)。

囲み動作は、子が囲まれているかどうか、surroundedByデリミタの動作および親デリミタの存在に依存します。

  • 後続オプションの子が囲まれている場合、子を処理する前に保留中のデリミタを検索します。

  • 保留中のデリミタが存在しない場合、このオプション・ノードに対応する囲まれているネイティブ・データを読み取り、surroundedByの前にある場合は保留中のデリミタをバイパスし、XMLでオプション・ノードを生成します。次の後続オプション・ノードに対してこのロジックを繰り返します。

  • 親デリミタの1つが検出された場合、後続オプションを無視して、親デリミタ構造が特定されるまで構造を閉じます。

    カンマは、NXSDスキーマで共有のセル・セパレータと配列セパレータの両方として使用される場合、出力内の最初で唯一の要素になります。

    たとえば、入力ネイティブ・データがField1、Field2、Field3、Field4、Field5で、

    cellSeparatedBy=','arrayTerminatedBy=','、およびその両方を共有すると、結果は最初のフィールドのみになります。例:

    <sharedDelim xmlns="http://xmlns.mydomain.com/pcbpel/nxsd/test"> 
        <Group1> 
           <Group2> 
              <Field1>Field1</Field1> 
           </Group2> 
        </Group1> 
     </sharedDelim>

6.5.5.2 終了の使用例

この項の使用例は、後続オプションの子が終了しているかどうか、後続オプションの子の終端文字が検出されるかどうか、親デリミタの1つが検出されるかどうかといった、終了動作に関連しています。

使用例のスキーマの図は図6-79、使用例の説明は表6-11を参照してください。説明にはフィールドのリストが含まれています。

図6-79 終了の使用例のスキーマ

図6-79の説明が続きます
「図6-79 終了の使用例のスキーマ」の説明

表6-11 終了の使用例

番号 名前 使用例の説明 出力

1

Terminated_example_1.xsd

Field1#Field2$@Field11#Field22$^Field3%!

---

後ろにfield3が続くgroup2の2つのセルは、group1のセル1つのみで構成されます。

<sharedDelim>    
 <Group1>      
    <Group2>         
         <Field1>Field1</Field1>        
         <Field2>Field2</Field2>      
    </Group2>      
    <Group2>         
         <Field1>Field11</Field1>         
         <Field2>Field22</Field2>      
    </Group2>      
    <Field3>Field3</Field3>   
  </Group1> 
</sharedDelim>

2

Terminated_example_2.xsd

Field1@Field11#Field22$^Field3%!

---

group2の2つのセル。1つ目にはオプションのField2がなく、2つ目にはオプションのField2があります。Field3とともに、配列Group1の1つのセルで構成されます。

<sharedDelim> 
    <Group1> 
        <Group2> 
            <Field1>Field1</Field1> 
        </Group2> 
        <Group2> 
            <Field1>Field11</Field1> 
            <Field2>Field22</Field2> 
        </Group2> 

3

Terminated_example_3.xsd

Field1@Field11#Field22!

---

group2の2つのセル。1つ目にはオプションのField2がなく、2つ目にはオプションのField2があります。オプションのField3がなく、これはGroup1の1つのセルで構成されます。

<sharedDelim> 
    <Group1> 
        <Group2> 
            <Field1>Field1</Field1> 
        </Group2> 
        <Group2> 
            <Field1>Field11</Field1> 
            <Field2>Field22</Field2> 
       </Group2> 
    </Group1> 
</sharedDelim>

4

Terminated_example_4.xsd

Field1!

---

オプションのField2がないGroup2の1つのセルは、Group1の1つのセルで構成され、オプションのField3はありません。

 <sharedDelim>     <Group1>         <Group2>             <Field1>Field1</Field1>         </Group2>     </Group1> </sharedDelim> 

5

Terminated_example_5.xsd

Field0!Field1#Field2$@Field11#Field22$^Field3%!Field111!

---

Group1の3つのセル。1つ目のセルには、オプションのField2とオプションのField3がないGroup2のセルが1つあります。2つ目のセルには両方のフィールドがあるGroup2のセルが2つあり、オプションのField3が含まれています。

3つ目のセルは、1つ目のセルと同じです。

<sharedDelim> 
    <Group1> 
        <Group2> 
            <Field1>Field0</Field1> 
        </Group2> 
    </Group1> 
    <Group1> 
     <Group2> 
            <Field1>Field1</Field1> 
            <Field2>Field2</Field2> 
        </Group2> 
        <Group2> 
            <Field1>Field11</Field1> 
            <Field2>Field22</Field2> 
        </Group2> 
        <Field3>Field3</Field3> 
    </Group1> 
    <Group1> 
    <Group2> 
            <Field1>Field111</Field1> 
    </Group2> 
    </Group1> 
</sharedDelim>


6.5.5.3 固定長の使用例

この項の使用例は、すべて固定長の使用例です。

使用例のスキーマの図は図6-80、使用例の説明は表6-12を参照してください。説明にはフィールドのリストが含まれています。

図6-80 固定長の使用例のスキーマ

図6-80の説明が続きます
「図6-80 固定長の使用例のスキーマ」の説明

表6-12に、固定長の使用例の名前、使用例の説明および結果の出力を示します。


表6-12 固定長の使用例

番号 名前 使用例の説明 出力

1

Fixed_length_example1.xsd

Field01#Field02@Field11#Field12^! --- Group1のセル1つにGroup2のセルが2つあります。Group2の各セルには、必須で終了のField1要素とオプションで固定長のField2の両方があります。Group1グループに、オプションで固定長のField3はありません。

<fo_1> 
  <Group1> 
   <Group2> 
            <Field1>Field01</Field1> 
            <Field2>Field02</Field2> 
        </Group2> 
        <Group2> 
            <Field1>Field11</Field1> 
            <Field2>Field12</Field2> 
    </Group2> 
    </Group1> 
</fo_1>

2

Fixed_length_example2.xsd

Field01! --- Group2の1つ目のセルには必須で固定長のField01があり、オプションで固定長のField2はありません。Group1には、オプションで固定長のField3はありません。

  <fo_1>    <Group1>    <Group2>             <Field1>Field01</Field1>      </Group2>     </Group1> </fo_1>

3

Fixed_length_example3.xsd

Field01!Field11Field02@Field21Field12^Field03!Field31! --- Group1には3つのセルがあります。1つ目のセルには必須で固定長のField1のみが含まれます。2つ目のセルには、Group2のセルが2つ含まれます。2つのセルのそれぞれには、固定長フィールドのField1とField2の両方が含まれます。Group1の2つ目のセルには、固定長でオプションのField3も含まれます。Group1の3番目のセルは1つ目のセルと同じです。

<fo_1> 
    <Group1> 
        <Group2> 
            <Field1>Field01</Field1> 
        </Group2> 
    </Group1> 
    <Group1> 
        <Group2> 
            <Field1>Field11</Field1> 
            <Field2>Field02</Field2> 
        </Group2> 
        <Group2> 
            <Field1>Field21</Field1> 
            <Field2>Field12</Field2> 
        </Group2> 
        <Field3>Field03</Field3> 
    </Group1> 
    <Group1> 
        <Group2> 
            <Field1>Field31</Field1> 
        </Group2> 
    </Group1> 
</fo_1>


6.5.5.4 囲みの使用例

囲みの使用例には、トランスレータが検索する場所が含まれています。

後続オプションの子が囲まれている場合は保留中のデリミタを検索し、保留中のデリミタが存在しない場合は、このオプション・ノードに対応する囲まれたデータを読み取り、保留中のデリミタがsurroundedByデリミタより前にある場合は保留中のデリミタをバイパスし、最終的にXMLでオプション・ノードを生成します。

使用例のスキーマの図を示す図6-81、および表6-13を参照してください。

図6-81 共有デリミタの囲みスキーマ

図6-81の説明が続きます
「図6-81 共有デリミタの囲みスキーマ」の説明

表6-13 囲みの使用例

番号 名前 使用例の説明 出力

1

Surrounded_example_1.xsd

Field01#Field02@Field11#Field12^[Field03]! --- Group1には、繰返し構造のGroup2とオプションで囲みのField3で構成されるセルが1つあります。Group2には、必須で終了のField1とオプションで囲みのField2の両方があるセルが2つあります。

<sharedDelim>    
 <Group1>      
    <Group2>         
         <Field1>Field1</Field1>        
         <Field2>Field2</Field2>      
    </Group2>      
    <Group2>         
         <Field1>Field11</Field1>         
         <Field2>Field22</Field2>      
    </Group2>      
    <Field3>Field3</Field3>   
  </Group1> 
</sharedDelim>

2

Surrounded_example_2.xsd

Field01#@Field11#Field12^! |--- Group1は繰返し構造のGroup2で構成された1つのセルで、オプションで囲みのField3はありません。Group2にはセルが2つあります。1つ目のセルには必須で終了のField1がありますが、オプションで囲みのField2はありません。2つ目のセルには両方のフィールドが含まれます。

    <fo_1>     <Group1>         <Group2>             <Field1>Field01</Field1>         </Group2>         <Group2>             <Field1>Field11</Field1>             <Field2>Field12</Field2>         </Group2>     </Group1> </fo_1>   

3

Surrounded_example_3.xsd

Field01! --- Group1には1つのセルがあり、必須で固定長のField1があり、オプションで囲みのField2はないGroup2のセル1つで構成されています。Group1には、オプションで囲みのField2もありません。

<fo_1> <Group1> <Group2> <Field1>Field01</Field1> </Group2> </Group1> </fo_1>


4

Surrounded_example_4.xsd

Field01!Field11-Field02-@Field21-Field12-^[Field03]!Field31!

---

Group1にはセルが3つあります。1つ目のセルには必須で固定長のField1のみを含むGroup2のセルが1つあり、オプションで囲みのField2はありません。Group1の2つ目のセルには、Group2 (両方のフィールドを含む)のセルが2つとField3が含まれています。Group1の3番目のセルは1つ目と同じです。

<fo_1> 
    <Group1> 
        <Group2> 
            <Field1>Field01</Field1> 
        </Group2> 
    </Group1> 
    <Group1> 
        <Group2> 
            <Field1>Field11</Field1> 
            <Field2>Field02</Field2> 
        </Group2> 
        <Group2> 
            <Field1>Field21</Field1> 
            <Field2>Field12</Field2> 
        </Group2> 
        <Field3>Field03</Field3> 
    </Group1> 
    <Group1> 
        <Group2> 
            <Field1>Field31</Field1> 
        </Group2> 
    </Group1> 
</fo_1>


6.5.5.5 その他の使用例

次の使用例は、共有デリミタの様々なタイプの使用方法を集めたものです。

6.5.5.5.1 Shared_array_Terminator.xsd

この共有配列の終端文字の使用例のサンプル・データは、次のとおりです。

"Smith, John","0161-499-1717"
Fred,"0161-499-1718"#^"Smith, John","0161-499-1717"
#*

次に、この使用例のXSDを示します。

例 - 共有配列の終端文字のサンプルXSD

<?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="arrayTerminator">
  <complexType>
    <sequence>
      <element name="arrayOfMembers" maxOccurs="unbounded"
          nxsd:style="array" nxsd:cellSeparator="nonshared" nxsd:cellSeparatedBy="^"  nxsd:arrayTerminatedBy="*">
    <complexType>
      <sequence>
       <element name="Member" maxOccurs="unbounded" 
            nxsd:style="array" nxsd:arrayTerminatedBy="#" nxsd:arrayTerminator="shared">
    <complexType>
     <sequence>
      <element name="Name" 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>
            </sequence>
           </complexType>
      </element>
    </sequence>
  </complexType>
</element>
 
</schema>
 

生成されるXMLは次のとおりです。

例 - 共有配列の終端文字に対して生成されるXMLのサンプル

<arrayTerminator xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest">
   <arrayOfMembers>
      <Member>
         <Name>Smith, John</Name>
         <Telephone>0161-499-1717</Telephone>
      </Member>
      <Member>
         <Name>Fred</Name>
         <Telephone>0161-499-1718</Telephone>
      </Member>
   </arrayOfMembers>
   <arrayOfMembers>
      <Member>
         <Name>Smith, John</Name>
         <Telephone>0161-499-1717</Telephone>
      </Member>
   </arrayOfMembers>
</arrayTerminator>
6.5.5.5.2 Shared_trailing_array.xsd

shared.trailingArray.xsdのサンプル・データは次のとおりです。

"Smith, John","0161-499-1717"
Fred,"0161-499-1718"^"Smith, John","0161-499-1717"
#*

この使用例のサンプルNXSDスキーマを次に示します。

例 - 共有の後続配列のサンプルNXSDスキーマ

<?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="trailingArray">
  <complexType>
    <sequence>
       <element name="arrayOfMembers" maxOccurs="unbounded"
                                                nxsd:style="array" nxsd:cellSeparator="shared" nxsd:cellSeparatedBy="^"  nxsd:arrayTerminatedBy="*">
      <complexType>
       <sequence>
        <element name="Member" maxOccurs="unbounded" 
                     nxsd:style="array" nxsd:arrayTerminatedBy="#"                       nxsd:arrayTerminator="shared">
       <complexType>
        <sequence>
        <element name="Name type="string" nxsd:style="terminated"               nxsd:terminatedBy="," nxsd:quotedBy='"'/>
        <element name="Telephone" type="string" nxsd:style="terminated"               nxsd:terminatedBy="${eol}" nxsd:quotedBy='"' minOccurs="0"/>
    </sequence>
    </complexType>
     </element>
       </sequence>
           </complexType>
       </element>
    </sequence>
  </complexType>
</element>
</schema>

次の例に、この使用例の生成されたXMLを示します。

例 - 共有の後続配列の使用例に対して生成されるXML

<trailingArray xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest">
   <arrayOfMembers>
      <Member>
         <Name>Smith, John</Name>
         <Telephone>0161-499-1717</Telephone>
      </Member>
      <Member>
         <Name>Fred</Name>
         <Telephone>0161-499-1718</Telephone>
      </Member>
   </arrayOfMembers>
   <arrayOfMembers>
      <Member>
         <Name>Smith, John</Name>
         <Telephone>0161-499-1717</Telephone>
      </Member>
   </arrayOfMembers>
</trailingArray>
</element>
6.5.5.5.3 Shared_trailing_OptionalArray.xsdの使用例

この共有のtrailingOptionalArrayの使用例のサンプル・データを次の例に示します。

例 - 共有の後続オプション配列の使用例のサンプル・データ

"Smith, John","0161-499-1717"
Fred^"Smith, John","0161-499-1717"#*

例 - 共有の後続オプション配列の使用例のNXSD

<?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="trailingOptionalArray">
  <complexType>
    <sequence>
        <element name="arrayOfMembers" 
                       maxOccurs="unbounded"
      nxsd:style="array" nxsd:cellSeparator=
                "shared" nxsd:cellSeparatedBy="^"              nxsd:arrayTerminatedBy="*">
          <complexType>
            <sequence>
                <element name="Member" 
                             maxOccurs="unbounded" 
                  nxsd:style="array" 
                 nxsd:arrayTerminatedBy="#" 
                 nxsd:arrayTerminator="shared">
                   <complexType>
                      <sequence>
                      <element name=
                        "Name" type="string"
                   nxsd:style="terminated" 
                   nxsd:terminatedBy="," 
                   nxsd:quotedBy='"'/>  
                      <element name="Telephone"
                      type="string"
                      nxsd:style="terminated"
                      nxsd:terminatedBy="${eol}"                       nxsd:quotedBy='"' minOccurs="0"/>
                        </sequence>
                      </complexType>
                       </element>
                       </sequence>
                        </complexType>
                  </element>
    </sequence>
  </complexType>
</element>
</schema>

例 - 共有の後続オプション配列の使用例に対して生成されるXML

 <trailingOptionalArray xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest">
   <arrayOfMembers>
      <Member>
         <Name>Smith, John</Name>
         <Telephone>0161-499-1717</Telephone>
      </Member>
      <Member>
         <Name>Fred</Name>
      </Member>
   </arrayOfMembers>
   <arrayOfMembers>
      <Member>
         <Name>Smith, John</Name>
         <Telephone>0161-499-1717</Telephone>
      </Member>
   </arrayOfMembers>
</trailingOptionalArray>