量化表达式比较简单,它类似于SQL中的exists 子句。它的语法如下:
[some | every] $var in expr ($anothervar in anotherexpr)* satisfies test_expr
some或every是量词,也是关键字。in子句可以有多个。
量化表达式的执行结果是一个boolean值,因为它一般做为谓词用在路径表达式中,或做为where子句用在FLWOR表达式中,
FLWOR表达式将在以后的blog中讲到,或做为条件表达式的判断条件使用。
执行时$var被绑定到expr计算出来的序列的每一个项中,对于每一次绑定,test_expr将会被执行,如果量词是some,
则只要存在一次绑定,使得test_expr的执行结果为true,那么整个量化表达式执行结果就为true,反之为false。
而如果量词是every,则必须所有的绑定,使得test_expr的执行结果为true时,整个量化表达式执行结果才为true,反之为false。
下面看几个例子:
1。every $part in /parts/part satisfies $part/@discounted
如果每一个part元素都有discounted属性,则表达式1返回true
2。some $emp in /emps/employee satisfies ($emp/bonus > 0.25 * $emp/salary)
如果至少有一个employee元素满足给定的比较表达式,则表达式2返回true
3。every $x in (1, 2, 3), $y in (2, 3, 4)
satisfies $x + $y = 4
在这个例子,每次绑定时,由(1,2,3)和(2,3,4)各取一项来进行绑定,因为共有3*3=9的绑定,
然后判断给定的比较表达式。该例返回false,如果把量词every换成some,则返回true。