ヘッダーをスキップ
Oracle® Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド
11gリリース1(11.1.1.7.0)
B55918-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

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

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

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

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

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

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

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

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

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

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

図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タイプの要素にマップできます。同様に、基本アイテムは、実行時トランスレータが対応するデータ・ファイルを解析するのに役立つ特定のネイティブ・フォーマットの注釈が付けられた単純型タイプの要素にマップできます。たとえば、Buyerアイテムは次の定義にマップできます。

<!--COBOL declaration : 05 Buyer-->
<element name="Buyer">
   <complexType>
      <sequence>
         <!--COBOL declaration : 10 Name PIC X(5)-->
         <element name="Name" type="string" nxsd:style="fixedLength"
            nxsd:padStyle="tail" nxsd:paddedBy=" " nxsd:length="5"/>
         </sequence>
   </complexType>
</element> 

ユーザー入力

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

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

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

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

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

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

COBOL句

表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-3に、ピクチャ編集タイプを示します。

表6-3 編集済ピクチャ

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

編集済英数字

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


編集済浮動数値

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


編集済数値

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

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

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

  • 浮動挿入: cs + -

  • ゼロの抑止: Z *

  • 置換挿入: Z * + - c


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

05   AMOUNT     PIC 999.99  

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

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

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

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


注意:

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


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

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

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

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

たとえば、注釈で指定されたサンプル・ファイルのパスが<!--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 リストの定義

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

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

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

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

125,200,255

ネイティブ・スキーマ:  

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

 
<complexType name="Colors" nxsd:style="list" nxsd:itemSeparatedBy=","
   nxsd:listTerminatedBy="${eol}">

  <sequence>
    <element name="Red" type="string" />
    <element name="Green" type="string" />
    <element name="Blue" type="string" />
  </sequence>
</complexType>
 
</schema>

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

<list xmlns="http://www.oracle.com/ias/processconnect">
   <Red>125</Red>
   <Green>200</Green>
   <Blue>255</Blue>
</list>

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

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

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

configure;startup;runtest;shutdown;

ネイティブ・スキーマ: 

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        xmlns:tns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="list" type="tns:CommandSet" />
 
<complexType name="CommandSet" nxsd:style="list" nxsd:itemSeparatedBy=";">
  <sequence>
    <element name="Cmd1" type="string" />
    <element name="Cmd2" type="string" />
    <element name="Cmd3" type="string" />
    <element name="Cmd4" type="string" />
  </sequence>
</complexType>
 
</schema>

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

<list xmlns="http://www.oracle.com/ias/processconnect">
   <Cmd1>configure</Cmd1>
   <Cmd2>startup</Cmd2>
   <Cmd3>runtest</Cmd3>
   <Cmd4>shutdown</Cmd4>
</list>

6.2.2.5 配列の定義

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

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

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

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

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

"Smith, John","1 Old Street, Old Town, Manchester",,"0161-499-1717".
Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718".
"Smith, Bob",,,0161-499-1719.#

ネイティブ・スキーマ: 

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

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

<array xmlns="http://www.oracle.com/ias/processconnect">
   <Member>
      <Name>Smith, John</Name>
      <Address>1 Old Street, Old Town, Manchester</Address>
      <DOB></DOB>
      <Telephone>0161-499-1717</Telephone>
   </Member>
   <Member>
      <Name>Fred</Name>
      <Address>2 Old Street, Old Town,Manchester</Address>
      <DOB>20-08-1954</DOB>
      <Telephone>0161-499-1718</Telephone>
   </Member>
   <Member>
      <Name>Smith, Bob</Name>
      <Address></Address>
      <DOB></DOB>
      <Telephone>0161-499-1719</Telephone>
   </Member>
</array>

最後のセルを含み、すべてのセルが同じマークで区切られている場合(バインドなし)

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

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

"Smith, John","1 Old Street, Old Town, Manchester",,"0161-499-1717".
Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718".
"Smith, Bob",,,0161-499-1719.

ネイティブ・スキーマ: 

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="array">
  <complexType>
    <sequence>
      <element name="Member" maxOccurs="unbounded" 
               nxsd:style="array" nxsd:cellSeparatedBy="\r\n">
        <complexType>
          <sequence>
            <element name="Name" type="string" nxsd:style="terminated"
               nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="Address" type="string" nxsd:style="terminated"
               nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="DOB" type="string" nxsd:style="terminated"
               nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="Telephone" type="string" nxsd:style="terminated"
               nxsd:terminatedBy="." nxsd:quotedBy='"'/>
          </sequence>
        </complexType>
      </element>
    </sequence>
  </complexType>
</element>
 

</schema>

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

<array xmlns="http://www.oracle.com/ias/processconnect">
   <Member>
      <Name>Smith, John</Name>
      <Address>1 Old Street, Old Town, Manchester</Address>
      <DOB></DOB>
      <Telephone>0161-499-1717</Telephone>
   </Member>
   <Member>
      <Name>Fred</Name>
      <Address>2 Old Street, Old Town,Manchester</Address>
      <DOB>20-08-1954</DOB>
      <Telephone>0161-499-1718</Telephone>
   </Member>
   <Member>
      <Name>Smith, Bob</Name>
      <Address></Address>
      <DOB></DOB>
      <Telephone>0161-499-1719</Telephone>
   </Member>
</array>

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

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

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

"Smith, John","1 Old Street, Old Town, Manchester",,"0161-499-1717"
Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718"
"Smith, Bob",,,0161-499-1719
#

ネイティブ・スキーマ: 

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="array">
  <complexType>
    <sequence>
      <element name="Member" maxOccurs="unbounded" 
               nxsd:style="array" nxsd:arrayTerminatedBy="#">
        <complexType>
          <sequence>
            <element name="Name" type="string" nxsd:style="terminated"
                nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="Address" type="string" nxsd:style="terminated"
                nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="DOB" type="string" nxsd:style="terminated"
                nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="Telephone" type="string" nxsd:style="terminated"
                nxsd:terminatedBy="\r\n" nxsd:quotedBy='"'/>          </sequence>
        </complexType>
      </element>
    </sequence>
  </complexType>
</element>
 
</schema>

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

<array xmlns="http://www.oracle.com/ias/processconnect">
   <Member>
      <Name>Smith, John</Name>
      <Address>1 Old Street, Old Town, Manchester</Address>
      <DOB></DOB>
      <Telephone>0161-499-1717</Telephone>
   </Member>
   <Member>
      <Name>Fred</Name>
      <Address>2 Old Street, Old Town,Manchester</Address>
      <DOB>20-08-1954</DOB>
      <Telephone>0161-499-1718</Telephone>
   </Member>
   <Member>
      <Name>Smith, Bob</Name>
      <Address></Address>
      <DOB></DOB>
      <Telephone>0161-499-1719</Telephone>
   </Member>
</array>

ネイティブ・データからセルの数が読み取られる場合

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

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

3"Smith, John","1 Old Street, Old Town, Manchester",,"0161-499-1717"
Fred,"2 Old Street, Old Town,Manchester","20-08-1954","0161-499-1718"
"Smith, Bob",,,0161-499-1719

ネイティブ・スキーマ: 

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

<element name="arrayidentifierlength">
  <complexType>
    <sequence>
      <element name="Member" maxOccurs="unbounded" nxsd:style="array"
          nxsd:arrayIdentifierLength="1">
        <complexType>
          <sequence>
            <element name="Name" type="string" nxsd:style="terminated"
               nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="Address" type="string" nxsd:style="terminated"
               nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="DOB" type="string" nxsd:style="terminated"
               nxsd:terminatedBy="," nxsd:quotedBy='"'/>
            <element name="Telephone" type="string" nxsd:style="terminated"
               nxsd:terminatedBy="\r\n" nxsd:quotedBy='"'/>
          </sequence>
        </complexType>
      </element>
    </sequence>
  </complexType>
</element>
 
</schema> 

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

<arrayidentifierlength xmlns="http://www.oracle.com/ias/processconnect">
   <Member>
      <Name>Smith, John</Name>
      <Address>1 Old Street, Old Town, Manchester</Address>
      <DOB></DOB>
      <Telephone>0161-499-1717</Telephone>
   </Member>
   <Member>
      <Name>Fred</Name>
      <Address>2 Old Street, Old Town,Manchester</Address>
      <DOB>20-08-1954</DOB>
      <Telephone>0161-499-1718</Telephone>
   </Member>
   <Member>
      <Name>Smith, Bob</Name>
      <Address></Address>
      <DOB></DOB>
      <Telephone>0161-499-1719</Telephone>
   </Member>
</arrayidentifierlength>

明示的な配列長

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

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

3;John;Steve;Paul;Todd;

ネイティブ・スキーマ: 

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

<element name="array">
  <annotation>
    <appinfo>
      <nxsd:variables>
        <nxsd:variable name="len" />
      </nxsd:variables>
    </appinfo>
  </annotation>

  <complexType>
    <sequence>
      <element name="TotalMembers" type="string" nxsd:style="terminated"
nxsd:terminatedBy=";">
        <annotation>
          <appinfo>
            <nxsd:variables>
              <nxsd:assign name="len" value="${0}" />
            </nxsd:variables>
          </appinfo>
        </annotation>
      </element>
      <element name="Member" type="string" minOccurs="0" maxOccurs="unbounded" 
              nxsd:style="array,terminated" nxsd:arrayLength="${len}"
nxsd:terminatedBy=";" />
    </sequence>
  </complexType>
</element>

</schema>

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

<array xmlns="http://xmlns.oracle.com/pcbpel/nxsd/smoketest">
   <TotalMembers>3</TotalMembers>
   <Member>John</Member>
   <Member>Steve</Member>
   <Member>Paul</Member>
</array>

6.2.2.6 条件付き処理

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

条件に基づきchoiceモデル・グループ内の1つの要素を処理する場合

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

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

PO28/06/2004^|ABCD Inc.|Oracle
OracleApps025070,000.00
Database  021230,000.00
ProcessCon021040,000.00
PO01/07/2004^|EFGH Inc.|Oracle
Websphere 025070,000.00
DB2       021230,000.00
Eclipse   021040,000.00
SO29/06/2004|Oracle Apps|5
Navneet Singh
PO28/06/2004^|IJKL Inc.|Oracle
Weblogic  025070,000.00
Tuxedo    021230,000.00
JRockit   021040,000.00
IN30/06/2004;Navneet Singh;Oracle;Oracle Apps;5;70,000.00;350,000.00

ネイティブ・スキーマ: 

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        xmlns:tns="http://www.oracle.com/ias/processconnect"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="container">
 
  <complexType>
    <choice maxOccurs="unbounded" nxsd:choiceCondition="fixedLength"
 nxsd:length="2">
    
      <element ref="tns:PurchaseOrder" nxsd:conditionValue="PO" />
      
      <element ref="tns:SalesOrder" nxsd:conditionValue="SO" />
      
      <element ref="tns:Invoice" nxsd:conditionValue="IN" />
      
    </choice>
  </complexType>
</element>
 
<!-- PO -->
<element name="PurchaseOrder" type="tns:POType"/>
 
<complexType name="POType">
  <sequence>
 
    <element name="Date" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="^" />
    <element name="Buyer" type="string" nxsd:style="surrounded"
       nxsd:surroundedBy="|" />
    <element name="Supplier" type="string" nxsd:style="terminated"
 nxsd:terminatedBy="${eol}" />
    <element name="Items">
      <complexType>
        <sequence>
          <element name="Line-Item" minOccurs="3" maxOccurs="3">
            <complexType>
              <group ref="tns:LineItems" />
            </complexType>
          </element>
        </sequence>
      </complexType>
    </element>
  </sequence>
</complexType>
 
<group name="LineItems">
  <sequence>
    <element name="Id" type="string" nxsd:style="fixedLength" nxsd:length="10"
        nxsd:padStyle="none"/>
    <element name="Quantity" type="string" nxsd:style="fixedLength"
        nxsd:identifierLength="2" />
    <element name="Price" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="${eol}" />
  </sequence>
</group>
 
<!-- SO -->
<element name="SalesOrder" type="tns:SOType" />
 
<complexType name="SOType">
  <sequence>
    <element name="Date" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="|" />
    <element name="Item" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="|" />
    <element name="Quantity" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="${eol}" />
    <element name="Buyer" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="${eol}" />
  </sequence>
