使用XQuery搜索XML

日期: 2008-06-25 作者:William Brogden 来源:TechTarget中国 英文

XQuery将成为一种用于描述对XML数据源的查询的语言,具有精确、强大和易用的特点。其支持者认为针对XML的XQuery非常类似针对关系数据库的SQL。对XQuery语言标准的定义工作还停留在W3C候选推荐阶段,而这也是在经过几次迭代后于2005年11月才达到的。XQuery的开发工作与XPath、XSLT 2.0以及XMLSchema的开发工作紧密相关。

  从候选方案到最终推荐要十分谨慎,因为这与XPath以及其它XML和XSL标准有关。因为看起来,人们总是在不断尝试新的有趣的应用,所以他们在所有事情明确之前是不太愿意终结标准的。例如,在2月21号,某个数据类型就从XMLSchema名字……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

XQuery将成为一种用于描述对XML数据源的查询的语言,具有精确、强大和易用的特点。其支持者认为针对XML的XQuery非常类似针对关系数据库的SQL。对XQuery语言标准的定义工作还停留在W3C候选推荐阶段,而这也是在经过几次迭代后于2005年11月才达到的。XQuery的开发工作与XPath、XSLT 2.0以及XMLSchema的开发工作紧密相关。

  从候选方案到最终推荐要十分谨慎,因为这与XPath以及其它XML和XSL标准有关。因为看起来,人们总是在不断尝试新的有趣的应用,所以他们在所有事情明确之前是不太愿意终结标准的。例如,在2月21号,某个数据类型就从XMLSchema名字空间移到了另一个。但是,有迹象表明不久将出台一个查询推荐方案。

  尽管W3C十分谨慎,但是很多实现已经在过去几年内出现了。在W3C网站上列出了不少商业的和开源的应用,这表明最近的相关活动是多么频繁。如果你想了解如何使用XQuery,你可以经常浏览该网站。

  为了确认所有了实现都是朝着同一个目标前进,W3C维护了一个经常更新的"XML Query测试套件"。想知道一个完整的XQuery实现将会是多么复杂吗?2006年2月15号的W3C XQuery测试套件就包含了28,245个文件,它们包括样本XML文档、查询以及期望结果的描述。

  示例XQuery程序

  下面是W3C用例文档中的一个示例XQuery程序。它想从"prices.xml"文件中取出标题和最低价,返回"minprice"元素的集合。操作符"doc"从文件中创建一个DOM,操作符"distinct-values"用"//book/title" XPath表达式创建两两不同的标题的集合,而操作符"min"负责计算通过XPath语句"//book[title = $t]/price"定位的价格元素集合中的浮点值的最小值。

  {let $doc := doc("prices.xml")for $t in distinct-values($doc//book/title)let $p := $doc//book[title = $t]/pricereturn{ min($p) }}
 

  Saxon B XQuery处理器包括用例示例程序和prices.xml测试数据库。在设置SAXONCP环境变量到saxon8.jar文件后,我执行了下面的Java命令,其中q10.xq指的是上面的程序。

  java -cp %SAXONCP% net.sf.saxon.Query -t q10.xq

  大约360毫秒后,输出了XML测试结果,如下所示:

&65.9565.9534.95
 

  针对XML数据源应用XQuery程序的过程可以非常简单地在一个Java程序中完成。只需创建一个String的程序然后就得到一个org.w3c.dom.Document对象的结果。

  XQuery表达式的结果

  应用XQuery表达式的结果可以使一个简单的值也可以是一个全新的XML文档。XQuery表达式通常返回被W3C称为"sequences"的多个数据类型。它可以是类似一个字符串或浮点数的原子值,也可以是一个XML节点。

  从前面的文字中,你或许会想到在Java 1.5 中实现的XPath 1.0表达式可以返回Java对象类型Double, Boolean, String, Node以及NodeList。XQuery 1.0和XPath 2.0则通过XML Schema中的类型信息大大扩展了对象类型。XQuery则想能够使用从简单内建类型开始的任何XML Schema类型。

XQuery, Java Standard Library APIs以及JSR 225

  用于Java的XQuery API的正式开发工作被包括在Java Specification Request (JSR) 225中,它支持所有的在Java 应用业务领域的主要厂商。XQuery API将类似JDBC的风格,兼容所有的JAXP工具。但是现在,如果你想在Java程序中执行XQuery语句,你会使用特定厂商的API。由于XQuery还处于候选推荐的阶段,我们离在标准库中拥有标准API还非常远。

  针对Java的XQuery的Saxon实现

  Michael Kay发布了XQuery的Saxon B实现,并同时作为候选推荐版本发布。如果你想在Java中实验XQuery,Saxon B是一个不错的选择。Saxon使用和扩展Java 1.5中的XPath 1.0(javax.xml.xpath包)来支持XPath 2.0。

  Saxon SA是Saxon的商业版本,它增添了重要功能,可以使用XML Schema中的信息来验证,还可以基于它们的schema定义类型来选择元素和属性。

  其它开源实现

  Sleepycat Software公司最近发布了"Berkeley DB XML 2.2"包。针对他们XML数据库的这个新版本能支持 XQuery 1.0 和XPath 2.0候选推荐文档。它不是Berkeley DB Java Edition,但它却有一个Java API来执行XQuery语句。Sleepycat被认为是开源软件领域的领导者之一。该公司最近被Oracle收购,令人震动。

  总之,我发现用XQuery的Java编程的可能性比我预想的要大得多。你现在就可以使用Saxon B或其它厂商的产品,但你不应该期望XQuery会在将来加入到Java标准库中。

相关推荐