XQuery/使用 XQuery 函数
您想使用现有的 XQuery 函数。您需要能够理解函数的工作原理以及它们是如何记录的。
XQuery 1.0 规范包含许多用于处理字符串、URI 和其他数据的内置函数。要使用内置函数,您需要知道它的输入及其数据类型以及它创建的输出形式。
XQuery 是一种强类型语言,因此函数通常经过精心设计以使用一组受限的数据类型。当您使用参数将数据传递给函数时,您必须指定其类型,使用元素、节点、项目、序列或任何 XML 模式数据类型的组合。除了数据类型之外,还使用后缀称为出现指示符,例如“+”、“?”或“*”,紧跟在数据类型之后,以指示参数是否可选或可以具有多个值。以下是三种出现指示符及其含义
- ? 匹配零个或一个项目
- * 匹配零个或多个项目
- + 匹配一个或多个项目
应注意理解单个序列作为参数与重复的一组项目之间的区别。
XQuery 语言大约有 111 个内置函数,但许多人发现 10% 的 XQuery 函数被使用了 90% 的时间。以下是一些最常用的函数
string-length($string as xs:string) as xs:integer - returns the length of a string as the number of its characters
示例:string-length("Hello") 返回 5,因为字符串 "Hello" 长度为五个字符。
concat($input as xs:anyAtomicType?) as xs:string - concatenates a list of strings together.
该函数不接受一组值,只接受作为单独参数传递的单个原子值。
示例:concat('big', 'red', 'ball') 返回 "bigredball"
string-join($sequence as xs:string*, $delimiter as xs:string) as xs:string - combines the items in a sequence, separating them with a delimiter
示例:string-join(('big', 'red', 'ball'), '-') 返回 "big-red-ball"
请注意,string-join 的第一个参数是单个项目序列,而 concat 的参数是零个或多个字符串。
- xs:date 指的是名为 xs:date 的内置原子模式类型
- attribute()? 指的是可选的属性节点
- element() 指的是任何元素节点
- element(po:shipto, po:address) 指的是具有名称 po:shipto 且具有类型注释 po:address(或从 po:address 派生的模式类型)的元素节点
- element(*, po:address) 指的是任何名称的元素节点,其类型注释为 po:address(或从 po:address 派生的类型)
- element(customer) 指的是名为 customer 的元素节点,其类型注释可以是任何
- schema-element(customer) 指的是名称为 customer(或在由 customer 领导的替换组中)的元素节点,其类型注释与作用域内元素声明中为 customer 元素声明的模式类型匹配
- node()* 指的是零个或多个任意类型的节点的序列
- item()+ 指的是一个或多个节点或原子值的序列
您编写的每个 XQuery 函数都会返回一个结果。
在以下示例中,输入是 0 到多个节点的序列,输出是 0 到多个节点的序列。
(: input 0 to many nodes and return 0 to many nodes :)
declare function local:myFunction($input as node()*) as node()* {
在以下示例中,输入是单个必需节点,输出是单个必需节点。
(: input a single required nodes and return a single required node :)
declare function local:myFunction($input as node()) as node() {
在以下示例中,输入是单个可选节点,输出是单个可选节点。
(: input a single optional nodes and return a single optional node :)
declare function local:myFunction($input as node()?) as node()? {
有关 eXist 中所有可用函数(包括 XQuery 中未定义的函数)的权威文档,请参阅 eXist XQuery 函数文档
有关如何指定序列类型的详细信息,请参阅 XQuery 序列类型
有关标准 XQuery 和 XPath 函数库,您还可以参考 XQuery 1.0 和 XPath 2.0 函数和运算符
另请参阅著名 XQuery 专家 Pricilla Walmsley 在 FunctX XQuery 函数库 中的函数详细文档和示例