</complexType>
 
<!-- INV -->
<element name="Invoice" type="tns:INVType" />
 
<complexType name="INVType">
  <sequence>
    <element name="Date" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Purchaser" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Seller" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Item" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Price" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Quantity" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="TotalPrice" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" />
  </sequence>
</complexType>
 
</schema>

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

<container xmlns="http://www.oracle.com/ias/processconnect">
   <PurchaseOrder>
      <Date>28/06/2004</Date>
      <Buyer>ABCD Inc.</Buyer>
      <Supplier>Oracle</Supplier>
      <Items>
         <Line-Item>
            <Id>OracleApps</Id>
            <Quantity>50</Quantity>
            <Price>70,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>Database  </Id>
            <Quantity>12</Quantity>
            <Price>30,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>ProcessCon</Id>
            <Quantity>10</Quantity>
            <Price>40,000.00</Price>
         </Line-Item>
      </Items>
   </PurchaseOrder>
   <PurchaseOrder>
      <Date>01/07/2004</Date>
      <Buyer>EFGH Inc.</Buyer>
      <Supplier>Oracle</Supplier>
      <Items>
         <Line-Item>
            <Id>Websphere </Id>
            <Quantity>50</Quantity>
            <Price>70,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>DB2       </Id>
            <Quantity>12</Quantity>
            <Price>30,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>Eclipse   </Id>
            <Quantity>10</Quantity>
            <Price>40,000.00</Price>
         </Line-Item>
      </Items>
   </PurchaseOrder>
   <SalesOrder>
      <Date>29/06/2004</Date>
      <Item>Oracle Apps</Item>
      <Quantity>5</Quantity>
      <Buyer>Navneet Singh</Buyer>
   </SalesOrder>
   <PurchaseOrder>
      <Date>28/06/2004</Date>
      <Buyer>IJKL Inc.</Buyer>
      <Supplier>Oracle</Supplier>
      <Items>
         <Line-Item>
            <Id>Weblogic  </Id>
            <Quantity>50</Quantity>
            <Price>70,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>Tuxedo    </Id>
            <Quantity>12</Quantity>
            <Price>30,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>JRockit   </Id>
            <Quantity>10</Quantity>
            <Price>40,000.00</Price>
         </Line-Item>
      </Items>
   </PurchaseOrder>
   <Invoice>
      <Date>30/06/2004</Date>
      <Purchaser>Navneet Singh</Purchaser>
      <Seller>Oracle</Seller>
      <Item>Oracle Apps</Item>
      <Price>5</Price>
      <Quantity>70,000.00</Quantity>
      <TotalPrice>350,000.00</TotalPrice>
   </Invoice>
</container>

条件に基づきsequenceモデル・グループ内の複数の要素を処理する場合

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

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

PO28/06/2004^|ABCD Inc.|Oracle
OracleApps025070,000.00
Database  021230,000.00
ProcessCon021040,000.00
PO01/07/2004^|EFGH Inc.|Oracle
Websphere 025070,000.00
DB2       021230,000.00
Eclipse   021040,000.00
SO29/06/2004|Oracle Apps|5
Navneet Singh
PO28/06/2004^|IJKL Inc.|Oracle
Weblogic  025070,000.00
Tuxedo    021230,000.00
JRockit   021040,000.00
IN30/06/2004;Navneet Singh;Oracle;Oracle Apps;5;70,000.00;350,000.00

ネイティブ・スキーマ: 

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
        xmlns:tns="http://www.oracle.com/ias/processconnect"
        targetNamespace="http://www.oracle.com/ias/processconnect"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified"
        nxsd:stream="chars"
        nxsd:version="NXSD">
 
<element name="container">
 
  <complexType>
    <sequence maxOccurs="unbounded">
    
      <element ref="tns:PurchaseOrder" minOccurs="0" nxsd:startsWith="PO" />
      
      <element ref="tns:SalesOrder" minOccurs="0" nxsd:startsWith="SO" />
      
      <element ref="tns:Invoice" minOccurs="0" nxsd:startsWith="IN" />
      
    </sequence>
  </complexType>
</element>
 
<!-- PO -->
<element name="PurchaseOrder" type="tns:POType"/>
 
<complexType name="POType">
  <sequence>
 
    <element name="Date" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="^" />    <element name="Buyer" type="string" nxsd:style="surrounded"
       nxsd:surroundedBy="|" />
    <element name="Supplier" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" />
    <element name="Items">
      <complexType>
        <sequence>
          <element name="Line-Item" minOccurs="3" maxOccurs="3">
            <complexType>
              <group ref="tns:LineItems" />
            </complexType>
          </element>
        </sequence>
      </complexType>
    </element>
  </sequence>
</complexType>
 
<group name="LineItems">
  <sequence>
    <element name="Id" type="string" nxsd:style="fixedLength" nxsd:length="10"
        nxsd:padStyle="none"/>
    <element name="Quantity" type="string" nxsd:style="fixedLength"
        nxsd:identifierLength="2" />
    <element name="Price" type="string" nxsd:style="terminated"
        nxsd:terminatedBy="${eol}" />
  </sequence>
</group>
 
<!-- SO -->
<element name="SalesOrder" type="tns:SOType" />
 
<complexType name="SOType">
  <sequence>
    <element name="Date" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="|" />
    <element name="Item" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="|" />
    <element name="Quantity" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" />
    <element name="Buyer" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" />  </sequence>
</complexType>
 
<!-- INV -->
<element name="Invoice" type="tns:INVType" />
 
<complexType name="INVType">
  <sequence>
    <element name="Date" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Purchaser" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Seller" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Item" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />    <element name="Price" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="Quantity" type="string" nxsd:style="terminated"
       nxsd:terminatedBy=";" />
    <element name="TotalPrice" type="string" nxsd:style="terminated"
       nxsd:terminatedBy="${eol}" />
  </sequence>
</complexType>
 
</schema>

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

