学习 XQuery:XML数据查询的关键

这篇具有很好参考价值的文章主要介绍了学习 XQuery:XML数据查询的关键。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

XQuery 是 XML 数据的查询语言,类似于 SQL 是数据库的查询语言。它被设计用于查询 XML 数据。

XQuery 示例

for $x in doc("books.xml")/bookstore/book
where $x/price > 30
order by $x/title
return $x/title

XQuery 的特点

  • XQuery 是查询 XML 数据的语言,用于 XML 就像 SQL 用于数据库一样。
  • 它是基于 XPath 表达式构建的
  • 它是一种从 XML 文档中查找和提取元素和属性的语言。

XQuery 和 XPath

XQuery 1.0 和 XPath 2.0 共享相同的数据模型,并支持相同的函数和操作符。因此,如果您已经学习了 XPath,那么理解 XQuery 就不会有太大问题。

XQuery 的应用

XQuery 可用于以下情况:

  • 提取信息以用于 Web 服务
  • 生成摘要报告
  • 将 XML 数据转换为 XHTML
  • 搜索 Web 文档以获取相关信息

XQuery 示例

让我们通过看一个示例学习一些基本的 XQuery。

XML 示例文档

我们将在下面的示例中使用以下 XML 文档 "books.xml":

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book category="COOKING">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <!-- 其他书籍 -->
</bookstore>

如何从 "books.xml" 中选择节点?

XQuery 使用函数和路径表达式来从 XML 文档中提取数据。

函数

使用 doc() 函数来打开 "books.xml" 文件:

doc("books.xml")

路径表达式

使用路径表达式来导航 XML 元素:

doc("books.xml")/bookstore/book/title

上面的路径表达式选择了 "books.xml" 文件中的所有 title 元素。

谓词

使用谓词来限制从 XML 文档中提取的数据:

doc("books.xml")/bookstore/book[price<30]

上面的 XQuery 将提取价格小于 30 的所有书籍。

总结

XQuery 是一种强大的 XML 查询语言,可用于在 XML 文档中查找和提取信息

XQuery FLWOR 表达式

什么是 FLWOR

FLWOR 是一个缩写,代表 "For, Let, Where, Order by, Return",它是一种用于在 XQuery 中进行数据处理的表达式。

  • For:选择一系列节点。
  • Let:将一个序列绑定到一个变量。
  • Where:过滤节点。
  • Order by:对节点排序。
  • Return:返回结果(对每个节点进行一次评估)。

如何使用 FLWOR 从 "books.xml" 中选择节点?

考虑以下路径表达式:

doc("books.xml")/bookstore/book[price>30]/title

上面的表达式选择了 bookstore 元素下的 book 元素中,其 price 元素的值高于 30 的所有 title 元素。

以下 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

XQuery FLWOR + HTML

将结果显示为 HTML 列表

考虑以下 XQuery FLWOR 表达式:

<ul>
{
  for $x in doc("books.xml")/bookstore/book/title
  order by $x
  return <li>{$x}</li>
}
</ul>

上面的表达式选择了 bookstore 元素下的 book 元素中的所有 title 元素,并按字母顺序返回 title 元素。

现在我们想要在我们的书店中将所有书名列成一个 HTML 列表。我们在 FLWOR 表达式中添加了 <ul><li> 标签:

<ul>
{
  for $x in doc("books.xml")/bookstore/book/title
  order by $x
  return <li>{$x}</li>
}
</ul>

现在我们想要消除 title 元素,并只显示 title 元素内的数据:

<ul>
{
  for $x in doc("books.xml")/bookstore/book/title
  order by $x
  return <li>{data($x)}</li>
}
</ul>

结果将是一个 HTML 列表,显示了书籍的名称。

XQuery 术语

  • 节点:在 XQuery 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释和文档(根)节点。
  • 原子值:没有子节点或父节点的节点。
  • 项目:原子值或节点。
  • 节点的关系:父节点、子节点、兄弟节点、祖先节点和后代节点。

XQuery 语法

XQuery 基本语法规则

XQuery 是区分大小写的,同时要求元素、属性和变量必须是有效的 XML 名称。

  • XQuery 区分大小写。
  • XQuery 元素、属性和变量必须是有效的 XML 名称。
  • XQuery 字符串值可以使用单引号或双引号括起来。
  • XQuery 变量以 $ 开头,后跟一个名称,例如 $bookstore
  • XQuery 注释使用 (::) 进行界定,例如 (: XQuery 注释 :)

