除a元素以外的所有其它元素
//f/self::*
所有f的自身元素
f元素本身
//f/ancestor-or-self::*
所有f元素及它的祖先节点元素
f元素、f元素的父节点c元素和a元素
/a/c/descendant-or-self::*
所有a元素→c元素及它们的后代元素
id值为c2的c元素、该元素的子元素b、d、f元素
/a/c/following-sibling::*
a元素→c元素的紧邻的后序所有兄弟节点元素
没有任何属性的e元素
/a/c/preceding-sibling::*
a元素→c元素的紧邻的前面所有兄弟节点元素
id值为b1和b2的两个b元素
/a/b/c/following::*
a元素→b元素→c元素的后序的所有元素
id为b2的b元素、无属性的c元素、无属性的b元素、id为d2的d元素、无属性的f元素、无属性的e元素。
/a/c/preceding::*
a元素→c元素的前面的所有元素
id为b2的b元素、id为e2的e元素、id为e1的e元素、id为d1的d元素、name为b的b元素、id为c1的c元素、id为b1的b元素
条件匹配
条件匹配就是利用一些函数的运算结果的布尔值来匹配符合条件的节点。常用于条件匹配的函数有四大类:节点函数、字符串函数、数值函数、布尔函数。例如前面提到的last()、position()等等。这些功能函数可以帮助我们精确寻找需要的节点。
函数及功能
作用
count()功能
统计计数,返回符合条件的节点的个数
number()功能
将属性的值中的文本转换为数值
substring() 功能
语法:substring(value, start, length)
截取字符串
sum()功能
求和
这些功能只是xpath语法中的一部分,还有大量的功能函数没有介绍,而且目前xpath的语法仍然在不断发展中。通过这些函数我们可以实现更加复杂的查询和操作。
以上这些匹配方法中,用得最多的还要数路径匹配。依靠给出相对于当前路径的子路径来定位节点的。
xquery----xml时代的革命性数据查询语言(曾毅)
在以文档和数据为中心的环境里,xml自从诞生之后,迅速得到来自各方技术联盟以及研究机构的支持与关注。现在,许多厂商开发的应用程序都使用xml来传送消息(如soap或者xml-rpc消息)或者作为数据的永久性存储(如xml数据库)。在关系型数据库中的数据查询语言sql,xquery将成为xml时代的主流数据查询语言。
xquery概览
自从计算机网络普及后,互联网便成为了人们获取信息的重要手段之一,随着技术的日新月异,人们在互联网上查询数据的需求也愈加强烈,鉴于非结构性数据的查询工作以及关系数据库自身的缺陷,人们需要一种更优化的数据查询语言,xquery以其良好的设计和强大的功能扮演了这个角色。
xquery是一个从xml格式的文档中获取数据的查询语言,起源于xml数据查询语言 quilt。并将xpath版本2.0作为其子集。quilt有很多非常优秀的特性,集 sql, odmg, xpath1.0, xql,以及xml-ql的诸多特性于一身,然而随着存储在xml文档中的信息量的增长,对于能高效的存取和查询xml的信息,quilt显示出了它的不足。于是全新的xquery数据查询语言诞生了。
xquery 规范启动于 1998 年由 w3c 发起的查询语言波士顿专题讨论会,与会的成员对xml的使用应当划分为两类,第一类是将 xml 主要作为文档使用的人,第二类是将 xml作为数据使用的人。来自业界、学术界和研究团体的受邀代表利用这个机会发表了各自的看法,阐述了他们认为重要的 xml 查询语言的特性和需求。讨论会之后成立了query language working group(查询语言工作组)。这个工作组很庞大,由 30 多个成员公司构成,xml 查询语言标准很好地代表了两类使用者的需求和观点。
虽然1998年xquery规范化工作就已经启动,但是由于xml应用领域的差异,这项工作花费的时间是相当漫长的。直到2001年2月,工作组的发布工作开始大踏步地进行,大量的文档开始推出。在2001年6月和12月、2002年8月和11月、和2003年5月进行了重要更新。在2003年5月加入了一个xquery序列化和两个全文相关的工作草案后,12个文档基本完成,工作草案正在接近收尾工作。这12份重要的文档包括:
xml query requirements(最新版本发布于2003年11月12日)
此文档施工作组的规划文档。xquery 需求列表。
xml query use cases(最新版本发布于2003年11月12日)
此文档提供了解决特定问题的几个实际方案和 xquery 代码片段。
xquery 1.0: an xml query language(最新版本发布于2003年11月12日)
此文档是工作草案中的核心文档,介绍语言本身,以及对大多数其他内容的概述。
xquery 1.0 and xpath 2.0 data model(最新版本发布于2003年11月12日)
此文档是xml 信息集的扩展。描述查询实现必须理解的数据项和形式语义的基础。
xquery 1.0 and xpath 2.0 formal semantics(最新版本发布于2003年11月12日)
此文档从形式上定义语言的底层代数。
xml syntax for xquery 1.0 (xqueryx) (最新版本发布于2003年12月19日)
此文档为喜欢使用 xml 的人提供的另一种语法。任何地方的机器都可以使用。
xquery 1.0 and xpath 2.0 functions and operators version 1.0(最新版本发布于2003年11月12日)
此文档描述了schema 数据类型、 xquery 节点和节点序列的基本函数和操作符。
xml path language (xpath) 2.0 (最新版本发布于2003年11月12日)
此文档是一个单独分离出来的xpath 文档。
xpath requirements version 2.0 (最新版本发布于2003年8月22日)
此文档是xpath 的需求文档。
xslt 2.0 and xquery 1.0 serialization(最新版本发布于2003年11月12日)
此文档介绍了xslt 2.0和xquery 1.0的详细情况。
xml query and xpath full-text requirements (最新版本发布于2003年5月2日)
此文档描述了full-text recommendation 需要达到的功能需求。
xml query and xpath full-text use cases (最新版本发布于2003年2月14日)
此文档提供了full-text 规范预期能够处理的实际情况。
xquery规范工作草案,至笔者截稿之日最新的版本是:2003年11月12日的版本,可以通过下面的地址获得最新的工作草案 http://www.w3.org/tr/xquery/。
xquery的模块结构
xquery模块包括三个部分:名字空间和模式声明,函数定义,查询表达式。其中模式声明和函数定义不是必需的。
(1)名字空间的定义类似于:namespace xs = “http://www.w3.org/2001/xmlschema”
(2)函数定义的概念对于程序设计人员并不陌生,下面就是一个函数定义的实例(后面我们还会用到这个例子):
define function depth(element $e) returns xs:integer
{
{-- an empty element has depth 1 --}
{-- otherwise, add 1 to max_u100 ?epth of children --}