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