<container xmlns="http://www.oracle.com/ias/processconnect">
   <PurchaseOrder>
      <Date>28/06/2004</Date>
      <Buyer>ABCD Inc.</Buyer>
      <Supplier>Oracle</Supplier>
      <Items>
         <Line-Item>
            <Id>OracleApps</Id>
            <Quantity>50</Quantity>
            <Price>70,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>Database  </Id>
            <Quantity>12</Quantity>
            <Price>30,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>ProcessCon</Id>
            <Quantity>10</Quantity>
            <Price>40,000.00</Price>
         </Line-Item>
      </Items>
   </PurchaseOrder>
   <PurchaseOrder>
      <Date>01/07/2004</Date>
      <Buyer>EFGH Inc.</Buyer>
      <Supplier>Oracle</Supplier>
      <Items>
         <Line-Item>
            <Id>Websphere </Id>
            <Quantity>50</Quantity>
            <Price>70,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>DB2       </Id>
            <Quantity>12</Quantity>
            <Price>30,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>Eclipse   </Id>
            <Quantity>10</Quantity>
            <Price>40,000.00</Price>
         </Line-Item>
      </Items>
   </PurchaseOrder>
   <SalesOrder>
      <Date>29/06/2004</Date>
      <Item>Oracle Apps</Item>
      <Quantity>5</Quantity>
      <Buyer>Navneet Singh</Buyer>
   </SalesOrder>
   <PurchaseOrder>
      <Date>28/06/2004</Date>
      <Buyer>IJKL Inc.</Buyer>
      <Supplier>Oracle</Supplier>
      <Items>
         <Line-Item>
            <Id>Weblogic  </Id>
            <Quantity>50</Quantity>
            <Price>70,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>Tuxedo    </Id>
            <Quantity>12</Quantity>
            <Price>30,000.00</Price>
         </Line-Item>
         <Line-Item>
            <Id>JRockit   </Id>
            <Quantity>10</Quantity>
            <Price>40,000.00</Price>
         </Line-Item>
      </Items>
   </PurchaseOrder>
   <Invoice>
      <Date>30/06/2004</Date>
      <Purchaser>Navneet Singh</Purchaser>
      <Seller>Oracle</Seller>
      <Item>Oracle Apps</Item>
      <Price>5</Price>
      <Quantity>70,000.00</Quantity>
      <TotalPrice>350,000.00</TotalPrice>
   </Invoice>
</container>

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"およびロケール・サポートが追加されています。


次の例に、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は、スタイルを使用して位置から値を読み取り、その値を後で使用できるように変数に格納します。

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>

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 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.15 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.16 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.17 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.18 タイムゾーンを使用した日付書式の定義

トランスレータでは、日付または時刻がタイムゾーンに関連付けられている必要があります。トランスレータでは、ネイティブ・データの日付と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.19 変換中の検証の実装

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

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

6.2.2.19.1 ペイロード検証

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

トップレベル検証

トップレベル検証では、DOMResult(Document Object Model形式の結果)がXMLスキーマと対照して検証されます。この形式の検証は、インバウンド・ペイロードとアウトバウンド・ペイロードの両方について実装されます。また、この形式の検証では、無効なレコードのパブリッシュを制御してXML検証エラーに関する情報を提供できます。ただし、変換コンテキストは提供されません。たとえば、ネイティブ・ストリーム内でエラーが発生した行と列の情報は、トップレベル検証では提供されません。

XMLメッセージのトップレベル検証を実装するには、次のようにします。

  • メッセージのnxsdネームスペースを次のように設定する必要があります。

    xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" 
    
  • 検証フラグを次のようにtrueに設定する必要があります。

    nxsd:validation="true"
    

例:

<schema xmlns="http://www.w3.org/2001/XMLSchema" 
     xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" 
        targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" 
        elementFormDefault="qualified" 
         attributeFormDefault="unqualified" 
        nxsd:stream="chars" 
         nxsd:version="NXSD" 
        nxsd:validation="true" 
        > 

フィールドレベル検証

フィールドレベル検証では、個々のフィールドがXMLスキーマと対照して検証されます。この形式の検証はインバウンド・ペイロードについてのみ実装され、アウトバウンド・ペイロードについては実装されません。

XMLメッセージがXMLスキーマに準拠していない場合は、エラーが発生した正確な行と文字に関する情報が表示されます。

XMLメッセージのフィールドレベル検証を実装するには、次のようにします。

  • メッセージのnxsdネームスペースを次のように設定する必要があります。

    xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
    
  • 検証フラグを次のようにtrueに設定する必要があります。

    nxsd:fieldValidation="true"
    

例:

<schema xmlns="http://www.w3.org/2001/XMLSchema" 
xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" 
targetNamespace="http://xmlns.oracle.com/pcbpel/nxsd/smoketest" 
elementFormDefault="qualified" 
attributeFormDefault="unqualified" 
 nxsd:stream="chars" 
  nxsd:version="NXSD" 
   nxsd:fieldValidation="true" 
   > 
6.2.2.19.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.20 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 マルチバイト・トランスレーション

ネイティブ・フォーマット・ビルダーでは、文字によって変換されるインバウンド・ネイティブ・データが理解されます。このトランスレータは、内部で文字データを使用します。

しかし、バイトとしてフィールド長を指定したり、バイトによる長さの指定が必要な固定長データを処理したりすることが必要な場合もあります。

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

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

nxsd:lengthUnits="Byte|Char"

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

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

パディングされるデータを指定することもできます。これを行うと、トランスレータによってパディング・データの発生がすべて取り除かれます。これを行うには、取り除かれるパディング・バイト・データの書式をトランスレータで把握できるようにする必要があります。

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

パディングされるデータ型の書式の説明は、次の表を参照してください。

書式 説明

10進

パディング・データを10進数の書式で指定します。パディングされるバイトに対応する10進数の値を指定する必要があります。パディング・データを1バイトを超えて指定する場合は、各バイトに対応する長さを3にする必要があります。001002、01213などは、パディング・データとしてバイトが追加されていることを示します。

バイナリ

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

8進

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

16進

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

string

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


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

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

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

注意:

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


6.2.3.3 トランスレータの動作

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

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

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

入力ストリームに十分なデータが含まれていない場合は、notEnoughData例外が発生します。

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

残りのバイトが文字境界に一致しないか、または残りのバイトがなんらかの理由で文字に変換できない場合は、トランスレータにより例外がスローされます。データを文字に変換することに成功した場合、それらの文字はXMLにパブリッシュされます。

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

6.2.3.4 SOSIのサポート

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

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

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

nxsd:escapeBytes="sosi"

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

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

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

データがバイトに変換されると、トランスレータではまず接頭辞または接尾辞(存在する場合)が削除されます。トランスレータは、スキーマで指定された長さに従って生成されたバイト数をチェックします。生成されたバイト数がスキーマで指定されたものより大きい場合は、トランスレータによって例外がスローされます。

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

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関数はデータベース・ベースの新しい添付を作成し、これを返します。詳細は、例6-4を参照してください。

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

attachmentElement

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


例6-1 XPath関数の構成: 入力データが文字列タイプで、XML DOMに変換する必要がある場合

<variables>
     <variable…/>
    <variable name="csv_data" type="xsd:string"/>
  </variables>
<assign name="assignCSVData">
      <copy>
        <from expression="'this, is, csv, data…'"/>
        <to variable="csv_data"/>
      </copy>
</assign>
 
<assign name="doTranslateFromNativeCall">
      <copy>
        <from expression="ora: doTranslateFromNative (bpws:getVariableData('csv_data'),'xsd/address-csv.xsd','Root-Element','DOM')"/>
        <to variable="returnVariable" query="/ns1:Root-Element"/>
      </copy>
    </assign>

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

  • csv_dataは、XMLに変換するCSVデータを含んでいるBPEL変数です。

  • xsd/address-csv.xsdは、プロジェクト内のNXSDスキーマへの相対パスです。

  • Root-Elementは、NXSDスキーマ内のルート要素です(オプション)。

  • returnVariableは、DOMとして返されるXMLデータです。

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

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

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

例6-4 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?')

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

パラメータ 説明

input

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

nxsdTemplate

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

nxsdRoot

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

targetType

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

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

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

attachmentElement

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


例6-5 XPath関数の構成: 入力データがXMLフォーマットで、CSV文字列フォーマットに変換する必要がある場合

<variables>
     <variable…/>
   <variable name="inputDOM" type="ns1:Root-Element"/> <!- - data that must be translated into native - ->
    <variable name="returned_csv_data" type="xsd:string"/>
  </variables>
 
<assign name="doTranslateToNativeCall">
      <copy>
        <from expression="ora: doTranslateToNative (bpws:getVariableData('inputDOM'),'xsd/address-csv.xsd','Root-Element','STRING')"/>
        <to variable="returned_csv_data"/>
      </copy>
    </assign>

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

  • inputDOMは、変換したCSVを表す文字列データに変換するXMLデータを含んでいるBPEL DOM変数です。

  • xsd/address-csv.xsdは、プロジェクト内のNXSDスキーマへの相対パスです。

  • Root-Elementは、NXSDスキーマ内のルート要素です。

  • return_csv_dataは、変換されたCSVデータを含んでいる文字列変数です。

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

  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?')

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

パラメータ 説明

input

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

streamingXpathContext

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

targetType

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

attachmentElement

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


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

<schema  targetNamespace="…">
    <element name="streamingcontext">
        complexType>
            <sequence>
                <element name="sourceSchema" type="string"/>
                <element name="sourceRootElement" type="string"/>
                <element name="sourceType" type="string"/>
                <element name="xsl" type="string"/>
                <element name="targetSchema" type="string"/>
                <element name="targetRootElement" type="string"/>
                <element name="targetType" type="string"/>
                <element name="batchSize" type="string"/>
            </sequence>
        </complexType>
    </element>        
</schema>

このコンテキストの内容は次のとおりです。

スキーマ要素 説明

sourceSchema

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

sourceRootElement

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

sourceType

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

xsl

XSLファイルの相対パス。

targetSchema

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

targetRootElement

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

targetType

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

batchSize

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


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

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

適用性

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

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

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

XSLTエンジンのバッチ起動

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. 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スタイルの詳細は、第6.2.2.2項「終了データの定義」を参照してください。

