使用 XPath 查询

Microsoft® SQL Server™ 2000 支持带批注的 XDR 架构,使您得以创建存储在数据库中的关系数据的 XML 视图。可使用 XPath 语言的子集查询带批注的 XDR 架构所创建的 XML 视图。

XPath 查询可以被指定为 URL 的一部分或包含在模板中。映射架构确定了这一所得到的文档碎片的结构,而且值是从数据库中检索。此过程在概念上类似于使用 CREATE VIEW 语句创建视图并编写在其上执行的 SQL 查询。

说明  为理解 XPath 查询,一定要熟悉模板的概念(有关更多信息,请参见使用 XML 模板)、对 SQL Server 的 HTTP 访问(有关更多信息,请参见使用 HTTP 访问 SQL Server)、映射架构(有关更多信息,请参见使用带批注的 XDR 架构创建 XML 视图)和 World Wide Web Consortium (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 为特性节点而 Important 为文本节点。

Xpath(XML Path 语言)是一种图形导航语言。XPath 用于从 XML 文档中选择节点集。每个 XPath 运算符都根据前面的 XPath 运算符所选择的节点集选择节点集。例如,给定一组 <Customer> 节点,XPath 可选择 date 特性值为 7/14/1999 的所有 <Order> 节点。所得到的节点集包含订购日期为 7/14/1999 的所有订单。

说明  XPath 语言由 W3C 定义为标准导航语言。W3C 于 1999 年 10 月 8 日提出的 XPath 语言规范、XML Path 语言 (XPath) 1.0 版可在 W3C Web 站点上找到,网址为:http://www.w3.org/TR/1999/PR-xpath-19991008.html。SQL Server 2000 中实现的是该规范的子集。有关更多信息,请参见 XPath 查询的使用准则

支持的功能

下表显示 SQL Server 2000 中实现的 XPath 语言的功能。

功能项目到示例查询的链接
attributechildparentself在 XPath 查询中指定轴
包括连续谓词和嵌套谓词在内的布尔值谓词 在 XPath 查询中指定算术运算符
所有关系运算符=, !=, <, <=, >, >=在 XPath 查询中指定关系运算符
算术运算符+, -, *, div在 Xpath 查询中指定算术运算符
显式转换函数number()string()Boolean()在 XPath 查询中指定显式转换
布尔运算符AND, OR在 XPath 查询中指定布尔运算符
布尔函数true()false()not()在 XPath 查询中指定布尔函数
XPath 变量 在 XPath 查询中指定 XPath 变量

不支持的功能

下表显示 SQL Server 2000 中没有实现的 XPath 语言的功能。

功能项目
ancestor、ancestor-or-self、descendant、descendant-or-self (//)、following、following-sibling、namespace、preceding、preceding-sibling
数值谓词 
算术运算符mod
节点函数ancestor、ancestor-or-self、descendant、descendant-or-self (//)、following、following-sibling、namespace、preceding、preceding-sibling
字符串函数string()、concat()、starts-with()、contains()、substring-before()、substring-after()、substring()、string-length()、normalize()、translate()
布尔函数lang()
数字函数sum()、floor()、ceiling()、round()
Union 运算符|

指定 XPath 查询

XPath 查询可直接在 URL 中指定,也可在 URL 指定的模板中指定。参数可传递到直接在 URL 指定的 XPath 查询,也可传递到使用 XPath 变量的模板中指定的 XPath 查询。

URL 中的 XPath 查询

直接在 URL 中指定 Xpath 查询,例如:

http://IISServer/VirtualRoot/SchemaVirtualName/SchemaFile/XPathQuery[?root=ROOT]

指定 root 参数以提供单个顶层元素。可以为该参数指定任何值。如果查询仅返回一个元素(或者如果想接收顶层节点的集合),则不必指定该参数。

URL 中的 SchemaVirtualName 是使用用于 SQL Server 的 IIS 虚拟目录管理实用工具创建的 schema 类型的虚拟名称。有关更多信息,请参见用于 SQL Server 的 IIS 虚拟目录管理

当在 URL 中指定 XPath 查询时,注意下面 URL 特有的行为:

  • XPath 可能包含在 URL 中有特殊含义的字符,如 # 或 +。使用 URL 百分比编码转义这些字符,或在模板中指定 Xpath。例如,URL http://IISServer/VirtualRoot/VirtualName/SchemaFile/Customers[@CustomerID="#"] 在 # 符号处截断,导致一个无效的 Xpath。

  • 与特殊文件路径相似的 XPath 表达式(如 ..//)被某些浏览器解释,并在将 URL 传递到服务器之前对其进行修改。因此,包含这些表达式的 XPath 可能不会像在 URL 中预期的那样工作。例如:
    • URL http://IISServer/VirtualRoot/VirtualName/SchemaFile/Customers/.. 可能会被浏览器转换为 http://IIServer/VirtualRoot/VirtualName/SchemaFile/,这是无效的 Xpath。

    • URL http://IISServer/VirtualRoot/VirtualName/SchemaFile//Customers 可能会被浏览器转换为 http://IISServer/VirtualRoot/VirtualName/SchemaFile/Customers,这是与原来不同的 Xpath。
模板中的 XPath 查询

可在模板中写入 XPath 查询并在 URL 中指定模板。例如,下面是一个带 XPath 查询的模板:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <sql:xpath-query mapping-schema="FilePath/AnnotatedSchemaFile.xml">
    Specify the XPath query
  </sql:xpath-query>
</ROOT>

将模板文件存储在创建 template 类型的虚拟名称时所指定的目录中。有关配置虚拟根的更多信息,请参见使用用于 SQL Server 的 IIS 虚拟目录管理实用工具

下面的 URL 执行模板:

http://IISServer/VirtualRoot/VirtualName/TemplateFile.xml

在 URL 中指定的 VirtualNametemplate 类型。

说明  对于在 URL 中直接指定的 XPath 查询,不支持命名空间。如果希望在 XPath 查询中使用命名空间,则应使用 template。有关模板的更多信息,请参见使用 URL 执行模板文件

当在模板中指定 XPath 查询时,注意下列行为:

  • XPath 可能包含在 XML(模板为 XML 文档)中有特殊含义的字符,如 < 或 & 等。必须使用 XML & 编码方式对这些字符进行转义,或在 URL 中指定 XPath。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值