BPEL 映射器中的 XPath 函数和运算
由 VictoriaZhukovskaya、Alyona Stashkova 创建和维护
2007 年 12 月
BPEL 映射器是可视化处理 XPath 表达式的工具。BPEL 映射器允许处理表达式、复制变量、XSD 元素和 XSD 属性。此工具允许处理谓词并使用 XPath 函数。
XPath 表达式编辑器用于处理一些业务过程元素。对每个元素允许使用下列表达式:复制表达式、条件表达式或时间函数用法。
目录

用户界面
BPEL 映射器具有一个易于使用的直观的用户界面。当选择可以包含 XPath 表达式的 BPEL 图元素时,将出现BPEL 映射器窗口。BPEL 映射器用于下列业务过程元素:Assign、If、If 的 ElseIf 元素、ForEach、RepeatUntil、While 和 Wait。每个元素都具有允许使用的表达式,包括复制表达式、条件表达式、时间函数用法。条件表达式是为 If、If 的 ElseIf 元素、While 和 RepeatUntil 元素定义的。复制表达式是为 Assign 元素定义的。持续时间表达式是为 Wait 元素定义的。带有参数的条件表达式是为 ForEach 元素定义的。使用BPEL 映射器界面,可以进行计算:将上述 XPath 运算和函数分配给本地和全局变量、XSD 元素和属性以及各个部分。
在 BPEL 设计器设计视图的上下文菜单中,上述业务过程元素都具有“显示BPEL 映射器”项。关闭BPEL 映射器窗口时,上下文菜单可用。还可以通过从主菜单中选择“窗口”>“BPEL 映射器”打开 XPath 表达式编辑器窗口。
可以编辑 BPEL 文件的源文本中的 XPath 表达式,如图 1 所示。BPEL 映射器显示正确的修改,如图 2 所示。
图 2:Assign1 的添加操作

回到顶部
BPEL 映射器中使用的函数和运算符
BPEL 映射器支持 1.0 版的 XML Path 语言(XPath 1.0)。XPath 语言是 XML 平台的关键部分。由 W3C 联盟开发的 XPath 语言是用于解决 XML 文档结构部分的一种语言。此语言具有用于操作字符串、数字和布尔值的函数。XPath 的主要语法构造是表达式。作为处理表达式的结果,属于下列四种基本类型之一的对象将显示:
- 节点集合 - 没有重复项的无序的节点集合
- 布尔 - 真或假
- 数字 - 带浮点的数字
- 字符串 - UCS 符号序列
XPath 语言支持数字表达式、等式和比较运算,以及布尔表达式。BPEL 映射器支持部分 XPath 操作和函数。
数字表达式和运算
BPEL 映射器的 Operator 菜单如下所示。
图 3:BPEL 映射器“运算符”菜单

数字表达式
数字表达式用于对数字执行算术运算。等式性运算用于检查两个值的相等性。XPath 语言中的任何数字都具有带浮点的表示形式。数字可以接受 64 位格式的任何 IEEE 754 DP 值。这包括特殊的“非数字”(NaN) 值、正无穷和负无穷,以及正零和负零。
表 1:数字表达式中使用的运算符
| + |
两个数字相加 |
2 + 3 |
5 |
| - |
一个数字减去另一个数字 |
5 - 2 |
3 |
| * |
一个数字乘以另一个数字 |
2 * 5 |
10 |
| div |
一个数字除以另一个数字 |
10 div 2 |
5 |
| mod |
一个数字除以另一个数字得到的余数 |
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 |
注意:如果进行比较的对象都不是 node-set,并且运算符是 <=、<、=> 或 >,则所比较的对象首先转换为数字,然后才进行比较。
回到顶部
布尔表达式和函数
BPEL 映射器的“布尔”菜单如下所示。
图 4:BPEL 映射器“布尔”菜单

布尔表达式
answer = true
表 4:布尔表达式中使用的运算符
| or |
如果至少一个布尔操作数等于 true,则返回 true |
false() or answer |
true |
| and |
如果两个布尔操作数都等于 true,则返回 true |
true() and answer |
true |
布尔函数
注意,answer = true 和 xml:lang="en" 上下文节点语言是下表的初始数据。
表 5:布尔函数用法
| boolean |
将参数转换为布尔类型 |
boolean(2) |
true |
| false |
返回 false |
false() or answer |
true |
| true |
返回 false |
true() or answer |
true |
| not |
返回否定 |
not(false()) |
true |
| lang |
返回 true 或 false,这取决于 xml:lang 属性中定义的上下文节点语言是否与属性字符串中定义的语言相同(或子语言相同) |
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 |
返回第一个参数字符串的一部分,以第二个参数设置的位置开始,并具有第三个参数中设置的长度。 |
substring('1234',2,3) |
'234' |
| substring-after |
返回第一个参数字符串的一部分,即在第二个参数字符串第一次出现之后的部分。 |
substring-after('20-30','-') |
'30' |
| substring-before |
返回第一个参数字符串的一部分,即在第二个参数字符串第一次出现之前的部分。 |
substring-before('14-30','-') |
'14' |
| contains |
如果第一个字符串包含第二个字符串,则返回 true |
contains('XPath','X')
|
true |
| starts-with |
如果第一个字符串以第二个字符串开始,则返回 true |
starts-with('XPath','X') |
true |
| concat |
返回两个字符串的连接 |
concat('String1 ','String2') |
'String1 String2' |
| normalize-space |
返回空格符号正常化的参数字符串 |
normalize-space(' 1 2 ') |
'1 2' |
| translate |
返回第一个参数字符串,其中第二个参数字符串中设置的符号替换为第三个参数字符串中相应位置的符号 |
translate('black','kcalb','etihw') |
'white' |
| String Literal |
字符串常量;字符串由在 XML 引用中定义的一系列空符号和其他符号组成 |
'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 |
| namespace-uri |
返回对定义名称空间的 url 的引用 |
namespace-uri($inputVar.inputType/xs:paramA) |
http://xml.netbeans.org/schema/SynchronousSample |
回到顶部
用于操作日期和时间的函数
BPEL 映射器允许您在图形界面的帮助下设置常量并使用时间函数。
BPEL 映射器的 Datetime 菜单如下所示。
图 8:BPEL 映射器 Datetime 菜单

表 9:用于操作日期和时间的函数用法
| current-time |
返回当前时间 |
| current-date |
返回当前日期 |
| current-dateTime |
返回当前日期和时间 |
| Duration Literal |
字符串;允许以 'P1Y2M3DT4H5M6S' 格式设置时间间隔。 |
回到顶部
结束语
图形表示形式提供了对 XPath 表达式的方便分析和查看。BPEL 映射器是一种允许在可视模式下创建和编辑 XPath 表达式的工具。BPEL 映射器图形界面允许设置常量、使用时间函数并处理谓词。BPEL 映射器界面允许使用本文列出的 XPath 操作和函数对本地和全局变量、XSD 元素和属性、以及各部分执行计算。
回到顶部
更多信息
回到顶部