XQuery 条件表达式

XQuery 支持使用 "If-Then-Else" 表达式。

示例

for $x in doc("books.xml")/bookstore/book
return if ($x/@category="children")
       then <child>{data($x/title)}</child>
       else <adult>{data($x/title)}</adult>

在上述示例中,如果 $x/@category 的值是 "children",则返回 <child> 元素,否则返回 <adult> 元素。

XQuery 比较

在 XQuery 中,可以使用通用比较(=, !=, <, <=, >, >=)和值比较(eq, ne, lt, le, gt, ge)。

XQuery 添加元素和属性

XQuery 可以用于向结果中添加元素和属性。

示例

<html>
<body>

<h1>书店</h1>

<ul>
{
  for $x in doc("books.xml")/bookstore/book
  order by $x/title
  return <li class="{data($x/@category)}">{data($x/title)}</li>
}
</ul>

</body>
</html>

在上述示例中,根据书籍的类别向 HTML <li> 元素添加了一个类属性。

XQuery 选择和过滤

XML 示例文档

在浏览器中查看 "books.xml" 文件。

选择和过滤元素

FLWOR 表达式

FLWOR(For, Let, Where, Order by, Return)表达式是一种结构化的查询语言,用于对 XML 数据进行操作。

以下是一个 FLWOR 表达式的示例,通过选择价格大于 30 的书籍,并按标题排序:

for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title

在上述表达式中:

  • for 子句将每个书籍绑定到变量 $x
  • where 子句过滤出价格大于 30 的书籍。
  • order by 子句按标题排序结果。
  • return 子句指定返回书籍的标题。

for 子句

for 子句将一个变量绑定到由 in 表达式返回的每个项目。在同一个 FLWOR 表达式中可以有多个 for 子句。

示例:

for $x at $i in doc("books.xml")/bookstore/book/title
return <book>{$i}. {data($x)}</book>

在上述示例中,通过 at 关键字获取迭代次数,并返回带有索引的书籍标题。

let 子句

let 子句允许变量赋值,并且可以避免重复多次相同的表达式。let 子句不会导致迭代。

示例:

let $x := (1 to 5)
return <test>{$x}</test>

在上述示例中,let 子句创建变量 $x,并将其赋值为 1 到 5 的序列。

where 子句

where 子句用于指定结果的一个或多个条件:

where $x/price>30 and $x/price<100

在上述示例中,where 子句筛选出价格在 30 到 100 之间的书籍。

order by 子句

order by 子句用于指定结果的排序顺序:

order by $x/@category, $x/title

在上述示例中,order by 子句按照类别和标题对结果进行排序。

return 子句

return 子句指定要返回的内容:

return $x/title

在上述示例中,return 子句返回书籍的标题

XQuery函数

XQuery基于XPath表达式。XQuery 1.0和XPath 2.0共享相同的数据模型,并支持相同的函数和运算符。

XPath运算符

XPath函数

您还可以在XQuery中定义自己的函数

XQuery数据类型

XQuery共享与XML Schema 1.0(XSD)相同的数据类型。

  • XSD字符串

  • XSD日期

  • XSD数值

  • XSD杂项

函数调用示例

函数调用可以出现在表达式可以出现的地方。请查看下面的示例:

示例1:在元素中

<name>{`upper-case($booktitle)`}</name>

示例2:在路径表达式的谓词中

doc("books.xml")/bookstore/book[substring(title, 1, 5) = 'Harry']

示例3:在let子句中

let $name := (substring($booktitle, 1, 4))

XQuery用户定义的函数

如果找不到您需要的XQuery函数,您可以编写自己的函数。

用户定义的函数可以在查询中或在单独的库中定义。

语法

declare function prefix:function_name($parameter as datatype)
as returnDatatype
{
 ...function code here...
};

有关用户定义函数的注意事项:

  • 使用declare function关键字
  • 函数的名称必须有前缀
  • 参数的数据类型大多与XML Schema中定义的数据类型相同
  • 函数的主体必须用大括号括起来

在查询中声明的用户定义函数示例

declare function local:minPrice($p as xs:decimal?, $d as xs:decimal?)
as xs:decimal?
{
let $disc := ($p * $d) div 100
return ($p - $disc)
};

以下是如何调用上述函数的示例:

<minPrice>{`local:minPrice($book/price, $book/discount)`}</minPrice>

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注文章来源地址https://www.toymoban.com/news/detail-855073.html

到了这里,关于学习 XQuery:XML数据查询的关键的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL学习【数据类型】【权限查询表】

    整型 类型名称 取值范围 大小 TINYINT -128〜127 1个字节 SMALLINT -32768〜32767 2个宇节 MEDIUMINT -8388608〜8388607 3个字节 INT (INTEGHR) -2147483648〜2147483647 4个字节 BIGINT -9223372036854775808〜9223372036854775807 8个字节 无符号在数据类型后加 unsigned 。 浮点型 类型名称 说明 存储需求 FLOAT 单精

    2024年02月10日
    浏览(48)
  • 06.sqlite3学习——DQL(数据查询)(全)

    目录 SQLite——DQL(数据查询) 数据集 select语句 条件查询 比较 确定范围 确定集合 like 查询记录 查询不重复的记录 排序和限制 排序 限制 聚合 聚合函数 语法 SQLite Group By详解 语法 实例 SQLite Having 子句 语法 实例 多表查询 表连接 SQLite中的Join 内连接 - INNER JOIN 外连接 - OU

    2024年02月10日
    浏览(35)
  • thinkphp学习08-数据库的链式查询

    前面课程中我们通过指向符号“-”多次连续调用方法称为:链式查询,当 Db::name(‘user’)时,返回查询对象(Query),即可连缀数据库对应的方法,而每次执行一个数据库查询方法时,比如 where(),还将返回查询对象(Query),只要还是数据库对象,那么就可以一直使用指向符号进

    2024年01月21日
    浏览(38)
  • 【PostgreSQL内核学习(九)—— 查询执行(数据定义语句执行)】

    声明 :本文的部分内容参考了他人的文章。在编写过程中,我们尊重他人的知识产权和学术成果,力求遵循合理使用原则,并在适用的情况下注明引用来源。 本文主要参考了《PostgresSQL数据库内核分析》一书    数据定义语言(DDL,Data Definition Language) 是一类 用于定义数

    2024年02月16日
    浏览(45)
  • 数据库的基础学习1:select语句的查询

    数据库的三个阶段:人工管理阶段、文件系统阶段、数据库系统阶段 数据库管理系统:DBMS 常见的关系型数据库:Oracle、DB2、mysql 常见的非关系型数据库:MongoDB、redies sql的四部分: DML(update、delete、insert) DDL(create、drop、alter、truncate) DQL(select查询语句) DCL(对数据进行变

    2024年02月08日
    浏览(58)
  • 数据库学习笔记-----SQL查询语句和代码演示

    SQL不区分大小写,本文是邹兆年老师的课件和课堂的部分内容总结,部分比较细的内容请看课件 Db笔记(1).pdf 数值型: 整型:INT/SMALLINT/BIGINT        4个字节/两个字节/八个字节 浮点型:NUMERIC/DECIMAL(p,s):定点数,p位有效数字,小数点后s位                               

    2023年04月12日
    浏览(69)
  • SQL学习(六)--DML(针对数据表记录的查询操作)

    目录 一、 单表查询 小拓展: 数据准备: 1.   查询整张表的数据

    2023年04月27日
    浏览(57)
  • 【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】

    索引(index) 是帮助 MySQL 高效获取数据的数据结构(有序) 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是 索引 。 MySQL的索引是在存储引擎

    2024年02月08日
    浏览(67)
  • MySQL数据库增删改查及聚合查询SQL语句学习汇总

    目录 数据库增删改查SQL语句 MySQL数据库指令 1.查询数据库 2.创建数据库 3.删除数据库 4.选择数据库 创建表table   查看所有表 创建表 查看指定表的结构 删除表 数据库命令进行注释 增删改查(CRUD)详细说明 增加 SQL库提供了关于时间的函数:now()  查询 查询表作列与列之间进

    2024年02月09日
    浏览(86)
  • openGauss学习笔记-195 openGauss 数据库运维-常见故障定位案例-分析查询语句运行状态

    195.1 分析查询语句运行状态 195.1.1 问题现象 系统中部分查询语句运行时间过长,需要分析查询语句的运行状态。 195.1.2 处理办法 以操作系统用户omm登录主机。 使用如下命令连接数据库。 postgres为需要连接的数据库名称,8000为端口号。 设置参数track_activities为on。 当此参数为

    2024年01月15日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包