この使用例では、ネイティブ・フォーマット・ビルダーにより、名前、番地、市区町村、都道府県および国などの住所詳細を含んだデリミタ付きサンプル・ファイル・タイプが使用されます。このサンプル・ネイティブ・ファイル内の要素は、すべてカンマ(,)で区切られています。対応する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に示すように、「デリミタの指定」ページが表示されます。

    図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.2.2.2項「終了データの定義」を参照してください。

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に変換されます。

    <?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 One^First Street   999       San Jose       95129USCA650-801-6250
           ^Oracle^Bridge Parkway 1600      Redwood Shores 94065USCA650-506-7000
    001|BPEL Process Manager Enterprise Edition|20000,2,+40000+
    002|BPEL Process Manager Standard Edition|10000,5,+50000+
    003|BPEL Process Manager Developer Edition|1000,20,+20000+#110000
    
  2. 図6-4に示すように、アダプタ構成ウィザードを起動し、「メッセージ」ページにナビゲートして「ネイティブ・フォーマットのスキーマの定義」をクリックします。図6-5に示すように、「ネイティブ・フォーマット・ビルダー: ようこそ」ページが表示されます。

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

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

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

  4. 「複合タイプ(フィールドそのものがレコードで複数のデリミタ・タイプを持つ可能性があるレコードが含まれています)」を選択します。

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

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

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

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

  7. 「次へ」をクリックします。図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. 各フィールドの横にある鉛筆アイコンをクリックし、対応する「フィールド詳細の編集」ダイアログを表示します。このダイアログでフィールド・プロパティを編集できます。たとえば、「name」フィールドの横にある鉛筆アイコンをクリックします。図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. 「スキーマ・ツリー」に「<new_complex_type>」ノードをもう1つ作成します。「partner-type複合タイプの作成」のステップ1を参照してください。

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

  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. 「次へ」をクリックします。図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は次のようになります。

    <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. 「次へ」をクリックします。図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.4.3項「複雑なファイル構造のスキーマの定義」を参照してください。

    図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 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 「生成されたネイティブ・フォーマット・スキーマ・ファイル」ページ」の説明

    ネイティブ・スキーマ

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

    <?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 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 been
    added to the schema.-->
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://TargetNamespace.com/ReadUI"
    xmlns="http://TargetNamespace.com/ReadUI" nxsd:version="DTD"
     xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd">
       <xs:element name="GlobalDatabaseName" type="xs:string"/>
       <xs:element name="DatabaseAttributes">
          <xs:complexType>
             <xs:attribute name="Type" use="required">
                <xs:simpleType>
                   <xs:restriction base="xs:NMTOKEN">
                      <xs:enumeration value="Production"/>
                      <xs:enumeration value="Development"/>
                      <xs:enumeration value="Testing"/>
                   </xs:restriction>
                </xs:simpleType>
             </xs:attribute>
             <xs:attribute name="Version" use="optional" default="9i">
                <xs:simpleType>
                   <xs:restriction base="xs:NMTOKEN">
                      <xs:enumeration value="7"/>
                      <xs:enumeration value="8"/>
                      <xs:enumeration value="8i"/>
                      <xs:enumeration value="9i"/>
                   </xs:restriction>
                </xs:simpleType>
             </xs:attribute>
          </xs:complexType>
       </xs:element>
       <xs:element name="Comments" type="xs:string"/>
       <xs:element name="Administrator">
          <xs:complexType>
             <xs:simpleContent>
                <xs:extension base="xs:string">
                   <xs:attribute name="EmailAlias" use="required"
     type="xs:string"/>
                   <xs:attribute name="Extension" use="optional" type="xs:string"/>
                </xs:extension>
             </xs:simpleContent>
          </xs:complexType>
       </xs:element>
       <xs:element name="OracleSID" type="xs:string"/>
       <xs:element name="DatabaseName">
          <xs:complexType>
             <xs:sequence>
                <xs:element ref="GlobalDatabaseName"/>
                <xs:element ref="OracleSID"/>
                <xs:element ref="DatabaseDomain"/>
                <xs:element maxOccurs="unbounded" ref="Administrator"/>
                <xs:element ref="DatabaseAttributes"/>
                <xs:element ref="Comments"/>
             </xs:sequence>
          </xs:complexType>
       </xs:element>
       <xs:element name="DatabaseDomain" type="xs:string"/>
       <xs:element name="DatabaseInventory">
          <xs:complexType>
             <xs:sequence>
                <xs:element maxOccurs="unbounded" ref="DatabaseName"/>
             </xs:sequence>
          </xs:complexType>
       </xs:element>
    </xs:schema>
    
  8. 「次へ」をクリックします。ネイティブ・フォーマット・ビルダーの「終了」ページが表示されます。

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

6.4.9 COBOLコピーブック・ファイル構造のスキーマの定義

この使用例は、変換用のネイティブ・スキーマ・ファイルを作成するために、Oracleファイル/FTPアダプタが(ネイティブ・フォーマット・ビルダー・ウィザードを使用して)COBOLコピーブック・フォーマットのファイルをどのように処理するかを示しています。

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

複数のルート・レベル

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

この使用例では、ネイティブ・フォーマット・ビルダーにより、購入者名、住所および項目などの注文書詳細を含んだpo-ccb.cpyという固定長ファイル・タイプが使用されます。このpo-ccb.cpyネイティブ・ファイル内の要素は、すべて固定長です。サンプル・テキスト・ファイルpo-ccb.cpy内のデータは、次のとおりです。

05 PO-RECORD.
10 PO-BUYER.
15 PO-UID PIC 9(7).
15 PO-NAME PIC X(15).
15 PO-ADDRESS.
20 PO-STREET PIC X(15).
20 PO-CITY PIC X(10).
20 PO-ZIP PIC 9(5).
20 PO-STATE PIC X(2).
10 PO-ITEM.
15 POITEM OCCURS 3 TIMES.
20 PO-LINE-ITEM.
25 PO-ITEM-ID PIC 9(3).
25 PO-ITEM-NAME PIC X(40).
25 PO-ITEM-QUANTITY PIC 9(2).
25 PO-ITEM-PRICE PIC 9(5)V9(2).
10 PO-TOTALPIC 9(7)V9(2).

対応するNXSDを生成し、同様にテストできます。この使用例を実行する手順は、次のとおりです。

  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を含んだアダプタ構成ウィザードの「メッセージ」ページが表示されます。

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

次のCOBOLコピーブックには、単一のルート・レベル・アイテムPO-RECORDがあります。単一のルート・レベルの場合には、コンバータの動作は同じであるためレベル番号は問題ではありません。このCOBOLコピーブックでは、仮想小数点として宣言されたフィールド(PO-ITEM-PRICE)の例も示しています。

05 PO-RECORD. 
      10 PO-BUYER. 
        15 PO-UID    PIC 9(7). 
        15 PO-NAME   PIC X(15). 
        15 PO-ADDRESS. 
            20 PO-STREET PIC X(15). 
            20 PO-CITY   PIC X(10). 
            20 PO-ZIP    PIC 9(5). 
            20 PO-STATE  PIC X(2). 
      10 PO-ITEM. 
        15 POITEM OCCURS 3 TIMES. 
            20 PO-LINE-ITEM. 
              25 PO-ITEM-ID       PIC 9(3). 
              25 PO-ITEM-NAME     PIC X(40). 
              25 PO-ITEM-QUANTITY PIC 9(2). 
              25 PO-ITEM-PRICE    PIC 9(5)V9(2). 
      10 PO-TOTAL PIC  9(7)V9(2). 

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

<?xml version="1.0" encoding="UTF-8" ?> 
<!--Native format was generated from COBOL copybook : D:\work\
jDevProjects\CCB\Copybooks\po-ccb.cpy--> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" 
       xmlns:extn="http://xmlns.oracle.com/pcbpel/nxsd/extensions" 
       targetNamespace="http://TargetNamespace.com/ccb/singleRoot" 
       xmlns:tns="http://TargetNamespace.com/ccb/singleRoot" 
       elementFormDefault="qualified" attributeFormDefault="unqualified" 
       nxsd:version="NXSD" nxsd:encoding="cp037" nxsd:byteOrder="bigEndian" 
       nxsd:stream="chars"> 
 <xsd:element name="Root-Element"> 
  <xsd:complexType> 
   <xsd:sequence> 
    <!--COBOL declaration : 05 PO-RECORD --> 
    <xsd:element name="PO-RECORD" minOccurs="1" maxOccurs="unbounded"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <!--COBOL declaration : 10 PO-BUYER--> 
       <xsd:element name="PO-BUYER"> 
        <xsd:complexType> 
         <xsd:sequence> 
          <!--COBOL declaration : 15 PO-UID PIC 9(7)--> 
          <xsd:element name="PO-UID" type="xsd:long" 
                  nxsd:style="fixedLength" nxsd:padStyle="head" 
                  nxsd:paddedBy="0" nxsd:length="7"/> 
          <!--COBOL declaration : 15 PO-NAME PIC X(15)--> 
          <xsd:element name="PO-NAME" type="xsd:string" 
                  nxsd:style="fixedLength" nxsd:padStyle="tail" 
                  nxsd:paddedBy=" " nxsd:length="15"/> 
          <!--COBOL declaration : 15 PO-ADDRESS--> 
          <xsd:element name="PO-ADDRESS"> 
                  <xsd:complexType> 
                  <xsd:sequence> 
          <!--COBOL declaration : 20 PO-STREET PIC X(15)--> 
          <xsd:element name="PO-STREET" type="xsd:string" 
                  nxsd:style="fixedLength" 
                  nxsd:padStyle="tail" nxsd:paddedBy=" " 
                  nxsd:length="15"/> 
          <!--COBOL declaration : 20 PO-CITY PIC X(10)--> 
          <xsd:element name="PO-CITY" type="xsd:string" 
                  nxsd:style="fixedLength" 
                  nxsd:padStyle="tail" nxsd:paddedBy=" " 
                  nxsd:length="10"/> 
          <!--COBOL declaration : 20 PO-ZIP PIC 9(5)--> 
          <xsd:element name="PO-ZIP" type="xsd:long" 
                  nxsd:style="fixedLength" 
                  nxsd:padStyle="head" nxsd:paddedBy="0" 
                  nxsd:length="5"/> 
          <!--COBOL declaration : 20 PO-STATE PIC X(2)--> 
          <xsd:element name="PO-STATE" type="xsd:string" 
                  nxsd:style="fixedLength" 
                  nxsd:padStyle="tail" nxsd:paddedBy=" " 
                  nxsd:length="2"/> 
         </xsd:sequence> 
        </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
    <!--COBOL declaration : 10 PO-ITEM--> 
    <xsd:element name="PO-ITEM"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <!--COBOL declaration : 15 POITEM OCCURS 3 TIMES--> 
       <xsd:element name="POITEM" minOccurs="3" maxOccurs="3"> 
        <xsd:complexType> 
         <xsd:sequence> 
          <!--COBOL declaration : 20 PO-LINE-ITEM--> 
          <xsd:element name="PO-LINE-ITEM"> 
           <xsd:complexType> 
            <xsd:sequence> 
             <!--COBOL declaration : 25 PO-ITEM-ID PIC 9(3)--> 
             <xsd:element name="PO-ITEM-ID" type="xsd:long" 
                     nxsd:style="fixedLength" 
                     nxsd:padStyle="head" 
                     nxsd:paddedBy="0" nxsd:length="3"/> 
             <!--COBOL declaration : 25 PO-ITEM-NAME PIC X(40)--> 
             <xsd:element name="PO-ITEM-NAME" 
                     type="xsd:string" 
                     nxsd:style="fixedLength" 
                     nxsd:padStyle="tail" 
                     nxsd:paddedBy=" " nxsd:length="40"/> 
             <!--COBOL declaration : 25 PO-ITEM-QUANTITY PIC 9(2)--> 
             <xsd:element name="PO-ITEM-QUANTITY" 
                     type="xsd:long" 
                     nxsd:style="fixedLength" 
                     nxsd:padStyle="head" 
                     nxsd:paddedBy="0" nxsd:length="2"/> 
             <!--COBOL declaration : 25 PO-ITEM-PRICE PIC 9(5)V9(2)--> 
             <xsd:element name="PO-ITEM-PRICE" 
                     type="xsd:decimal" 
                     nxsd:style="virtualDecimal" 
                     extn:assumeDecimal="5" 
                     extn:picSize="7"/> 
            </xsd:sequence> 
           </xsd:complexType> 
          </xsd:element> 
         </xsd:sequence> 
        </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 
     </xsd:complexType> 
       </xsd:element> 
       <!--COBOL declaration : 10 PO-TOTAL PIC 9(7)V9(2)--> 
       <xsd:element name="PO-TOTAL" type="xsd:decimal" 
               nxsd:style="virtualDecimal" extn:assumeDecimal="7" 
               extn:picSize=" "/> 
      </xsd:sequence>
     </xsd:complexType>
    </xsd:element> 
   </xsd:sequence> 
  </xsd:complexType> 
 </xsd:element> 
</xsd:schema> 

可変長配列

05 EMP-RECORD . 
   10 EMP-NAME         PIC X(30). 
   10 EMP-DIV-NUM      PIC 9(5). 
   10 DIV-ENTRY OCCURS 1 TO 50 TIMES 
      DEPENDING ON EMP-DIV-NUM. 
      20 DIV-CODE             PIC X(30). 

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

