我有以下Xquery:
let $x := false return if (every $t in $x/a satisfies $t/i eq "true") then $x else
我如何理解这一点,$x
如果所有人都有一个
单词"true" ,则返回.但是,这总是回归
$x
.
相反,如果我有以下XML文档:
false
以及以下查询:
for $x in /root return if (every $t in $x/a satisfies $t/i eq "true" ) then $x else
它将
在包含false时返回
$x
,并在"true" 时返回
我的问题是:
为什么带"let"的查询的行为方式如此?
为什么"for"的查询行为不同?
wst.. 5
关键的区别在于第二个示例中存在分配给$ x的根元素,但在第一个示例中则不存在.
在您的第一个示例中,根元素是,但在您编写的量词表达式中
every $t in $x/a
.$x/a
选择子a
元素,并且没有(仅
i
).所以$x/a
评估为空.表达式减少到every $t in () satisfies $t/i eq "true"
.由于将空分配给$t
完整量词,因此表达式的计算结果为true.
关键的区别在于第二个示例中存在分配给$ x的根元素,但在第一个示例中则不存在.
在您的第一个示例中,根元素是,但在您编写的量词表达式中
every $t in $x/a
.$x/a
选择子a
元素,并且没有(仅
i
).所以$x/a
评估为空.表达式减少到every $t in () satisfies $t/i eq "true"
.由于将空分配给$t
完整量词,因此表达式的计算结果为true.