2022年XQuery查询语言及应用实例 .pdf
-
资源ID:34883206
资源大小:112.19KB
全文页数:7页
- 资源格式: PDF
下载积分:4.3金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
2022年XQuery查询语言及应用实例 .pdf
XQuery 查询语言及应用实例分析本文介 绍了 XQuery 查询语 言的主要特性,并通 过实 例讨论 了 XQuery 语言在数据 查询 、 转换 等方面的 应用。引言XML 已经成为事实上的数据表示和数据交换的标准。 开始,它的自描述和特定可扩展性等核心特性提供了不同应用程序之 间消息 传输 所需的灵活性。特 别是随着近年来Web Service的蓬勃 发展,XML 越来越多地活 跃在数据交 换和存 储领 域,用 XML 表示的半 结构化数据越来越普遍,在B2B 电子商 务行业中尤其明 显。面 对XML 数据量的指数 级的增 长,必然要求更有效的数据管理能力和更快、更精确的查询 。因此,如何从XML数据源中准确有效地查询 所需信息,也就 变得越来越重要。一、 XQuery 概述XQuery 工作 组于 1999 年 9 月正式成立,其任 务是创建一 种灵活的 查询语 言以便从 XML 文档中抽取数据。目前 W3C 所公布的最新XQuery 草案是 2003 年 11 月 12 日的版本,它 还在不断的修 订和完善之中 1。作为一种新型的 查询语 言, XQuery 汲取了其它多 种查询语 言的 优点,适用于各 种类 型的 XML 数据源的 查询 ,不仅查询功能 强大,而且简洁 灵活且易于 实现 。而且, XQuery 还具有从多 种数据 库中检索信息的特点,它能 对各种数据和文档 进行查询 。XQuery 构建在 XPath 规范之上,其核心是能 够通过 XPath 表达式从文档 选择 特殊的 节点序列。XQuery 是一种将查询 表示成表达式的功能语言。通过它所支持的多 种表达式,它的 查询 可以有各 种不同的形式。各 种XQuery 表达式可以完全嵌套,也支持子查询 。目前,数据库业 界的三大主流厂商Oracle 、 IBM、 Microsoft 都已经在各自的 产品中提供了 对 XQuery 规范的支持。二、 XQuery 及其 应用实例1 查询应 用XQuery 具有 强大的 查询 和检索功能,它通 过各种由关键 字、符号、操作数构成的表达式完成查询 ,其表达式的操作 对象可以又是另一个表达式。作为一种函数 语言,它还允许各种表达式 进行相互嵌套。同 时它也是一 种对数据 类型有要求 严格的 语言,表达式中的操作数,运算符和函数都必须是指定的 类型2。首先来看一个表述书籍信息的 XML 文档 bib.xml 的例子。 china-pub JAVA编程思想 机械工业出版社 2002 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - Bruce Eckel 99 XML手册 电子工业出版社 2003 Charles F. Goldfarb 69 1 1 XPathXPath 是一 种能在 XML 文档中 查找定位信息的 语言,它能从 XML 文件中抽取 单个项目或一 组项 目。 XPath类似于平 时我们在计算机系 统中使用的文件路径,就像我们熟知的 C: WINNT 那样。通过 XPath 路径表达式,可以在 XML 文档中 轻松地定位数据,确定 节点。比如下面 这个基本 类型的 XPath 表达式(对应 上面的 XML文档): /bib/vendor/id。 这个表达式从文档根开始,选择 所有 bib 子元素,然后 选择 bib 的所有 vendor 子元素,最后选择 vendor 子元素的所有id 属性。当然,XPath 表达式所提供的能力远远 超过用这条简单语 句所做的工作。使用 XPath 可在 XML 层次结构中快速定位和提取信息,它的内建函数提供了全面的功能,可以方便的处理数值及文本数据。下面列 举一些典型的XPath 路径表达式:(用“/”路径 开始代表元素的 绝对 路径)路径表达式选择 的 XML 文档部分/ 选择 XML 文档的根 结点/* 选择 根结点的所有子 节点,*匹配任意子 节点名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - /bib 选择 根结点的所有 bib 元素/book 选择 根结点的所有后代 节点中的 book 元素/id 选择 含有 id 属性的子 节点/bib/book2 选择 bib 的第 2 个子元素/vendorid=id1_2/book 选择 符合 “ 属性 id=?id1_2?”的所有 book 元素/bib/vendor/bookyear2002 选择 符合 “ 元素 year?2002? ”的所有 book 元素当然,XPath 还能实现 很多其他的功能,具体请参看 W3C 的 XPath 规范3。1 2 FLWR 表达式XQuery 中最 强大的特性是FLWR 表达式(发音为 flower ),它是一 种典型的能 够完成具有某 种实际 意义的查询 的表达式。FLWR 表达式包含模式匹配、 过滤选择 和结果构造 这三种操作。FLWR 语句是 XQuery 所具有的最接近于SQL 的语句。使用 FLWR 语句,可以用比XPath 1.0 语句更自然的方法来创建特定的 查询 。5 FLWR 表达式是由FORLETWHERE RETURN 四个 关键 字定 义的子句构成的,在最新的标准中 则更新为 FLWOR , O 代表新加入的Order by 子句。FLWOR 表达式分 别代表 FOR LET WHERE ORDER BY RETURN 的首字母 缩略词。由此组成的FLWOR 表达式可以完成很多在XSLT 中难以完成的任 务。它支持迭代并且可以把变量绑定到中 间结 果。对两个或多个文档进行连接和重构数据 时这种 表达式非常有用。 每个 FLWOR 表达式都有一个或多个for 子句、一个或多个let 子句、一个可 选的 where 子句、一个 order by 子句以及一个return 子句。FOR 子句通过将节点绑定到 变量,以便继续 去循 环遍历序列中的 每一个 节点; let 子句 为一个 变量赋一个值或一个序列;return 子句定 义每 个元 组要返回的内容; 对于 where 子句,如果其有效布 尔值为 真,那么该 元组就被保留,并且它的 变量绑定用在 return 子句中,如果其有效布 尔值为 假,那么该 元组就被 废弃。下面是一个 简单 例子:下面是一个 简单 例子:for $i in document(bib.xml)/bib/vendor/book where $i/price80 return $i/title, $i/price 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - 此例没有用到let 语句,它只是可 选的。要注意的是,变量都是以符号 $开头 的,这些变量被 绑定到不同的 节点序列,然后通 过语 句进行传递 。花括号代表 输出信息,以及要 进行求 值的信息。可以看出, FLWOR 表达式是一个有多 种变 化的表达式 类型,它可以生成大量不同的查询实 例。“return ”关键 字后面的操作 项本身可以被另一个 FLWOR 表达式替代,可以不断将FLWOR 表达式首尾相接,使XQuery 具有非常丰富的表达能力。其查询结 果为: JAVA 99 1 3 其他功能除路径表达式和表达式之外, XQuery 还有 5 种基本的表达式模式:元素构造符、算子和函数表达式、条件表达式、限定表达式、列表构造符、数据类型表达式 4。通过它们的多 种组 合,可以产生具有丰富而 强大的查询检 索功能的 查询语 句。下面是一个使用了算术运算符 ,+? 的实例:let $a:=document(bib.xml)/bib/vendor/book1/price let $b:=document(bib.xml)/bib/vendor/book2/price return $a+$b 查询结 果如下:168 在查询语 句中,还可以使用 if thenelse 这样 的选择结 构,比如下例:for $i in document(bib.xml)/bib/vendor/book return if ($i/price 70) then $i/title, $i/price else $i/title, $i/price查询结 果如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - JAVA 99 XML handbook 69 2 转换应 用在进行应用集成 时,某个领域的 应用可以使用多 种词汇 表,如果这些应用之 间要进行交互,包括数据的交换,那么针对 不同 词汇 表对 XML 文档 进行转换 就很有必要了。 这时 XQuery 就能很好的适 应需求,因为它具有很多类似 XSLT 的从潜在的异构数据源中转换 数据的功能。下面我 们来看一个利用XQuery 实现 文档 转换 的例子,它能将 XML 文档的属性 转换为 元素 显示。这是一个作为输 入的原 XML 文档,它描述了 订单项 目。 下面是 实现转换 功能所用到的Xquery 语句。它只是 简单 的改 变原文档的 结构,加上了一些元素。let $order:=document(Order.xml)/Order return $order/id for $Item in $order/item return string($Item/id) string($Item/qty) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - 转换 后的 结果如下: 111 10 123 28 135 46 在本例中,当使用XML 数据的多个 应用采用了不同的词汇 表, 简化地考 虑问题 ,当它们采用了不同的DTD( Schema ) 时,很可能出 现这种 情况,由于不同的 应用基于不同的 实际 考虑,就会在用 XML 表述某些特征 时将DTD ( Schema ) 设计为 自由 选择使用元素或属性。 这就涉及到了文档的 转换 。当然,在实际 需求中,词汇 表之 间的转换 很可能比 这个例子要 复杂 的多,但是从本例我 们可以看出XQuery 的强大转换 功能足以表述大部分这样 的需求。因为 XQuery 有着非常灵活的构建结果树的机制,它在 设计时 已经考虑到了要利于 结构转换 ,所以有些情况下用它做转换 工作比用 XSLT 在实现语 法上更 简明。3更新应用虽然现在最新的 XQuery 1.0 标准草案中 还暂 不支持更新操作,但 这方面的研究 进展很快,一些 Native XML 数据库产 品如 Tamino 、 Ipedo 都已在各自的 产品中提供了更新的功能。而且另一个组织 XML:DB 也提出了一 种XUpdate 语言草案。显然,与 SQL/XML 可以方便的 进行更新操作相比, XQuery 在这方面 还不完善。这也正是目前 XQuery 与 SQL/XML 相比最明 显的差距。XQuery 中还没有定 义用于更新 XML 文档中元素的 语法。而SQL/XML 的更新机制已 经被定 义了,也已被 应用到 Oracle 和 DB2 中。三、 查询语 言的比 较名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - 从前面的例子,特 别是 FLWR 结构,我们可以看出, XQuery 具有类 似于 SQL 的外 观和能力,这是熟悉 关系数据 库的用 户所欢迎的。那么数据 库界的 SQL 标准对于 XML 的查询 需求有什 么新的支持呢。我 们不妨来比 较一下同 为 XML 查询语 言标准的 SQL/XML 和 XQuery 。作为 2003 年 12 月提出的最新的SQL:2003标准中的一部分,SQL/XML 基于 关系查询语 言的 扩展,特别增加了 对 XML 的支持。虽然 SQL/XML 和 XQuery 都是 XML 的查询标 准,但它们基于完全不同的模型,SQL/XML 更适合 关系模型,它能提供在已有SQL 环境上的完全 访问 , 包括 XQuery1.0 标准中不准 备提供的特性,比如更新和全文本查询。另外, SQL/XML 的 优势还 在于,数据 库厂商在 SQL 的查询优 化上已 经积 累了多年的 经验 。可以说,SQL/XML 提供了能从 关系数据中 创建 XML 同时又能很好的支持已有的SQL 环境中 关系数据的功能。对仅仅 基于 关系数据的 查询 , SQL/XML和 Xquery 能达到 类似的效果。但是,它 们对 同一功能的 实现 机制可能是完全不同的,因 为 SQL/XML的操作介于SQL 和 XML 之间,而XQuery 则基于 纯 XML 的范畴之上,它是从以 XML 为中心的角度上来考察问题 的。而 XQuery 最擅 长处理 “ 混合 ” 文档,即同 时包含叙述流和量化数据的文档。因此,对于跨越 关系数据 库和其它XML 数据源的 查询 , XQuery 就显示出了更重要的优势 。目前看来它 们是互 补的。 SQL/XML和 XQuery 标准的制定者都希望在标准中加入 对方的部分功能。但从 长期看,开发 人员可能希望在他 们的所有数据源上保持XML 抽象。在这种 情况下,作 为一种为处 理复杂 的数据而开发 的丰富而全面的编程语言,XQuery 可能将成 为一种重要的 标准。四、 总结现在, XQuery 标准还在不断 发展和完善,总的来 说,我们认为 , XQuery 对只需 处理 XML 数据或者需要同 时处理 XML 和关系数据的 XML 程序 员来说是最好的 选择 ,但它同样有不足,而且相 对成熟的 SQL 来说,它的技术支持和 经验 都要少一些。我 们能肯定,不管是 SQL/XML 还是 XQuery 都将会在 XML 查询 中发挥 重要的作用,而且,XQuery 在通用的 XML 处理方面会成 为重要的 标准。参考 资料http:/www.w3.org/XML/Query http:/www.w3.org/TR/xquery http:/www.w3.org/TR/xpath XQuery: A Guided Tour http:/ 2003.9 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -