收藏
0有用+1
0

XQuery

W3C所制定的一套标准
XQuery = XML Query,是W3C所制定的一套标准,用来从类XML标准通用标记语言的子集)文档中提取信息,类XML文档可以理解成一切符合XML数据模型和接口的实体,他们可能是文件或RDBMS
中文名
XQuery
性    质
W3C所制定的一套标准
用    途
从类XML文档中提取信息
特    点
XQuery类似RDBMSSQL

基本信息

播报
编辑
XQuery
简介
解释XQuery最佳方式是这样讲:XQuery 相对于 XML 的关系,等同于 SQL 相对于数据库表的关系。
XQuery 被设计用来查询 XML 数据 - 不仅仅限于 XML 文件,还包括任何可以 XML 形态呈现的数据,包括数据库。
◆什么是 XQuery?
XQuery 是用于 XML 数据查询的语言
XQuery 对 XML 的作用类似 SQL 对数据库的作用
XQuery 被构建在 XPath 表达式之上
XQuery 被所有主要的数据库引擎支持(IBMOracleMicrosoft等等)
XQuery 是 W3C 标准。
[1]

解析

播报
编辑
Query是一种发展得最为慎重的W3C标准,因而演化得也最为缓慢,XQuery也因此而闻名。造成这种现象的一个主要原因就是,对于如何获得以XML形式存储的信息,业界还没有什么经验。许多公司仍然在这个领域创新,并且正不断产生大量的经验信息,这些信息必须经过处理和提炼,才能使解决XML查询问题的水平达到令人满意的程度。
XQuery还不是W3C推荐标准。最新的工作草案已经有了显著的进展,并且正在被许多不同的供应商或多或少地实现。一些市场主导供应商例如BEA和Software AG已经决定发布一些基于这些工作草案的产品,但是直到其成为W3C的推荐标准前,这些厂商并不准备紧跟这一标准。由于最终发布版的延迟推出,有关其实施的大规模市场推广计划尚未开始。
XQuery低公开度的另一个原因就是,到目前为止,还没什么证据能表明XML格式的数据存储能够成为将关系型数据存储拉下马的通用技术。虽然XML数据库展现出很多有价值的和特殊的特性,但是它们在市场渗透方面与面向对象数据库比较相似。这两种数据库都可以很方便地解决专业问题,并且适用于中小型系统。不过,随着存储问题复杂性的增加,XML和面向对象数据库看起来都没有关系型数据库那样容易扩展。实际上,像关系型数据库那样运作可能也不会取得成功。只有在技术方面的大踏步前进才会减少对关系型数据库管理系统遗留项目的大量投资。 [2]

特点介绍

播报
编辑
XQuery有如下特点:
  1. 1.
    XQuery是查询XML的语言
  2. 2.
    XQuery类似RDBMS的SQL
  3. 3.
    XQuery建立在XPATH的基础之上
  4. 4.
    XQuery已经被主流的RDBMS所支持,如Oracle,DB2,SQLServer
XQuery应用举例
·从Web Service中提取信息
·生成数据的摘要报告
·将XML转换为XHTML
·从Web文档中找寻信息
在了解XQuery之前,你应该首先了解
XML
HTML/XHTML
XPATH [1]

参考手册

播报
编辑
XQuery 1.0 和 XPath 2.0 分享相同的数据模型,并支持相同的函数和运算符。 [1]

相关函数

播报
编辑
XQuery 构建在 XPath 表达式之上。XQuery 1.0 和 XPath 2.0 分享相同的数据模型,并支持相同的函数和运算符。
XPath Operators
XPath Functions

数据类型

播报
编辑
XQuery 分享与 XML Schema 1.0 (XSD) 相同的数据类型。
XSD String
XSD Date
XSD Numeric
XSD Misc

代码演示

