XPath 查询使用简介 (SQLXML 4.0)
XML Path 语言 (XPath) 查询可以指定作为 URL 的一部分,或在模板内指定。 映射架构决定生成的此片段的结构,值从数据库中进行检索。 从概念上来说,此过程类似于使用 CREATE VIEW 语句创建视图,然后根据视图编写 SQL 查询。
注意
若要了解 SQLXML 4.0 中的 XPath 查询,必须熟悉 XML 视图和相关的概念,如模板和映射架构。 有关详细信息,请参阅 注释化的 XSD 架构(SQLXML 4.0)简介,以及万维网联盟(W3C)定义的 XPath 标准。
XML 文档由多个节点构成,如元素节点、属性节点、文本节点等。 例如,考虑以下 XML 文档:
<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was
very satisfied</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">
<Urgency>Important</Urgency>
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>
在本文档中, <Customer> 是元素节点, cid 是属性节点, “重要” 是文本节点。
XPath 是图形导航语言,用于从 XML 文档中选择节点集。 每个 XPath 运算符根据前一个 XPath 运算符所选择的节点集来选择节点集。 例如,给定一组<客户>节点,XPath 可以选择日期属性值为“7/14/1999”的所有<订单>节点。 生成的节点集包含订单日期为 7/14/1999 的所有订单。
万维网联盟 (W3C) 将 XPath 语言规定为标准导航语言。 SQLXML 4.0 实现位于 http://www.w3.org/TR/1999/PR-xpath-19991008.html的 W3C XPath 规范的子集。
以下是 W3C XPath 实现与 SQLXML 4.0 实现之间的主要差异。
根查询
SQLXML 4.0 不支持根查询 (/)。 每个 XPath 查询都必须从架构中的顶级 <ElementType> 开始。
报告错误
W3C XPath 规范定义了无错误条件。 选择任意节点失败的 XPath 查询将返回空节点集。 在 SQLXML 4.0 中,查询可能返回多种类型的错误消息。
文档顺序
在 SQLXML 4.0 中,文档顺序并不总是确定的。 因此,未实现使用文档顺序的数字谓词和轴(如 以下)。
缺少文档顺序还表示,只有在节点映射到单行中的单列时,才能计算该节点的字符串值。 包含子元素的元素或 IDREFS 或 NMTOKENS 节点无法转换为字符串。
注意
在某些情况下,关系批注中的键字段批注或键可能会导致确定性文档顺序。 但是,这不是这些批注的主要用途。有关详细信息,请参阅 “使用 sql:key-fields(SQLXML 4.0) 标识键列”和 “使用 sql:relationship 指定关系”(SQLXML 4.0)的关系。
Data types
SQLXML 4.0 在实现 XPath 字符串、 数字和 布尔 数据类型方面存在限制。 有关详细信息,请参阅 XPath 数据类型(SQLXML 4.0)。
跨产品查询
SQLXML 4.0 不支持叉积 XPath 查询,如
Customers[Order/@OrderDate=Order/@ShipDate]
。 此查询用于选择其任意订单的 OrderDate 等于任意订单的 ShipDate 的所有客户。不过,SQLXML 4.0 支持诸如
Customer[Order[@OrderDate=@ShippedDate]]
的查询,此查询用于选择其任意订单的 OrderDate 等于其 ShipDate 的客户。错误处理和安全性
根据使用的架构和 XPath 查询表达式,Transact-SQL 错误可能会在某些条件下向用户公开。
以下部分中的表格详细列出了 SQLXML 4.0 中的 XPath 查询实现与 W3C 规范在这些方面的不同之处。
支持的功能
下表显示了 SQLXML 4.0 中实现的 XPath 语言功能。
功能 | 项 | 示例查询链接 |
---|---|---|
Axes | 属性、子轴、父轴和自轴 | 在 XPath 查询中指定轴 (SQLXML 4.0) |
包含连续谓词和嵌套谓词的布尔值谓词 | 在 XPath 查询中指定算数运算符 (SQLXML 4.0) | |
所有关系运算符 | =、!=、、<=<、>>= | 在 XPath 查询中指定关系运算符 (SQLXML 4.0) |
算数运算符 | +、-、*、div | 在 XPath 查询中指定算数运算符 (SQLXML 4.0) |
显式转换函数 | number()、 string()、 Boolean() | 在 XPath 查询中指定显式转换函数 (SQLXML 4.0) |
布尔运算符 | AND、OR | 在 XPath 查询中指定布尔运算符 (SQLXML 4.0) |
布尔函数 | true()、 false()、 not() | 在 XPath 查询中指定布尔函数 (SQLXML 4.0) |
XPath 变量 | 在 XPath 查询中指定 XPath 变量 (SQLXML 4.0) |
不支持的功能
下表显示了 SQLXML 4.0 中未实现的 XPath 语言功能。
功能 | 项 |
---|---|
Axes | 上级、或自我、后代、后代或自有(//)、关注、后同级、命名空间、上级、上级同级 |
数值谓词 | |
算数运算符 | mod |
节点函数 | 上级、或自我、后代、后代或自有(//)、关注、后同级、命名空间、上级、上级同级 |
字符串函数 | string()、concat()、starts-with()、contains()、substring-before()、substring-after()、substring()、string-length()、normalize()、translate() |
布尔函数 | 郎() |
数值函数 | sum()、 floor()、 ceiling()、 round() |
Union 运算符 | | |
在模板中指定 XPath 查询时,请注意以下行为:
- XPath 可以包含 XML 中具有特殊含义的字符 < (模板是 XML 文档)。 必须使用 XML 编码转义这些字符,或在 URL 中指定 XPath。