我已经阅读了一些文章,但是我仍然对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)),那也是正确的!
尽管网上有文章称该功能很少被使用,但我对此功能还是很困惑,但是我仍然想弄清楚它的作用是什么...
答案 0 :(得分:3)
函数fn:boolean(X)
返回X的有效布尔值。例如,有效布尔值1为true,0为false,“ true”为true,“”为false,“ false”为(等待)true。节点(或非空节点序列)的EBV为true,这就是使X[following-sibling::X]
之类的表达式起作用的原因。
布尔的有效布尔值是不变的布尔值:您的示例就是这种情况。
在两种情况下,对fn:boolean的调用毫无意义:
函数的参数已经是布尔值,如您的示例
调用在上下文中出现的位置,例如XPath 2.0“ if”表达式的条件,方括号中的谓词或test
的{{1}}属性,其中实际上已经对xsl:if
进行了隐式调用。
在其他情况下,例如,在向函数提供参数或绑定XSLT或XQuery变量的值时,显式调用fn:boolean有助于将值强制为正确的类型。它还可以帮助您的代码阅读者了解正在发生类型转换。
答案 1 :(得分:1)
那么,您认为XQuery中(6,1) > (1,99,22)
的结果是什么?这样已经给出了一个布尔值,因此也许您应该首先弄清楚序列的比较:https://www.w3.org/TR/xquery-31/#id-general-comparisons说:“比较结果为真,当且仅当存在一对原子值时,第一个原子值操作数序列和第二个操作数序列中的另一个具有所需的大小关系”。因此,当左侧第一个序列中的6
大于第二个序列中的1
时,比较结果为true。
然后在该值上调用boolean
不会改变该值,因为用于布尔值的函数除了传入的布尔值外不会给出其他任何内容。