assignアクティビティでのデータ操作およびXPath標準
BPELのデータ操作は、XPath標準に基づくassignアクティビティが開始点になります。このタイプの操作では多くの場合、XPath問合せ、式および関数が使用されます。
通常は、より複雑なデータ・トランスフォーメーションまたは操作を行うためのXQuery、XSLTまたはJavaを使用する高度な方法も使用できます。
この項では、BPELでXMLデータを操作する方法の概要を説明します。様々な組合せで使用される主要なビルディング・ブロックの概要を示し、例をあげて説明します。後続の各項では、これらのビルディング・ブロックを適用して特定のタスクを実行する方法について説明します。
XML変数間でデータをコピーする場合、または式の値を計算して変数に格納するには、assignアクティビティを使用します。アクティビティ内のcopy要素は、互換性のあるタイプの割当てのソースとターゲット(コピー先とコピー元の内容)を指定します。
次の例に、「Business Process Execution Language for Web Services Specification」に記載されているBPELバージョン1.1の正式な構文を示します。
<assign standard-attributes> standard-elements <copy> from-spec to-spec </copy> </assign>
次の例に、「Web Services Business Process Execution Language Specification Version 2.0」に記載されているBPELバージョン2.0の正式な構文を示します。keepSrcElementName
属性は、コピー操作中に(to-spec
の選択に従って)宛先の要素名が、(from-spec
の選択に従って)ソースの要素名で置換されるかどうかを指定します。keepSrcElementName
をno
(デフォルト値)に設定すると、元の宛先要素の名前(つまり、ネームスペース名とローカル名のプロパティ)が、作成される要素の名前として使用されます。keepSrcElementName
をyes
に設定すると、ソース要素名が、作成される宛先要素の名前として使用されます。
<assign validate="yes|no"? standard-attributes> standard-elements ( <copy keepSrcElementName="yes|no"? ignoreMissingFromData="yes|no"?> from-spec to-spec </copy> . . . . . . </assign>
この構文は、両方の仕様で詳細に説明されています。通常、from-spec
およびto-spec
は、次の例に示すように、変数または変数パートを指定します。
<assign> <copy> <from variable="c1" part="address"/> <to variable="c3"/> </copy> </assign>
Oracle JDeveloperを使用する場合は、「From」セクションと「To」セクションを備えた「コピー・ルール」ダイアログでassignアクティビティの詳細を指定します。これにより、前述のBPELソース・コードの構文が反映されます。
XPath標準は、assignアクティビティで主要な役割を果たします。概要として、簡単な例をここに示します。その他のコンテキストでの例および説明は、後続の各項に示します。
-
XPath問合せ
XPath問合せは、ソースまたはターゲットの変数パート内のフィールドを選択します。
from
句またはto
句には、値がXPath問合せ文字列であるquery属性を含めることができます。次にコードの例を示します。<from variable="input" part="payload" query="/p:CreditFlowRequest/p:ssn"/>
query属性の値には、ノードを1つのみ選択するロケーション・パスを指定する必要があります。
query
属性およびXPath標準の構文の詳細は、それぞれ「Business Process Execution Language for Web Services Specification」(第14.3項)、「 Services Business Process Execution Language Specification Version 2.0」(第8.4項)および「XML Path Language (XPath) Specification」を参照してください。 -
XPath式
XPath式(
from
句のexpression
属性で指定)を使用して、変数に格納する値を指定します。例:<from expression="100"/>
式には一般的な式(つまり、任意のXPath値のタイプに評価されるXPath式)を指定できます。同様に、式属性の値がコピー操作内の
from
句で使用される場合、式属性の値は必ず1つのノードまたは1つのオブジェクトのみを返す必要があります。XPath式の詳細は、「XML Path Language (XPath) Specification」の第9.1.4項を参照してください。
XPath式内では、次の種類の関数をコールできます。
-
コアXPath関数
XPathでは、文字列操作関数(
concat
など)や数値関数(sum
など)を含む多数の組込み関数がサポートされています。<from expression="concat('string one', 'string two')"/>
XPath標準に組み込まれた関数の完全なリストは、「XML Path Language (XPath) Specification」の第4項を参照してください。
-
BPEL XPath拡張関数
BPELはいくつかの拡張関数をコアXPath関数に追加し、これによりXPath式がプロセスからの情報にアクセスできます。
-
BPEL 1.1の場合、拡張関数は標準BPELネームスペース
http://schemas.xmlsoap.org/ws/2003/03/business-process/
で定義され、接頭辞bpws
:によって指定されます。<from expression= "bpws:getVariableData('input', 'payload', '/p:value') + 1"/>
詳細は、「Business Process Execution Language for Web Services Specification」の第9.1項および第14.1項を参照してください。
getVariableData
の詳細は、「getVariableData」を参照してください。 -
BPEL 2.0の場合も、拡張関数は標準BPELネームスペース
http://schemas.xmlsoap.org/ws/2003/03/business-process/
で定義されます。ただし、接頭辞はbpel
:になります。<from>bpel:getVariableProperty('input', 'propertyName')</from>
詳細は、「Web Services Business Process Execution Language Specification Version 2.0」の第8.3項を参照してください。
getVariableProperty
の詳細は、「getVariableProperty (BPEL 2.0)」を参照してください。
-
-
Oracle BPEL XPath拡張関数
Oracleには、新しい関数を追加するためにBPELおよびXPath標準に組み込まれた機能を使用する、その他のXPath関数が用意されています。
これらの関数は、ネームスペース
http://schemas.oracle.com/xpath/extension
で定義され、接頭辞ora:
によって指定されます。 -
カスタム関数
Oracle BPEL Process Managerの関数は、
bpel-xpath-functions-config.xml
ファイルに定義され、orabpel.jar
ファイルに格納されます。詳細は、「ユーザー定義XPath拡張関数の作成」を参照してください。
高度なデータ操作をBPELのassignアクティビティやコアXPath関数で実行するのは困難な場合があります。ただし、複雑なデータ操作やデータ・トランスフォーメーションは、XSLT、Java、またはassignアクティビティのbpelx
操作(「bpelx拡張要素を使用したXMLデータの操作」を参照)を使用したり、Webサービスとして実行することができます。XSLTの場合、Oracle BPEL Process ManagerおよびOracle Mediatorには、これらのトランスフォーメーションを実行するXPath関数が組み込まれています。
XPathおよびXQueryトランスフォーメーション・コード例の詳細は、「XSLTマップ・エディタを使用したトランスフォーメーションの作成」および「XQueryマッパーを使用したトランスフォーメーションの作成」を参照してください。
assignアクティビティの詳細は、「Assignアクティビティ」を参照してください。
ノート:
assignアクティビティ経由で大きいスキーマが渡されると、「Assignの編集」ダイアログのターゲットまたはソース・ペイロード・ノードを右クリックして「すべての子ノードを開く」を選択した場合に、Oracle JDeveloperが停止したり、メモリー不足になる可能性があります。回避策として、ペイロード要素は手動で開いてください。