为文档与数据库提供共同查询方式

XQuery面对的不是一种固定表格,而是结构可以变化的XML信息。书目、技术文档和网络服务消息可能包含层次、重复元素与不齐全的字段;关系数据库中的记录也可以通过中间件呈现为XML。设计者希望同一套查询表达式能检索这些来源,并重新组织结果,减少为每种数据另写遍历程序的需要。

万维网联盟的XML Query工作组于2001年2月15日公布首份XQuery公开工作草案。其编辑包括IBM的唐·张伯伦,以及丹妮拉·弗洛雷斯库、乔纳森·罗比、热罗姆·西梅翁和穆古尔·斯特凡内斯库。草案明确标为尚在发展的设计,2007年成为推荐标准是其后续阶段。

参考:[1]

Quilt方案与多种语言的结合

2001年草案说明,XQuery源于Quilt。它从XPath和XQL吸收适合层次文档的路径表达式,从XML-QL吸收先绑定变量、再构造新结构的办法,从SQL吸收以关键字分句组织查询的方式,又从OQL吸收可相互嵌套的表达式结构。这些借鉴对应不同问题,并非把SQL关键字直接换成XML标签。

到1.0定稿时,XQuery与XPath 2.0协调了语法和求值规则。可以在两者中合法执行的同一表达式应产生相同结果;XQuery在路径选择之外提供变量绑定、结果构造等组织手段。其类型体系、内建函数与形式语义也分别依靠配套规范,使语言不只是一份语法清单。

参考:[1] [2]

在逻辑数据模型上查询

XQuery处理XML的逻辑结构,而不把文件当作一长串待搜索的字符。它与XPath 2.0、XSLT 2.0共用XDM数据模型。模型中的值统一表现为有序序列,序列项可以是节点或原子值;空序列也是合法值,单个项目与只含它的序列等价。

节点保有身份,原子值则带有整数、字符串等类型信息。序列可含重复项目,但不会把另一序列作为嵌套项目保存:组合后的结果会展平。这些规则使路径检索、数值运算和新节点构造能够连接起来,也提醒实现者不能直接套用XPath 1.0中不含重复项的节点集合概念。

参考:[3]

从筛选到排序和结果构造

例如,设books.xml中以books为根元素,每个book包含一个数值价格price和一个标题title。可写“for $b in doc("books.xml")/books/book where $b/price < 100 order by $b/title return $b/title”,得到价格低于100的书名,并按标题排序。这是按1.0规则构造的简化示例。

for逐个把图书节点绑定到变量$b,where保留满足价格条件的项目,order by规定次序,return产生所需结果。若需要保存中间序列,可以加入let;这些关键字组成FLWOR表达式。标准自身还示范把部门文档和员工文档联接,筛选至少十名员工的部门,再按平均工资排序并生成新的big-dept元素,说明查询同时能改变结果结构。

参考:[2]

2007年推荐标准与实现经验

2007年1月23日,W3C发布XQuery 1.0推荐标准。最终编辑团队还包括斯科特·博格和玛丽·费尔南德斯等人。它与XPath 2.0、XSLT 2.0、XQueryX、数据模型、函数及运算符、形式语义、序列化共八份文件同时达到推荐阶段,文本前一阶段是2006年11月21日的提议推荐稿。

标准化与产品实现并行推进。W3C当日公告称,工作组已登记四十多个XQuery实现,并汇总十四个实现运行一万四千余项测试的结果。IBM声明DB2 9.1已支持XQuery,微软声明SQL Server 2005已在XML数据类型中集成支持。这些材料表明,2007年的节点是共同规则定稿,而不是第一台处理器才开始运行的日期。

参考:[2] [4]

统一语言与实现差异

1.0规范规定最低符合性要求,也列出模式导入、模式验证、静态类型检查、完整轴、模块和序列化等可选特性。一个实现声称支持XQuery,并不自动意味着它支持全部可选能力。规范还区分必须由实现者说明的行为和允许随实现变化的行为,为不同处理器留下明确边界。

发布后的应用因而可以围绕一套共同语言组织,同时仍须核对处理器的功能范围。对文档库而言,路径、顺序和新结构构造十分重要;对数据库和中间件而言,变量、类型与多来源组合提供了对接方式。XQuery的形成体现为草案、配套数据模型和实际实现不断相互校正的过程。

参考:[2] [3] [4]