在谓词中使用函数的XQuery
我正在学习XQuery,对诸如在谓词中使用函数的XQuery,xquery,Xquery,我正在学习XQuery,对诸如last()之类的函数很好奇。据我所知,我可以这样做: doc('http://www.functx.com/input/catalog.xml')/catalog/product[last()] 根据我的理解,这传递了产品元素的顺序: doc('http://www.functx.com/input/catalog.xml')/catalog/product 。。。到last(),然后返回最后一个成员。但是,last()不应该接受任何参数,那么如何将数据结构传
last()
之类的函数很好奇。据我所知,我可以这样做:
doc('http://www.functx.com/input/catalog.xml')/catalog/product[last()]
根据我的理解,这传递了产品元素的顺序:
doc('http://www.functx.com/input/catalog.xml')/catalog/product
。。。到last()
,然后返回最后一个成员。但是,last()
不应该接受任何参数,那么如何将数据结构传递给函数呢
谢谢 引用,p。49:
position
和last
功能是。。。在基于位置编写谓词时非常有用。。。[此处省略的是对位置的讨论函数返回当前序列中的节点数。它不接受任何参数,并返回一个表示项数的整数。last
功能用于测试项目是否是序列中的最后一个项目。例如,catalog/product[last()]
返回catalog的最后一个子产品
因此,基本上,这些函数是在其上下文序列上操作的,而不是在传递给它们的参数/参数上操作的position
返回上下文序列中上下文项的位置,last
返回当前序列中的节点数。XQuery是XPath的扩展,但这个问题的答案完全与XPath相关
XPath表达式具有动态上下文;以下是XPath规范中的详细信息:。上下文项可以作为
引用:
fn:doc('http://www.functx.com/input/catalog.xml')/catalog/product[. eq "my product name"]
谓词[.eq“my product name”]
针对每个产品元素重新求值,并且
是对上下文项的引用,即特定于该求值的元素
一些XPath函数只接受上下文,而其他XPath函数默认为上下文,带有可选参数
以下是仅接受XPath 3中上下文的函数的完整列表:
一些示例:
fn:last()
接受零参数并返回上下文项的大小
如果有10个
元素,则以下表达式等效:
fn:doc('http://www.functx.com/input/catalog.xml')/catalog/product[fn:last()]
fn:doc('http://www.functx.com/input/catalog.xml')/catalog/product[10]
fn:position()
接受零参数并返回上下文位置
fn:doc('http://www.functx.com/input/catalog.xml)/catalog/product[fn:position()>3]
有许多函数采用零或1参数,其中零参数形式访问上下文。我看到了其中的15个,正在搜索这个短语的规范:“这个函数的零参数形式是·确定性的·,·上下文相关的·,和·焦点相关的·。”
一个例子:
fn:string()
fn:doc('http://www.functx.com/input/catalog.xml“)/catalog/product/fn:string()
返回每个
元素的字符串值。相当于
fn:doc('http://www.functx.com/input/catalog.xml“)/catalog/product/fn:string(.)
其中上下文项作为参数显式传递fn:string()
也可用于类型转换:fn:string(1)
返回“1”