本文配套源码
开始之前
讨论XQuery示例代码之前,先介绍一下如何学好本教程,如何安装和使用所附的源代码(参见下载 小节)。
关于本教程
本教程介绍如何使用XQuery开发应用程序和中间件。列举了在应用程序开发中XQuery的一些局限,就如何克服这些局限提供了切实可行的建议,同时强调XQuery在处理这些问题时的优势和缺点在哪里。然后在此基础上,利用大量的篇幅介绍了应用程序开发中一系列常见的编程惯用法:
使用扩展函数
单元测试与断言
递归与排序
高阶函数
目标
本教程的目的是帮助您学习如何使用XQuery开发应用程序。我将尽量提供可以剪切粘贴的成熟代码以便在您的应用程序开发中直接使用,但是我希望这些例子能够使您重新考虑XQuery的应用,而不仅仅是查询 XML。
先决条件
本教程是为那些对 XML 技术有一定了解而对 XSLT 或 Query 略有涉猎的开发人员编写的。这里提出的编程惯用法并不是我发明的,在多种计算机语言中都以各种形式存在。这种重用意味着适合大多数读者,您将看到熟悉的结构 — 尽管是在XQuery编程环境中。
系统要求
必须安装 Michael Kay 的 Saxon XSLT 和XQuery处理程序 SA 感知版 以便执行示例代码。因为需要 Saxon-SA 版本,必须注册才能获得 30 天的试用期(比如,撰写本文的过程中使用 9.1SA 版进行了测试)。很多示例代码采用了高阶函数以便利用 Saxon-SA 专有的扩展函数(具体而言即 saxon:function())。
将 Saxon 的所有 Java Archive (JAR) 文件和许可证文件放在 /lib 目录下。
运行文中的例子可通过命令行调用 Saxon,或者使用下载文件中的 Ant 构建文件(我用于测试示例代码)。如果使用构建文件则应安装最新的 Apache Ant,修改 saxon.lib.dir 属性使其指向包含 Saxon JAR 的 /lib 目录。要检查 Saxon 是否安装正确,可对 checkSaxon 运行 Ant,若安装正确则该过程将成功完成。所有 Ant 目标都把结果输出到 /result 目录下。
今天的XQuery
现在我们讨论一下XQuery的历史及目前的处境。
XQuery 规范
所谓XQuery规范,我指的是一组互相关联的文档:
XQuery 1.0(一种 XML 查询语言):定义了核心语言
XQuery 1.0 和 XPath 2.0 数据模型:定义了 XPath 和XQuery共同的数据模型
XQuery 1.0 和 XPath 2.0 形式语义:提供了数学基础
XQuery 1.0 和 XPath 2.0 函数与运算符:定义了 XPath 和XQuery共有的函数
XSLT 2.0 和XQuery1.0 序列化:定义了如何从XQuery构造和输出 XML
还有人认为 XML Query 用例文档也很有用,它提出了各种应用场景和相应的XQuery解决方案。还有一些规范和草案提供了其他的功能,比如更新 XML 和全文本搜索。
“这么多规范?”有这种想法的人不只您一个,难以理解为何 W3C Query Working Group 搞了这么多互相关联的文档。如果说是因为复杂,那么我无法反对,但我确实奇怪为何 XSLT 1.0(参见 参考资料)能够用一个规范(或者说两个 — 因为还有一个相关的 XPath 1.0 规范)就能办到。
在XQuery1.0 规范的定义过程中,一直有几个问题始终跟着XQuery。其中很多提出的极其严重的限制使(当时的)我确信必将阻碍XQuery的发展(经过一年紧锣密鼓的开发,大部分最终证明是无关紧要的)。承认自己的错误是一种好的学习方法,因此我认为可以重新看看这些问题。