RSS订阅
RSS订阅TT SOA
您现在的位置:TT SOA > Xquery > 使用XQuery搜索XML

使用XQuery搜索XML

2008-6-26  选择字号:  | |
打印本文章

导读:使用XQuery搜索XML,XQuery将成为一种用于描述对XML数据源的查询的语言,具有精确、强大和易用的特点。其支持者认为针对XML的XQuery非常类似针对关系数据库的SQL。

关键词:XQuery XML数据源 SQL W3C

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

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

【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标准库中。

还没有登录? 阅读全文请先登录或注册
用户名:(请填写您的E-mail做为登录账号)
  • 获取最新的IT业界资讯、市场动态、行业趋势等独家原创内容。
  • 分享国内外技术专业人士提供的技巧经验。
  • 利用专注IT的技术资源中心,不断更新专业知识。
  • 享受白皮书、Webcast等系列特色增值服务。
  • 免费参加TT中国举办的各种会员活动。
  • 更多的精彩服务,在不断开发中……
用户名:(请填写您的E-mail)
密 码:
 永久登录
请输入您的登录email:
相关的新闻
相关的白皮书
目前,SOA(面向服务架构)大潮正在席卷着整个世界,而且势不可挡。作为一种集成企业应用的方法论,SOA具备灵活性、标准性、重用性强和成本低等优点……
目前,SOA在国内外已经成为替代一度风靡的面向对象、BS结构、三层结构等软件解决方案的另一个热门词汇。几乎每一个IT公司都有基于SOA的解决方案……
Web的开始阶段是简单的网站(信息中介和信息发布的平台),随着Internet 和Intranent、Extranet的快速发展而发展成为各种应用的主要平台……
当XQuery查询时,不能满足XML的需求?我应该怎样使用XQuery查询?举一些具体的例子,说明你需要做的与XML可能会更容易提供一个确切的答案,但这里是一个概括……
从早期将XML转换为关系型数据表或大型对象,到今日转向原生XML数据型态,关系型数据库与XML之间的合作日益紧密……
虚拟化和SOA之间是一种间接的、相辅相成的关系。也许在IT及业务转型中,两者的结合使用会发挥最大的优势。虚拟化有助于更快地显示部署基础设施的投资回报率(ROI)。
云计算的概念越来越流行,Amazon、Google和IBM是第一批将云计算引入公众视线的公司。云计算就是新的Web2.0,一种既有技术上的市场绽放。
安全对于许多的IT部门来说都是一个重要的问题之一,但是SOA安全问题完全是在另一个新的纬度上了。对于SOA为一个机构所带来的许多的好处,例如具有在许多不同的提供者和供应商的情况下混合和匹配服务。
最新更新
专家答疑
技巧
Ron Schmelzer,Jason Bloomberg
你认为通过遵循IT组织步骤可以演变为SOA吗?ZapThink公司明确SOA实行肯定是一个挑战——也不应被视为这一倡议应得到执行的一个步骤就是整个企业的基础……
Dana Gardner
您能解释什么是“私有云”吗,能否举例说明?这是供应商需要建立的基础吗?作为托管服务供应商和服务供应商寻求最有效和最强大的基础设施,作为他们的“云”支持能力……
Andrew Pollack
我们正在寻找一种从主机选择SOAP服务器的请求。我们希望制造一个远程程序呼叫(RPC)从CICS程序的SOAP服务器,其中进程请求,使错误或成功后的反应……