播报
编辑
XML文件books.xml中是如下代码:
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>329.99</price>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>349.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>339.95</price>
</book>
</bookstore>
文件存储了书店中的若干本书以及他们的语言,分类,作者,出版年和价格。
如果我们想找出所有价格大于30的书名集合则可以写XQuery为
where $i/price > 30
return $i/title
doc是打开一个XML文档的函数,XQuery有一个函数库支持,提供了诸如数学计算,字符串操作等功能。XQuery1.0于XPATH2.0,XSLT1.0共用同一套函数库。粗体部分是一个XPATH表达式,他返回了所有书的集合。where子句是筛选条件。而return子句则用于选择结果并返回。XQuery具有和SQL类似的外观和结构,以及相似的表达力。
上述XQuery将返回
<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>
然后,我们想把所有书的名称组成一个排序列表并生成相应的HTML表格,则应该
<ul> { order by $x return <li>{$x}</li> } </ul>
order子句用于排序。将返回
<ul>
<li><title lang="en">Everyday Italian</title></li>
<li><title lang="en">Harry Potter</title></li>
<li><title lang="en">Learning XML</title></li>
<li><title lang="en">XQuery Kick Start</title></li>
</ul>
这是一段合理的HTML代码
下面是一些XQuery语法的基本规则:
·大小写敏感
·元素,属性和变量名必须是合法的XML名称
·XQuery中的字符串可以使用单引或双引号
·XQuery中的变量用$前缀加名称表示
·XQuery中的注释在 (: 和 :)范围内
另外,作为高级功能,XQuery还提供了用户自定义函数功能 [1]

术语

播报
编辑
节点
在 XQuery 中,有七种节点:元素、属性、文本、命名空间、处理指令、注释、以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。
请看下面的 XML 文档:
<bookstore><book>
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book></bookstore>
上面的 XML 文档中的节点例子:
<bookstore> (文档节点)<author>J K. Rowling</author> (元素节点)lang="en" (属性节点)基本值(或称原子值,Atomic value)
基本值是无父或无子的节点。
基本值的例子: [1]
J K. Rowling"en"

基础语法

播报
编辑
XQuery 对大小写敏感
XQuery 的元素、属性以及变量必须是合法的 XML 名称。
XQuery 字符串值可使用单引号双引号
XQuery 变量由 “$” 并跟随一个名称来进行定义,举例,$bookstore
XQuery 注释被 (: 和 :) 分割,举例,(: XQuery 注释 :)

条件表达

播报
编辑
"If-Then-Else" 可以在 XQuery 中使用。
请看下面的例子:
return if ($x/@category="CHILDREN")
then <child>{data($x/title)}</child>
else <adult>{data($x/title)}</adult>
请注意 "If-Then-Else" 的语法:if 表达式后的圆括号是必需的。else 也是必需的,不过仅仅写 “else ( )” 也是可以的。
上面的例子的结果:
<adult>Everyday Italian</adult><child>Harry Potter</child><adult>Learning XML</adult><adult>XQuery Kick Start</adult>

比较

播报
编辑
在 XQuery 中,有两种方法来比较值。
通用比较:=, !=, <, <=, >, >=
值的比较:eq、ne、lt、le、gt、ge [1]

总结

播报
编辑
XQuery将成为一种用于描述对XML数据源的查询的语言,具有精确、强大和易用的特点。其支持者认为针对XML的XQuery非常类似针对关系数据库的SQL。对XQuery语言标准的定义工作已经于2007年初完成,版本为1.0
XQuery 如果使用FLWOR(For-let-where-order by- return) 从 "books.xml" 选取节点请看下面这个路径表达式:
doc("books.xml")/bookstore/book[price>30]/title上面这个表达式可选取 bookstore 元素下的 book 元素下所有的 title 元素,并且其中的 price 元素的值必须大于 30。
下面这个FLWOR表达式所选取的数据和上面的路径表达式是相同的:
where $x/price>30
return $x/title结果是:
<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>通过 FLWOR,您可以对结果进行排序:
where $x/price>30
order by $x/title
return $x/titleFLWOR 是 "For, Let, Where, Order by, Return" 的只取首字母缩写。
for 语句把 bookstore 元素下的所有 book 元素提取到名为 $x 的变量中。
where 语句选取了 price 元素值大于 30 的 book 元素。
order by 语句定义了排序次序。将根据 title 元素进行排序。
return 语句规定返回什么内容。在此返回的是 title 元素。
上面的 XQuery 表达式的结果:
<title lang="en">Learning XML</title>
<title lang="en">XQuery Kick Start</title>