BPEL マッパーでの XPath 関数と演算
執筆および管理: VictoriaZhukovskaya、Alyona Stashkova
2007 年 12 月
BPEL マッパーは XPath 式を視覚的に扱うためのツールです。BPEL マッパーでは、式を、変数、XSD 要素、および XSD 属性をコピーしながら扱えます。また、述語を扱って、XPath 関数を使用することもできます。
一部のビジネスプロセス要素の扱いには XPath 式エディタを使用します。各要素には、コピー式、条件式、または時間関数の使用などの、許可された式が定義されています。
目次
ユーザーインタフェース
BPEL マッパーは、使いやすく直感的なインタフェースを特色としています。「BPEL マッパー」ウィンドウは、XPath 式を含めることができる BPEL 図要素を選択すると表示されます。BPEL マッパーは、代入、If、If の ElseIf 要素、ForEach、RepeatUntil、While、および待機の、各ビジネスプロセス要素に使用します。各要素には許可されている式があり、これにはコピー式、条件式、時間関数の使用が含まれます。If,、If の ElseIf 要素、While、および RepeatUntil の各要素には条件式が定義されています。代入要素にはコピー式が定義されています。待機要素には期間式が定義されています。そして ForEach 要素にはパラメータ付き条件式が定義されています。BPEL マッパーのインタフェースを使用して、前出の XPath の演算や関数を局所変数や大域変数、XSD 要素や属性、および部品に割り当てて計算を行うことができます。
前出のビジネスプロセスの各要素には、BPEL デザイナーのデザインビューで、コンテキストメニューに「BPEL マッパーを表示」項目があります。コンテキストメニューは、「BPEL マッパー」ウィンドウを閉じると表示されます。また、メインメニューから「ウィンドウ」>「BPEL マッパー」を選択することで、XPath 式のエディタを開くこともできます。
図 1 に示すように、BPEL ファイルのソーステキスト内で XPath 式を編集できます。図 2 に示すように、BPEL マッパーには正しい変更内容が表示されます。
図 2: Assign1 の加算演算
ページの先頭へ
BPEL マッパーで使用する関数と演算子
BPEL マッパーでは、XML Path 言語のバージョン 1.0 (XPath 1.0) がサポートされています。XPath 言語は XML プラットフォームの主な要素です。W3C が開発した XPath 言語は、XML ドキュメントの構造の部分を処理するための言語です。この言語には、文字列、数値、および boolean 型の値を操作するための関数があります。XPath の構文上の主な要素は式です。式を処理した結果、次の 4 つの基本的な型のいずれかを持つオブジェクトが現れます。
- node-set (ノードセット) - 順序、重複がないノードの集合
- boolean (論理) - 真または偽
- number (数値) - 浮動小数点数
- string (文字列) - 一連の UCS シンボル
XPath 言語では、数値式、等値・比較演算、および論理式がサポートされています。BPEL マッパーでは、XPath の演算と関数の一部がサポートされています。
数値式と数値演算
BPEL マッパーの「演算子」メニューを次に示します。
図 3: BPEL マッパーの「演算子」メニュー
数値式
数値式は、数値に対する算術演算を行うために使用します。等値演算は、2 つの値が等しいかどうかを調べるために使用します。XPath 言語では、すべての数値が浮動小数点で表されます。数値は、IEEE 754 DP の 64 ビット形式の任意の値をとることができます。これには特殊な「非数」(NaN) 値、正と負の無限量、正と負のゼロも含まれます。
表 1: 数値式で使用する演算子
| + |
2 つの数値の加算 |
2 + 3 |
5 |
| - |
1 つの数値から別の数値の減算
|
5 - 2 |
3 |
| * |
1 つの数値の別の数値による乗算
|
2 * 5 |
10 |
| div |
1 つの数値の別の数値による除算
|
10 div 2 |
5 |
| mod |
1 つの数値の別の数値による除算の剰余
|
11 mod 3 |
2 |
| -
|
単項マイナス
|
-2
|
-2
|
等値演算
次の表では、length = 5.50 が初期のデータです。
表 2: 等値演算で使用する演算子
| = |
等値演算
|
length=5.50 |
true
|
| != |
非等値演算 |
length!=5.50 |
false |
比較演算
次の表では、length = 5.50 が初期のデータです。
表 3: 比較演算で使用する演算子
| < |
より小さい |
length<5.50 |
false
|
| <= |
より小さいか等しい |
length<=5.50 |
true |
| > |
より大きい |
length>5.50 |
false |
| >= |
より大きいか等しい |
length>=5.50 |
true |
注: 比較対象のオブジェクトがいずれもノードセットではなく、かつ演算子が <=、<、=>、または > のいずれかである場合、比較対象のオブジェクトは先に数値に変換されてから比較されます。
ページの先頭へ
論理式と論理関数
BPEL マッパーの「論理」メニューを次に示します。
図 4: BPEL マッパーの「論理」メニュー
論理式
answer = true
表 4: 論理式で使用する演算子
| 論理和 |
1 つ以上のオペランドが true の場合に true を返す |
false() or answer
|
true
|
| 論理積 |
両方のオペランドが true の場合に true を返す
|
true() and answer |
true |
論理関数
次の表では、answer が true に等しく、xml:lang="en" コンテキストノードの言語が初期のデータです。
表 5: 論理関数の使用方法
| 論理 (boolean) |
引数を boolean 型に変換する |
boolean(2) |
true |
| 偽 (false) |
false を返す |
false() or answer
|
true
|
| 真 (true) |
false を返す |
true() or answer
|
true
|
| 否定 (not) |
否定を返す |
not(false()) |
true |
言語 (lang)
|
xml:lang 属性で定義されているコンテキストノードの言語が、属性文字列で定義されている言語 (またはそのサブ言語) と同じであるかによって true または false を返す |
lang('en')
|
true |
ページの先頭へ
数値関数
BPEL マッパーの「数値」メニューを次に示します。
図 5: BPEL マッパーの「数値」メニュー
表 6: 数値関数の使用方法
| 丸め (round) |
最近似値整数まで丸める |
round (3.14) |
3 |
| 天井関数 (ceiling) |
引数以上で最小の整数を返す |
ceiling (3.14) |
4 |
| 床関数 (floor) |
引数未満で最大の整数を返す |
floor (3.14) |
3 |
| 数値 (number) |
引数を数値に変換する |
number(length) |
length 要素の数値 |
| 和 (sum) |
ノードセットのすべてのノードを数値に変換し、その和を求める
|
sum(/apple/count) |
すべての count ノードの和
|
| 数値リテラル (Number Literal) |
数値 (XPath では浮動小数点形式) |
1.2 |
1.2
|
ページの先頭へ
文字列関数
BPEL マッパーの「文字列」メニューを次に示します。
図 6: BPEL マッパーの「文字列」メニュー
表 7: 文字列関数の使用方法
| 文字列 (string) |
引数を文字列に変換する |
string(3.14) |
'3.14' |
| 文字列長 (string-length) |
文字列長を返す |
string-lenght('MyString') |
8 |
| 部分文字列 (substring) |
最初の引数文字列の中で、2 番目の引数で設定された位置から始まり、3 番目の引数で設定された長さを持つ文字列を返す |
substring('1234',2,3) |
'234' |
| 後方部分文字列 (substring-after) |
最初の引数文字列の中で、2 番目の引数文字列がはじめて出現する位置に続く文字列を返す |
substring-after('20-30','-') |
'30' |
| 前方部分文字列 (substring-before) |
最初の引数文字列の中で、2 番目の引数文字列がはじめて出現する位置より前の文字列を返す |
substring-before('14-30','-') |
'14' |
| 含む (contains) |
最初の文字列に 2 番目の文字列が含まれる場合に true を返す |
contains('XPath','X')
|
true |
| …で始まる (starts-with) |
最初の文字列が 2 番目の文字列から始まる場合に true を返す |
starts-with('XPath','X') |
true |
| 連結 (concat) |
2 つの文字列の連結を返す |
concat('String1 ','String2') |
'String1 String2' |
| 空白を正規化 (normalize-space) |
引数文字列のスペース記号を正規化した文字列を返す |
normalize-space('
1 2 ') |
'1 2' |
| 置換 (translate) |
最初の引数文字列の中で、2 番目の引数文字列に設定された文字を、3 番目の引数文字列の対応する位置にある文字に置き換えた文字列を返す |
translate('black','kcalb','etihw') |
'white' |
| 文字列リテラル |
文字列定数。文字列が、XML 参照で定義された 0 以上の一連の文字から作成される。 |
'String' |
'String' |
ページの先頭へ
ノードセット関数
BPEL マッパーの「ノード」メニューを次に示します。
図 7: BPEL マッパーの「ノード」メニュー
次のコードは SOAP メッセージのサンプルです。
| コード例 1: SOAP メッセージのサンプル |
<soapenv:Envelope
xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:syn="http://xml.netbeans.org/schema/SynchronousSample">
<soapenv:Body>
<syn:typeA>
<syn:paramA>String1</syn:paramA>
<syn:paramA>String2</syn:paramA>
<syn:paramA>String3</syn:paramA>
</syn:typeA>
</soapenv:Body>
</soapenv:Envelope>
|
表 8: ノードセット関数の使用方法
| 数 (count) |
引数に設定されているノード数を返す |
count($inputVar.inputType/xs:paramA) |
3 |
| 最後 (last) |
多数の中で最後の要素の番号を返す |
$inputVar.inputType/paramA[last()]
|
String3 |
| 位置 (position) |
多数の中での要素の位置を返す |
|
|
ローカル名 (local-name)
|
多数の中で名前空間がない最初のタグの名前を返す |
local-name($inputVar.inputType/xs:paramA)
|
paramA
|
| 名前 (name)
|
多数の中で最初のタグの完全名を返す
|
name($inputVar.inputType/xs:paramA)
|
syn:paramA
|
| 名前空間 URI (namespace-uri)
|
名前空間を定義する URL への参照を返す
|
namespace-uri($inputVar.inputType/xs:paramA)
|
http://xml.netbeans.org/schema/SynchronousSample
|
ページの先頭へ
日付と時間を扱う関数
BPEL マッパーでは、グラフィカルインタフェースを使用して定数を設定し、時間関数を使用できます。
BPEL マッパーの「日時」メニューを次に示します。
図 8: BPEL マッパーの「日時」メニュー
表 9: 日時を扱う関数の使用方法
| 現在時刻 (current-time)
|
現在の時刻を返す
|
| 現在日付 (current-date)
|
現在の日付を返す
|
| 現在日時 (current-dateTime)
|
現在の日時を返す
|
| 期間リテラル (Duration Literal) |
文字列。'P1Y2M3DT4H5M6S' 形式で時間間隔を設定できる。 |
ページの先頭へ
まとめ
XPath 式のグラフィカルな表示によって、分析、理解が容易になります。BPEL マッパーは、XPath 式を視覚的に作成、編集できるツールです。BPEL マッパーのグラフィカルインタフェースを使用して、定数を設定したり、時間関数を使用したり、述語を入力したりできます。BPEL マッパーのインタフェースによって、局所変数や大域変数、XSD 要素や属性、および部品に対して、このドキュメントに示した XPath の演算と関数を使用した計算を行うことができます。
ページの先頭へ
関連項目
ページの先頭へ
更新日: 2007 年 11 月 23 日
ページの先頭へ