XQuery,即 XML Query,用来从类 XML(标准通用标记语言的子集)文档中提取信息。
XQuery 之于 XML 作用就类似于 SQL 之于数据库的作用。
XQuery 被设计用来查询 XML 数据。
现在开始学习 XQuery !
在 W3CSchool中,我们提供 XQuery 1.0 中所有运算符、内置函数、数据类型的完整参考手册。
解释 XQuery 最佳方式是这样讲:XQuery 相对于 XML 的关系,等同于 SQL 相对于数据库表的关系。
XQuery 被设计用来查询 XML 数据 - 不仅仅限于 XML 文件,还包括任何可以 XML 形态呈现的数据,包括数据库。
在您继续学习之前,需要对下面的知识有基本的了解:
如果您希望首先学习这些项目,请在我们的 首页 访问这些教程。
|
XQuery 是用来从 XML 文档查找和提取元素及属性的语言。
这是一个 XQuery 解决实际问题的例子:
"从存储在名为 cd_catalog.xml 的 XML 文档中的 CD 集那里选取所有价格低于 10 美元的 CD 记录。"
XQuery 1.0 和 XPath 2.0 共享相同的数据模型,并支持相同的函数和运算符。假如您已经学习了 XPath,那么学习 XQuery 也不会有问题。
您可以在我们的《XPath 教程》中阅读更多有关 XPath 的知识。
XQuery 可用于:
XQuery 与多种 W3C 标准相兼容,比如 XML、Namespaces、XSLT、XPath 以及 XML Schema。
XQuery 1.0 在 2007年1月23日 被确立为 W3C 推荐标准。
如需获得更多有关 W3C 的 XQuery 活动的信息,请阅读我们的《W3C 教程》。
在下一节内容中,我们将开始学习与 XQuery 相关的知识点。
XQuery 对大小写敏感,XQuery 的元素、属性以及变量必须是合法的 XML 名称。
一些基本的语法规则:
"If-Then-Else" 可以在 XQuery 中使用。
请看下面的例子:
请注意 "If-Then-Else" 的语法:if 表达式后的圆括号是必需的。else 也是必需的,不过只写 "else ()" 也可以。
上面的例子的结果:
在 XQuery 中,有两种方法来比较值。
请看下面的 XQuery 表达式:
如果 q 属性的值大于 10,上面的表达式的返回值为 true。
如下实例,如果仅返回一个 q,且它的值大于 10,那么表达式返回 true。如果不止一个 q 被返回,则会发生错误:
在下一节内容中,我们将通过一个实例来学习 XQuery 的基础语法。
在上一节中,我们已经介绍了 XQuery 的语法规则。
在本节,让我们通过研究一个例子来学习一些基础的 XQuery 语法。
我们将在下面的例子中使用这个 XML 文档。
"books.xml":
XQuery 使用函数来提取 XML 文档中的数据。
doc() 用于打开 "books.xml" 文件:
XQuery 使用路径表达式在 XML 文档中通过元素进行导航。
下面的路径表达式用于在 "books.xml" 文件中选取所有的 title 元素:
(/bookstore 选取 bookstore 元素,/book 选取 bookstore 元素下的所有 book 元素,而 /title 选取每个 book 元素下的所有 title 元素)
上面的 XQuery 可提取以下数据:
XQuery 使用谓语来限定从 XML 文档所提取的数据。
下面的谓语用于选取 bookstore 元素下的所有 book 元素,并且所选取的 book 元素下的 price 元素的值必须小于 30:
上面的 XQuery 可提取到下面的数据:
以上就是关于 XQuery 基础语法的学习,在下一节内容中,你将了解:如果使用 FLWOR 从 "books.xml" 选取节点。
FLWOR 表达式是 XQuery 最重要的表达式之一,本节带你了解 FLWOR 表达式的使用。
我们将在下面的例子中继续使用这个 "books.xml" 文档(与上一节中的 XML 文件相同)。
请看下面这个路径表达式:
上面这个表达式可选取 bookstore 元素下的 book 元素下所有的 title 元素,并且其中的 price 元素的值必须大于 30。
下面这个 FLWOR 表达式所选取的数据和上面的路径表达式是相同的:
输出结果:
通过 FLWOR,您可以对结果进行排序:
FLWOR 是 "For, Let, Where, Order by, Return" 的只取首字母缩写。
for 语句把 bookstore 元素下的所有 book 元素提取到名为 $x 的变量中。
where 语句选取了 price 元素值大于 30 的 book 元素。
order by 语句定义了排序次序。将根据 title 元素进行排序。
return 语句规定返回什么内容。在此返回的是 title 元素。
上面的 XQuery 表达式的结果:
接下来,在下一节中,你将了解在 XQuery 中,FLWOR与HTML是如何一起使用的。
我们将在下面的例子中继续使用这个 "books.xml" 文档(与上一节中的文件相同)。
请看下面的 XQuery FLWOR 表达式:
上面的表达式会选取 bookstore 元素下的 book 元素下的所有 title 元素,并以字母顺序返回 title 元素。
现在,我们希望使用 HTML 列表列出我们的书店中所有的书目。我们向 FLWOR 表达式添加 <ul> 和 <li> 标签:
以上代码输出结果:
现在我们希望去除 title 元素,而仅仅显示 title 元素内的数据。
结果将是一个 HTML 列表:
在 XQuery 中,有七种节点:元素、属性、文本、命名空间、处理指令、注释、以及文档节点(或称为根节点)。
在 XQuery 中,有七种节点:元素、属性、文本、命名空间、处理指令、注释、以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。
请看下面的 XML 文档:
上面的 XML 文档中的节点例子:
我们将在下面的例子中继续使用这个 "books.xml" 文档(和上面的章节所使用的 XML 文件相同)。
正如在前面一节看到的,我们可以在结果中引用输入文件中的元素和属性:
上面的 XQuery 表达式会在结果中引用 title 元素和 lang 属性,就像这样:
以上 XQuery 表达式返回 title 元素的方式和它们在输入文档中被描述的方式的相同的。
现在我们要向结果添加我们自己的元素和属性!
现在,我们要向结果添加 HTML 元素。我们会把结果放在一个 HTML 列表中:
以上 XQuery 表达式会生成下面的结果:
接下来,我们要把 category 属性作为 HTML 列表中的 class 属性来使用:
上面的 XQuery 表达式可生成以下结果:
以上就是关于 XQuery 添加元素和属性的知识。
我们将在下面的例子中继续使用这个 "books.xml" 文档(和上面的章节所使用的 XML 文件相同)。
正如在前面的章节所看到的,我们使用路径表达式或 FLWOR 表达式来选取和过滤元素。
请看下面的 FLWOR 表达式:
for 语句可将变量捆绑到由 in 表达式返回的每个项目。for 语句可产生迭代。在同一个 FLWOR 表达式中可存在多重 for 语句。
如需在一个 for 语句中进行指定次数地循环,您可使用关键词 to :
结果:
关键词 at 可用于计算迭代:
结果:
在 for 语句中同样允许多个 in 表达式。请使用逗号来分割每一个 in 表达式:
结果:
let 语句可完成变量分配,并可避免多次重复相同的表达式。let 语句不会导致迭代。
结果:
where 语句用于为结果设定一个或多个条件(criteria)。
order by 语句用于规定结果的排序次序。在这里,我们要根据 category 和 title 来对结果进行排序:
结果:
提示:你也可以对 SQL ORDER BY 关键字进行了解!
return 语句规定要返回的内容。
结果:
XQuery 1.0、XPath 2.0 以及 XSLT 2.0 共享相同的函数库。
XQuery 含有超过 100 个内建的函数。这些函数可用于字符串值、数值、日期以及时间比较、节点和 QName 操作、序列操作、逻辑值等等。您也可在 XQuery 中定义自己的函数。
XQuery 函数命名空间的 URI:
http://www.w3.org/2005/02/xpath-functions
函数命名空间的默认前缀是 fn:。
提示:函数经常被通过 fn: 前缀进行调用,例如 fn:string()。不过,由于 fn: 是命名空间的默认前缀,所以函数名称不必在被调用时使用前缀。
您可以在我们的 XPath 教程中找到完整的《内建 XQuery 函数参考手册》。
函数调用可与表达式一同使用。请看下面的例子:
如果找不到所需的 XQuery 函数,你可以编写自己的函数。
可在查询中或独立的库中定义用户自定义函数。
本教程已经向您讲解了如何查询 XML 数据。
您已经明白,XQuery 被设计来查询以 XML 形态存在的任何数据,包括数据库。
您也学习了如何使用 FLWOR 表达式来查询 XML 数据,以及如何由选定的数据构造 XHTML 输出。
如需更多有关 XQuery 的信息,请阅读我们的《XQuery 参考手册》。
下一步该学习 XLink 和 XPointer。
XML 中的链接被分为两部分:XLink 和 XPointer。
XLink 和 XPointer 定义了一套标准的在XML文档中创建超级链接的方法。
如果您希望学习更多有关 XLink 和 XPointer 的知识,请访问我们的《XLink 和 XPointer 教程》。
在下一节内容中,你可以了解到与 XQuery 相关的参考手册。
XQuery 1.0 和 XPath 2.0 分享相同的数据模型,并支持相同的函数和运算符。
XQuery 构建在 XPath 表达式之上。XQuery 1.0 和 XPath 2.0 分享相同的数据模型,并支持相同的函数和运算符。
XQuery 分享与 XML Schema 1.0 (XSD) 相同的数据类型。