当前位置: 首页 > 工具软件 > XQuery > 使用案例 >

XQuery基本介绍

虞裕
2023-12-01

一.简介

     XQuery = XML Query,是W3C所制定的一套标准,用来从类XML文档中提取信息,类XML文档可以理解成一切符合XML数据模型和接口的实体,他们可能是文件或RDBMS。

二.特点

    XQuery有如下特点:

      ·XQuery是查询XML的语言  

      ·XQuery类似RDBMS的SQL  

      ·XQuery建立在XPATH的基础之上  

      ·XQuery已经被现在主流的RDBMS所支持,如Oracle,DB2,SQLServer  

   XQuery应用举例  

      ·从Web Service中提取信息  

      ·生成数据的摘要报告  

      ·将XML转换为XHTML  

      ·从Web文档中找寻信息  

    在了解XQuery之前,你应该首先了解  XML  HTML/XHTML  XPATH

三.例子

XML文件books.xml中是如下代码:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<bookstore>
  <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>500.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>566.99</price>
  </book>
  <book category="WEB">
  <title lang="en">Learning XML</title>
  <author>Erik T. Ray</author>
  <year>2003</year>
  <price>899.95</price>
  </book>
</bookstore> 

文件存储了书店中的若干本书以及他们的语言,分类,作者,出版年和价格。  

现在,如果我们想找出所有价格大于30的书名集合则可以写XQuery为

for $i in doc("books.xml") /bookstore/book  

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>  

{  

for $x in doc("books.xml")/bookstore/book/title  

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代码

查询所有指定元素

doc("books.xml")//book

    双斜线"//"表示任意路径,即book上面可以有任意父级元素,上面代码即查询所有的book元素。

获取第二个book元素及其子元素

doc("books.xml")//book[2]

  获取第二个"book"元素及其子元素,注意XQuery的索引从1开始而不是从0

查询指定属性的元素

doc("books.xml")/bookstore/book[@category="COOKING"]

"@"表示获取属性,并用中括号括起来,上面表达式的意思为:获取book元素中属性category为“COOKING”的所有book元素,并将查询出相应book的所有子元素。

三.XML的语法规则

·大小写敏感  

·元素,属性和变量名必须是合法的XML名称  

·XQuery中的字符串可以使用单引或双引号  

·XQuery中的变量用$前缀加名称表示  

·XQuery中的注释在 (: 和 :)范围内  

另外,作为高级功能,XQuery还提供了用户自定义函数功能

四.其他

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 表达式所选取的数据和上面的路径表达式是相同的:

for $x in doc("books.xml")/bookstore/book  

where $x/price>30  

return $x/title

结果是:  

<title lang="en">XQuery Kick Start</title>  

<title lang="en">Learning XML</title>

通过 FLWOR,您可以对结果进行排序:  

for $x in doc("books.xml")/bookstore/book  

where $x/price>30  

order by $x/title

return $x/title

FLWOR 是 "For, Let, Where, Order by, Return" 的只取首字母缩写。

 类似资料: