Xquery是W3C定义的一种XML查询语言。最新版本是3.1,在W3C XQuery 3.1可以看到其规范。

XQuery的特点是它可以混杂在XML中,其运行的结果也可以是XML数据。

XQuery查询的核心是FLOWR表达式,其中FLOWR是for, let, order, when, return的缩写。这几个关键字可以帮助XQuery进行像SQL一样的查询。

FLOWR可以嵌套,来自XQuery Nested For Return的例子:

for $p in distinct-values(//price)
return <price group="{$p}">{
  for $b in //book[price = $p]
  return <book year="{$b/@year}"/>
}</price>

XQuery的基础数据模型是sequence。所谓sequence,是一组不可改变的数据,用括弧表示,比如(a, b)就是一个sequence。然后sequence不支持嵌套,(a, (b,c))会被自动平整被(a, b, c)。

来自XQuery: Combining sequences的例子:

let $s1 := ('a', 'b')
let $s2 := ('a', 'c')

return ($s1, $s2)

的结果是('a', 'b', 'a', 'c')

使用XQuery查询的时候,要注意XML的命名空间,必须在XQuery中声明和目标数据一样的命名空间。比如在xQuery on XML file with namespace 的例子中,需要有这样的语句declare default element namespace "urn:hl7-org:v3";

XQuery的相关工具

  • xfidel:一个开源的XQuery命令行工具
  • BaseX:一个基于Java的轻量级XML数据库,支持XQuery查询
  • SAXON:一个基于Java的XML处理工具,支持XQuery,XSLT等

下面两个例子来自于How to execute xq files on xml files?

basex -iin.xml -oout.xml file.xq
java net.sf.saxon.Query -s:in.xml -q:file.xq -o:out.xml

其他参考

一些网上搜到的PDF文件:

(完)

更新2019-09-26

(更新完)

2021-01-24更新

BaseX XQuery

How to access files in BaseX without creating a database?

fn:doc

declare default element namespace "urn:o-ran:uplane-conf:1.0";

XQuery Tutorial XSLT, XPath, and XQuery Functions

(更新完)