注意:本文在 2005 年 12 月经过修正,结合了 XQuery 规范的最新变动情况:其中八个工作草案已进入 “W3C 候选推荐标准” 状态,整个规范距离最终成为 “推荐标准” 更近了一步。主要的全文文档最初发表于 2004 年,最近经过了修改。关于更新设施的 “需求工作草案(Requirements Working Draft)” 和建立 XPath/XQuery 词法分析器(tokenizer)的草案都是 2005 年第一次发布的。XQuery 特性的数量继续增长,XQuery 实现者列表和 Web 上的开发人员资源也在不断增加。
沿着成为 W3C 推荐标准的道路走了漫长的六年之后,XQuery 规范颇具好莱坞大片的神秘和不朽色彩,就像 “星球大战” 和 “指环王” 系列一样。XQuery 起源于 1998 年由 W3C 发起的查询语言研讨会,来自工业界、学术界和研究团体的代表聚集到波士顿,提出了 XML 查询语言中他们认为重要的特性和需求。
两个不同的阵营
那些对历史感兴趣的人可以在线获取这 66 篇演讲稿(参阅 参考资料),它们主要来自两大不同的阵营:那些将 XML 主要作为文档 使用的人(在很大程度上反映了 XML 起源于 SGML)和将 XML 作为数据 使用的人 —— 后者很大程度上反映了 XML 在中间件领域、前端传统关系数据库领域中不断增长的现状。
尤其是俄勒冈州研究生院的 David Maier的演讲稿 “Database Desiderata for an XML Query Language”,它非常简明扼要,非常有助于了解 Query Language Working Group(查询语言工作组)的思想,后者是在波士顿讨论会之后不久特许成立的。
虽然成员时增时减,但按照 W3C 的标准,这个工作组很庞大(据说只有 Protocol Working Group(协议工作组)的成员比它多)。它由 30 多个成员公司构成,反映了数据和文档这两大阵营各自的观点。现在合并而成的最终形式(经过了漫长的时间)是一种 XML 查询语言标准, 能够代表这两个团体的需求和观点。
对于 XML 用户来说,最熟悉的 XQuery 关键组件是 XPath,它本身也是一个 W3C 规范。单独的 XPath 位置路径本身(“//book/editor” 意味着 “在当前数据集中查找所有图书编辑”)就是完全有效的 XQuery。在数据方面,XQuery 具有类似于 SQL 的外观和能力,这是来自关系数据库世界的用户所欢迎和熟悉的。
卑微的出身
XQuery 最初称为 Quilt。Quilt 最初作为用户级语法的测试工具,是工作组中三个勤奋而又眼光远大的成员创立的:Jonathan Robie、Don Chamberlin 和 Daniela Florescu。在定义需求、用例以及底层数据模型和代数方面,Quilt 都建立在整个工作组的协同努力的基础上。
Robie、Chamberlin 和 Florescu 指出了一些语言对 Quilt 设计的影响,包括 XQL、XML-QL 和 SQL。如果对计算机语言的演化感兴趣,请阅读 “XML Query Language: Experiences and Exemplars”(参阅 参考资料),这篇意义重大的论文对前两种语言以及另外两种语言 YaTL 和 Lorel 进行了很好的比较。作者 Mary Fernandez、Jerome Simeon 和 Phil Wadler 本身都是该工作组的成员。
既然数据和文档团体持有如此不同的的观点,以及工作组所建立的基础的可靠性,这个庞大的规范需要如此长的时间才向大众公布也就不足为奇了。W3C 工作组的内部进展是严格保密的,并且在 2001 年 2 月中旬以前,查询语言工作组的大多数工作都是秘密进行的。
很早就发布了 Requirements 文档和 Data Model 工作草案,但是直到 2001 年 2 月,工作组的发布工作才得以进入高潮,那时大量的文档开始出现。此后在 2001 年进行了两次重要更新,以后每年都有三四次更新,只有 2004 年例外,工作组只发布了一次更新。
今年新增加了更新机制的需求文档,再加上为 XQuery 语言实现者提供的关于建立词法分析器的简短说明,文档总数达到了 16 个(包括由于某种我不清楚的原因也放在 XML Query 网站上的 XSLT 规范),不用很长时间就会组成一套完整的文档集。肯定会在某个时候出现一种更新语言文档。
新生的发布王国
完全用于描述和定义 XQuery 的文档目前包括:
XML Query Requirements 工作组的主要规划文档。XQuery 需求列表。 XML Query Use Cases 一些实际场景和解决特定问题的 XQuery 片段。 XQuery 1.0: An XML Query Language 核心文档,介绍语言本身,以及对大多数其他内容的概述。 XQuery 1.0 and XPath 2.0 Data Model XML 信息集的扩展。描述查询实现必须理解的数据项和形式语义的基础。 XQuery 1.0 and XPath 2.0 Formal Semantics 从形式上定义语言的底层代数。 XML Syntax for XQuery 1.0 (XQueryX) 为喜欢使用 XML 的人(主要是计算机)提供的另一种语法。 XQuery 1.0 and XPath 2.0 Functions and Operators Version 1.0 XML Schema 数据类型、 XML 节点及其序列的大约 225 个函数和操作符。 XML Path Language (XPath) 2.0 单独分离出来的 XPath 文档。 XPath Requirements Version 2.0 XPath 的需求文档。 XSLT 2.0 and XQuery 1.0 Serialization 对从 XQuery 1.0 和 XPath 2.0 Data Model 输出序列化尖括号 有关的 XML 问题的考察。序列化本质上 不是主语言规范的一部分。 XML Query and XPath Full-Text Requirements 描述 Full-Text Recommendation 需要达到的功能需求。 XML Query and XPath Full-Text Use Cases Full-Text 规范应该能够处理的实际场景。 XQuery 1.0 and XPath 2.0 Full-Text 主 full-text 文档,详细描述严格意义上的 XQuery 的全文扩展语言。 XQuery Update Facility Requirements XQuery 要求的能够对已有文档写入新数据以及对文档进行查询的功能。 Building a Tokenizer for XPath or XQuery 工作草案注释文件,选择了主 XQuery 1.0 文档中的一些语法资料进行解释。只对语言的实现者有意义。
这些文档(参阅 参考资料)代表了大量工作。“XQuery 1.0: An XML Query Language” 是其中的关键,但其他文档也为 XQuery 成为良好的规范和全面支持的语言作出了贡献。据我所知,这是出自 W3C 的最复杂的一套规范(虽然 XML Schema 或许可与之相比,但那又是另一回事了)。
如果您对如此之多的文档感到惊讶和不知道从何处着手,我可以推荐两种方法。可以从核心的 XQuery 1.0 文档开始。它有一个很好的介绍性概述,详细介绍了该语言的很多特性。另一种方法是从选择一个 Use Cases 工作草案开始。该文档列举了 XQuery 能够发挥作用的一些实际场景。每个用例都针对特定的应用领域,并列出了用于该领域示例数据的一些 XQuery 代码。如果希望看到实际语法的具体例子,这些代码片段是非常有价值的。第三种方法是研究 Functions and Operators 工作草案中列出的很多内置函数,但采用这种方法最好对语言要有基本的理解。
BabelFish,您在哪儿?
XQuery 实际上是三种语言合为一体:
表层语法是其中最容易看到的语言,也是用户最可能接触到的。从很多方面来说,这个语言版本就是 XQuery。(参阅侧栏 语法:一个简单的例子 中关于表层语法的例子。)
一种基于 XML 的替代语法用另一种更便于机器处理的语言代替了表层语言。(参阅本文后面的 XQueryX。)
形式代数语言详细描述了 XQuery 处理程序的内部工作机制。