13.3 基本表达式(Primary Expressions)

XQuery查询的查询体主要由各种表达式组成。在XQuery的各种表达式中,最简单、最常用的就是基本表达式,下面将详细介绍XQuery中的各种基本表达式。

13.3.1 直接量(Literal)

所谓直接量就是直接在XQuery中给出的值,通常有字符串直接量和数值直接量两种。例如"hello XQuery"就是一个字符串直接量,而12.4则是一个数值直接量。

字符串直接量是一个xs:string类型的值;而数值直接量则由Integer直接量、Decimal直接量和Double直接量组成,其中Integer直接量是一个xs:integer类型的值,Decimal直接量是一个xs:decimal类型的值,Double直接量是一个xs:double类型的值。

13.3.2 变量引用

在XQuery中引用变量只需使用$加上变量名即可,例如前面提到的$book。

13.3.3 圆括号表达式

包括圆括号的表达式就是圆括号表达式,圆括号主要用于提升表达式中某个部分的优先级,例如表达式(3+5)*2应该返回16,而不是13。实际上,圆括号表达式是一种很常见、很简单的表达式,有过Java编程经验的读者应该非常熟悉,故此处不再详述。

13.3.4 上下文项表达式

与XPath中使用圆点(.)表示当前节点一样,XQuery也使用该符号表示当前上下文项。

上下文项可以是节点,例如如下表达式:

alt

也可以是原子值,例如如下表达式:

alt

13.3.5 函数调用

XQuery中调用函数的方式与XSLT和XPath完全相同,调用函数由函数名和实参列表两部分组成。

实际上,XQuery 1.0和XPath 2.0共享相同的内置函数,因此可以在XPath 2.0中使用的内置函数,一样可以在XQuery 1.0中使用。不仅如此,XQuery 1.0还预置了fn前缀,作为命名空间http://www.w3.org/2005/xpath-functions的限定前缀。因此可以直接在XQuery中使用该命名空间下的函数,而无须添加fn前缀。

例如前面XQuery中的string($book/name)就调用了fn:string()函数,只不过省略了fn前缀。如果需要在XQuery中调用开发者自定义的函数,则一定要添加相应命名空间所对应的限定前缀。