fn:boolean它的用途是什么?

问题描述 投票:1回答:2

我已经阅读了一些文章,但我仍然对XQuery3.0中的“fn:boolean”感到困惑...这是一个函数吗?这是我看的地方:http://www.xqueryfunctions.com/xq/fn_boolean.html

例如:如果我把fn:boolean((1,2)>(5000,6,1)),它就是真的。

如果我把fn:boolean((6,1)>(1,99,22)),它也是如此!

我真的很担心这个功能,即使在线文章说这个功能很少被调用,但我仍然想弄清楚它是什么...

xml xquery
2个回答
3
投票

函数fn:boolean(X)返回X的有效布尔值。例如,有效布尔值1为真,0为假,“true”为真,“”为假,“false”为(等待)为真。节点(或非空节点序列)的EBV为真,这使得像X[following-sibling::X]这样的表达式起作用。

布尔值的有效布尔值是布尔值不变的:这是您的示例的情况。

有两种情况,调用fn:boolean是没有意义的:

  • 函数的参数已经是布尔值,如示例所示
  • 调用出现在上下文中,例如XPath 2.0“if”表达式的条件,或方括号中的谓词,或testxsl:if属性,其中实际上已经对fn:boolean()进行了隐式调用。

在其他上下文中,例如,您向函数提供参数或绑定XSLT或XQuery变量的值时,显式调用fn:boolean可以将值强制为正确的类型。它还可以帮助您的代码的读者理解发生了类型转换。


1
投票

那么,您认为xQuery中(6,1) > (1,99,22)的结果是什么?这给出了一个布尔值,所以也许你应该先开始计算出来理解序列的比较:https://www.w3.org/TR/xquery-31/#id-general-comparisons说“当且仅当存在一对原子值时,比较结果为真,第一个操作数序列中有一个在第二个操作数序列中的另一个,具有所需的大小关系“。因此,左边第一个序列的6大于第二个序列中的1,比较结果为真。

然后在该值上调用boolean不会改变,因为布尔值的函数除了传入的布尔值之外不会给出任何值。

© www.soinside.com 2019 - 2024. All rights reserved.