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的相关工具
下面两个例子来自于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
其他参考
- Xpath cheatsheet
- W3C XQuery 3.1
- XQuery book examples
- XQuery Functions
- Why hasn’t XQuery been more popular?
- BaseX XQuery 3.0
- A Guided Tour for XQuery
- XQuery tutorial - basics
- XQuery Tutorial
- FLWOR Statement and Iteration (XQuery)
- W3Schools XQuery Tutorial
- Ten Reasons Why Saxon XQuery is Fast
一些网上搜到的PDF文件:
- https://homepages.inf.ed.ac.uk/wadler/papers/xquery-tutorial/xquery-tutorial.pdf
- http://homepage.divms.uiowa.edu/~slonnegr/xml/08.XQuery.pdf
- http://www.cs.toronto.edu/~leijiang/teaching/cscc43-s09/content/tutorial/xpath-xquery/xquery.pdf
- http://www.cs.toronto.edu/~ryanjohn/teaching/cscc43-s14/slides/c43-xquery-v05.pdf
- http://www.csd.uwo.ca/courses/CS4411b/chamberlin.pdf
- https://cs.unibo.it/~montesi/CBD/Articoli/XQuery3.0.pdf
- http://tei.it.ox.ac.uk/Talks/2009-07-oxford/talk-22-xquery.pdf
(完)
更新2019-09-26
(更新完)
2021-01-24更新
BaseX XQuery
How to access files in BaseX without creating a database?
declare default element namespace "urn:o-ran:uplane-conf:1.0";
XQuery Tutorial XSLT, XPath, and XQuery Functions
(更新完)