<?xml version="1.0" encoding="UTF-8" ?> 
<!--Native format was generated from COBOL copybook : D:\work\
jDevProjects\CCB\Copybooks\odo.cpy--> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" 
       xmlns:extn="http://xmlns.oracle.com/pcbpel/nxsd/extensions" 
       targetNamespace="http://TargetNamespace.com/ccb/varLengthArray" 
       xmlns:tns="http://TargetNamespace.com/ccb/varLengthArray" 
       elementFormDefault="qualified" attributeFormDefault="unqualified" 
       nxsd:version="NXSD" nxsd:encoding="cp037" nxsd:byteOrder="bigEndian" 
       nxsd:stream="chars"> 
 <xsd:element name="Root-Element"> 
  <xsd:complexType> 
   <xsd:sequence> 
    <!--COBOL declaration :05 EMP-RECORD --> 
    <xsd:element name="EMP-RECORD" minOccurs="1" maxOccurs="unbounded"> 
     <xsd:annotation> 
      <xsd:appinfo> 
       <nxsd:variables> 
        <nxsd:variable name="DIV-ENTRY_var0"/> 
       </nxsd:variables> 
      </xsd:appinfo> 
      </xsd:annotation> 
      <xsd:complexType> 
       <xsd:sequence> 
        <!--COBOL declaration : 10 EMP-NAME PIC X(30)--> 
        <xsd:element name="EMP-NAME" type="xsd:string" 
                nxsd:style="fixedLength" nxsd:padStyle="tail" 
                nxsd:paddedBy=" " nxsd:length="30"/> 
        <!--COBOL declaration : 10 EMP-DIV-NUM PIC 9(5)--> 
        <xsd:element name="EMP-DIV-NUM" type="xsd:long" 
                nxsd:style="fixedLength" nxsd:padStyle="head" 
                nxsd:paddedBy="0" nxsd:length="5"> 
         <xsd:annotation> 
          <xsd:appinfo> 
           <nxsd:variables> 
            <nxsd:assign name="DIV-ENTRY_var0" value="${0}"/> 
           </nxsd:variables> 
          </xsd:appinfo> 
         </xsd:annotation> 
        </xsd:element> 
       <!--COBOL declaration : 10 DIV-ENTRY OCCURS 1 TO 50 TIMES DEPENDING ON 
          EMP-DIV-NUM--> 
        <xsd:element name="DIV-ENTRY" nxsd:style="array" 
                nxsd:arrayLength="${DIV-ENTRY_var0}" minOccurs="1" 
                maxOccurs="50"> 
         <xsd:complexType> 
          <xsd:sequence> 
           <!--COBOL declaration : 20 DIV-CODE PIC X(30)--> 
           <xsd:element name="DIV-CODE" type="xsd:string" 
                   nxsd:style="fixedLength" nxsd:padStyle="tail" 
                   nxsd:paddedBy=" " nxsd:length="30"/> 
          </xsd:sequence> 
         </xsd:complexType> 
        </xsd:element> 
       </xsd:sequence> 
      </xsd:complexType> 
     </xsd:element> 
    </xsd:sequence> 
   </xsd:complexType> 
  </xsd:element> 
</xsd:schema> 

数値のタイプ

01   NUMERIC-FORMATS. 
     05    Salary         PIC 9(5) COMP-3. 
     05    Rating         PICTURE S9(5).  
     05    Age            PIC 9(3) USAGE COMP. 
     05    Revenue        PIC 9(3)V9(2). 
     05    Growth         PIC S9(3) SIGN IS LEADING. 
     05    Computation    COMP-1. 

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

<?xml version="1.0" encoding="UTF-8" ?> 
<!--Native format was generated from COBOL copybook : 
D:\work\jDevProjects\CCB\Copybooks\numeric.cpy--> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd" 
       xmlns:extn="http://xmlns.oracle.com/pcbpel/nxsd/extensions" 
       targetNamespace="http://TargetNamespace.com/ccb/numeric" 
       xmlns:tns="http://TargetNamespace.com/ccb/numeric" 
       elementFormDefault="qualified" attributeFormDefault="unqualified" 
       nxsd:version="NXSD" nxsd:encoding="cp037" nxsd:byteOrder="bigEndian" 
       nxsd:stream="bytes"> 
  <xsd:element name="Numerics"> 
   <xsd:complexType> 
    <xsd:sequence> 
      <!--COBOL declaration :01 NUMERIC-FORMATS--> 
       <xsd:element name="NUMERIC-FORMATS" minOccurs="1" maxOccurs="unbounded"> 
        <xsd:complexType> 
         <xsd:sequence> 
          <!--COBOL declaration : 05 Salary PIC 9(5) COMP-3--> 
          <xsd:element name="Salary" type="xsd:long" nxsd:style="comp3" 
                  extn:sign="unticked" extn:picSize="5"/> 
          <!--COBOL declaration : 05 Rating PICTURE S9(5)--> 
          <xsd:element name="Rating" type="xsd:string" 
                  nxsd:style="signZoned" extn:sign="ticked" 
                  extn:picSize="5" extn:signPosn="tailUpperNibble"/> 
          <!--COBOL declaration : 05 Age PIC 9(3) USAGE COMP--> 
          <xsd:element name="Age" type="xsd:long" nxsd:style="comp" 
                  extn:picSize="3" extn:sign="unticked"/> 
          <!--COBOL declaration : 05 Revenue PIC 9(3)V9(2)--> 
          <xsd:element name="Revenue" type="xsd:decimal" 
                  nxsd:style="virtualDecimal" extn:assumeDecimal="3" 
                  extn:picSize="5"/> 
          <!--COBOL declaration : 05 Growth PIC S9(3) SIGN IS LEADING--> 
          <xsd:element name="Growth" type="xsd:string" 
                  nxsd:style="signZoned" extn:sign="ticked" 
                  extn:picSize="3" extn:signPosn="headUpperNibble"/> 
          <!--COBOL declaration : 05 Computation COMP-1--> 
          <xsd:element name="Computation" type="xsd:float" 
                  nxsd:style="comp1" extn:sign="ticked"/> 
         </xsd:sequence> 
        </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 
    </xsd:complexType> 
  </xsd:element> 
</xsd:schema> 

この場合、すべての数値のタイプはIBM COBOLフォーマットに応じて指定されたフォーマットに従います。異なるレイアウトを使用して異なるシステムで作成されたデータ・ファイルの場合は、生成されたスキーマを変更する必要があります。

6.5 nXSDトランスレータのテスト用コマンドライン・ツール

nXSD注釈が正しいことや、生成されたXML/ネイティブ・データがビジネス・セマンティクスに準拠していることを確認するために、nXSDスキーマのテストが必要になる場合があります。現在この作業を行うには、インバウンドまたはアウトバウンド、あるいはその両方のファイル・アダプタ・パートナ・リンクを含んだBPELプロセスを記述し、適切なnXSDスキーマで構成した後、SOAサーバー上でそれらをテストする必要があります。この場合、作業に時間がかかり、エラーも起こりやすくなります。

単純なスタンドアロン・テスト・クライアントを使用することで、nXSDスキーマを検証できるようになります。

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を実行すると、次のように使用方法が表示されます。-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ファイルへの変換」の説明