在谓词中使用函数的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()不应该接受任何参数,那么如何将数据结构传

我正在学习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()
不应该接受任何参数,那么如何将数据结构传递给函数呢

谢谢

引用,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”