XSLT与XQuery处理器的详细介绍
XSLT与XQuery处理器的详细介绍
Saxon 是由英国的Michael Kay开发的XSLT与XQuery处理器,自从1999年以开源产品发布,引导着XSLT处理器技术,并赢得较高声誉。迄今依然是仅有的XSLT2.0规范草案的实现,在很大程度上推动了XSLT语言的普及。
从2003年中发布的7.6版开始,Saxon增加了对XQuery的支持。两种语言的运行期代码是相同的,这说明,事实上它们有非常相似的语义。Saxon中的XQuery支持本质上由一个XQuery解析器(也是XPath解析器的扩展)组成;解析器与XSLT处理器一样,生成相同的内部可解释的代码。
XQuery处理器没有提供图形用户界面,可以从操作系统的命令行调用,也可以通过Java应用程序的API调用。
Saxon是一个内存处理器。无论使用XSLT还是XQuery,Saxon被设计来处理在内存中装配好的源。
Saxon也是仅有的在一个集成包中提供XSLT和XQuery的产品,可以使用每种语言以获得最好的效果。两个接口是互补的:你可以在XQuery中写一个函数库,并在XSLT样式表中调用此函数。
Saxon介绍
版本8.1.1是最新的Saxonica的对XPath2.0、XSLT2.0和XQuery1.0的实现。这个版本实现了这些语言的模式敏感(schema-aware)的特性,也包含一个自立的符合XML Schema1.0的模式处理器。
Saxon 8.1 是在与Stylus Studio合作下开发的。Stylus Studio版本6利用了8.1版Saxon引入的新特性,而支持样式表和查询调试。Saxonica乐于推荐Stylus Studio作为一个领先的XML、XSLT和XQuery开发环境。
Saxon 8.1 提供新的功能,改良的性能,和更好的程序诊断。Saxon-SA 的特许样式也更加灵活,在不同的价格层次提供不同的特性组合。
产品已经按照2004年7月发布的工作草案调整,虽然少数特性尚未实现,自从草案发布,改变已经列入实现结果。
Saxon 8.1现有两个版本。Saxon-B 8.1是一个无模式的处理器,并且作为开源产品免费在SourceForge(http://saxon.sf.net/)上提供。它遵照XSLT2.0的基本一致性,也遵循XQuery1.0。Saxon-SA 8.1 是程序包的模式敏感(schema-aware)版本,在Saxonica有限公司(http://www.saxonica.com/)以商业配套产品提供。许可证选项有XSLT、XQuery、模式验证,全部证书就可获得全部功能。
Saxon 8.1.1是一个维护版本,更正了8.1中的几个错误。
请注意:帮助文档在Saxonica站点和下载文件中都有。有时在线版本会更新一些。下载文件也包括全部的API文档,在doc/api目录中。
当前版本的Java文档API详细说明在http://www.saxonica.com/documentation/javadoc/index.html提供
全部变更记录在changes.html中提供。
Saxon 8.0 已经被许多用户用来开发应用程序。代码提供稳定可靠。但是你要清楚,规范还在改动,新的Saxon版本将跟踪规范改动,不保证向后兼容。
如果你期待完全的稳定性,优先选用版本是Saxon 6.5.3,它实现了XSLT1.0和XPath1.0。
Saxon 8.1 要求Java JDK 1.4。尽管由于在DOM接口不兼容而不能在JDK1.5下编译源码,确信在JDK1.5下也没有问题。
什么是Saxon?
Saxon程序包是一个处理XML文档的工具集。主要组成有:
· XSLT 2.0处理器,可以从命令行使用,或者使用标准JAXP应用程序接口从Java应用程序调用。Saxon可以用JAXP应用程序接口与Java应用程序结合,这意味着一个Java应用程序可以在不改变应用程序代码的情况下,在不同的XSLT处理器之间切换。Saxon既精密的符合XSLT 2.0规范,还提供了大量强大的扩展。
· XPath 2.0处理器,Java应用程序可以通过一个应用程序接口访问。
· XQuery 1.0处理器,可以从命令行使用,或者使用一个API从Java应用程序调用。
· XML Schema 1.0处理器,可以单独使用来验证一个模式的正确性,或者对比一个模式中的定义来验证一个源文档。也用来支持XSLT和XQuery处理器的模式敏感(schema-aware)功能。
你可以通过写XSLT样式表、写XQuery查询、写Java应用程序、或者组合这些方法来使用Saxon处理XML。
Saxon完全实现了XSLT 1.0 推荐标准,包括XPath 1.0, Saxon 8.0 也实现了在XSLT 2.0、XPath 2.0和Query 1.0工作草案中定义的几乎所有的特性。超出XSLT 1.0以外的新特性包括:
· 使用xsl:result-document
对多个输出文件的支持
· 临时树(以前通常所说的结果树片段)的完全处理能力
· 支持节点序列和简单值
· 功能组合
· 正则表达式处理
· 支持新的XPath结构比如if
、
for
、
some
和 every
· 支持指定的排序序列
· 许多新函数和运算符
· 支持新的数据类型,如日期(dates)、时间(timews)和持续时间(durations)
另外,Saxon提供了一个广泛的扩展元素和扩展函数库,所有的实现与XSLT推荐标准保持一致,以确保能够写出可移植的样式表。这些包括EXSLT扩展库common、 sets、 math、和 dates-and-times 。很多这类扩展都是Saxon首先采用的。
这些扩展功能通常在XQuery中也可以使用,除了那些依赖样式表信息的。
Saxon还提供了一个API允许Java应用程序执行XPath 表达式并处理结果。XQuery使用一个单独的API,不同表现在设置的上下文的方式。
可扩展性及功能扩展
Saxon提供了功能扩展机制,可以通过增加扩展函数和其他挂钩(hook)对Saxon XSLT样式表和XQuery查询的性能进行扩展
Saxon XQuery 实现允许调用Java方法作为外部函数,函数不需要声明。使用命名空间声明如下: declare namespace math=java:java.lang.Math
,就可以调用此方法,如:
math:sqrt(2)
。
Saxon 包括一套扩展组件,提供了对SQL数据库的访问。这些不打算作为产品的必要属性(在设计中有许多局限性),更多的用以说明扩展组件如何增强处理器的性能。
在一个样式表中使用SQL扩展,需要在元素xsl:stylesheet的扩展元素前缀属性中定义一个命名空间前缀(如“sql”),并把这个前缀映射到以“/net.sf.saxon.sql.SQLElementFactory”为结果的命名空间URI上。
这个扩展定义了5个新的样式表元素: sql:connect
、
sql:query
、
sql:insert
、
sql:column
和
sql:close
。