XQuery高级应用:开发应用程序惯用法

本文配套源码

开始之前

讨论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的发展(经过一年紧锣密鼓的开发,大部分最终证明是无关紧要的)。承认自己的错误是一种好的学习方法,因此我认为可以重新看看这些问题。

时间: 2024-09-17 04:04:04

XQuery高级应用:开发应用程序惯用法的相关文章

PHP开发应用程序:生成随机字符串的方法

使用PHP开发应用程序,尤其是网站程序,常常需要生成随机密码,如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码.随机密码也就是一串固定长度的字符串,这里我收集整理了几种生成随机字符串的方法,以供大家参考. 方法一: 1.在 33 – 126 中生成一个随机整数,如 35, 2.将 35 转换成对应的ASCII码字符,如 35 对应 # 3.重复以上 1.2 步骤 n 次,连接成 n 位的密码 该算法主要用到了两个函数,mt_rand ( int $min , int $max )函数

vs2015开发应用程序实现跨平台是否会降低java开发使用率。

问题描述 本人以前用c#开发cs,最近三年用java写web和Android,今天看到微软推出最新的vs2015,从ASP.NET5至CommonLanguageRuntime和BaseClassLibraries,整个服务器开发环境都将通过Github开源,实现跨平台支持MacOSX和Linux.除此之外,集成Clang和LLVM并自带Android模拟器.我对java和微软都没有任何排斥心理,觉得都是开发语言,根据实际情况选择应用.但是微软新推出的vs2015还是很有诱惑力,请大家给些自己的

ultimix 1.5.88发布 Web开发应用程序框架

ultimix 1.5.88更新日志: &http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   1. An error in the 'cf_predefined_packages' was fixed.     2. An error in the 'category::category_view' was fixed.     3. An error in the 'security' package was f

ultimix 1.5.98发布 Web开发应用程序框架

Ultimix是一个用于Web开发应用程序的框架,类似于CMS,门户网站,ERPs等.它支持多种语言,其功能是支持http://www.aliyun.com/zixun/aggregation/18083.html">权限管理.MVC小型框架.封装结构.模板引擎.JavaScript库.简单的GUI库.5603.html">缓存系统以及CAPTCHA. ultimix 1.5.98版本更新日志: 1.The "rss" package was refac

ultimix 1.5.94发布 Web开发应用程序框架

ultimix 1.5.94发布了! Ultimix是一个用于Web开发应用程序的框架,类似于CMS,门户网站,ERPs等.它支持多种语言,其功能是支持http://www.aliyun.com/zixun/aggregation/18083.html">权限管理.MVC小型框架.封装结构.模板引擎.JavaScript库.简单的GUI库.缓存系统以及CAPTCHA. 更多详细信息:http://ultimix.sourceforge.net/ ultimix 1.5.94更新日志: 1.

ultimix 1.5.89发布 Web开发应用程序框架

ultimix 1.5.89版本更新日志: 1.The "user::user_controller" package was rehttp://www.aliyun.com/zixun/aggregation/16557.html">factored. 2.The "user::user_view" package was refactored. 3.The "category::category_algorithmss->get_

ultimix 1.5.90发布 Web开发应用程序框架

Ultimix是一个用于Web开发应用程序的框架,类似于CMS,门户网站,ERPs等.它支持多种语言,其功能是http://www.aliyun.com/zixun/aggregation/18083.html">权限管理.MVC小型框架.封装结构.模板引擎.JavaScript库.简单的GUI库.5603.html">缓存系统以及CAPTCHA. ultimix 1.5.90版本更新日志: 1.The "core" package was improv

ultimix 1.5.85发布 Web开发应用程序框架

Ultimix是一个用于Web开发应用程序的框架,类似于CMS,门户网站,ERPs等.它支持多种语言,其功能是http://www.aliyun.com/zixun/aggregation/18083.html">权限管理.MVC小型框架.封装结构.模板引擎.JavaScript库.简单的GUI库.5603.html">缓存系统以及CAPTCHA. ultimix 1.5.85更新日志: 1. The package 'category::category_view' wa

俄罗斯运营商MTS广邀黑客开发应用程序商店

俄罗斯最大移动运营商MTS准备打造当地首个应用程序市场,它为此向电脑黑客组织获取一些援助. 苹果的iTunes在全球大获成功,受此激发,MTS.沃达丰和其它一些电信巨头组织准备建立一个通用的App标准,以方便设计者与自己的用户接轨.MTS准备在国内和国外举行会议,地点遍及英国伦敦到西伯利亚,以吸引俄文开发者为沃达丰360程序商店开发软件.每年俄罗斯有7万名程序设计毕业生,当中一些人加入了黑客组织. MTS投资者关系主管乔希·图干(Josh Tulgan)说:"俄罗斯拥有全球互联网用户的3%,但是