namespace-uri 函数 (XQuery)

将 $arg 中指定的 QName 的命名空间 URI 返回为 xs:string。

语法

fn:namespace-uri() as xs:string
fn:namespace-uri($arg as node()?) as xs:string

参数

  • $arg
    将检索其命名空间 URI 部分的节点名称。

备注

  • 如果省略该参数,则默认值为上下文节点。

  • 在 SQL Server 中,没有参数的 fn:namespace-uri() 仅可以用于依赖于上下文的谓词的上下文中。特别要指出的是,它只能在方括号 ([ ]) 内使用。

  • 如果 $arg 为空序列,则返回长度为零的字符串。

  • 如果 $arg 是其展开的 QName 不在命名空间中的元素或属性节点,则该函数将返回长度为零的字符串。

示例

本主题提供了一些对 XML 实例的 XQuery 示例,这些实例存储在 AdventureWorks 数据库内不同的 xml 类型列中。有关这些列的概述,请参阅 AdventureWorks 数据库中的 xml 数据类型表示形式

A. 检索特定节点的命名空间 URI

下面的查询是针对非类型化的 XML 实例指定的。查询表达式 (namespace-uri(/ROOT[1])) 将检索指定节点的命名空间 URI 部分。

set @x='<ROOT><a>111</a></ROOT>'
SELECT @x.query('namespace-uri(/ROOT[1])')

由于指定的 QName 没有命名空间 URI 部分而只有本地名称部分,因此结果是长度为零的字符串。

对类型为 xml 的 Instructions 列指定了以下查询。表达式 (namespace-uri(/AWMI:root[1]/AWMI:Location[1])) 将返回 <root> 元素的第一个 <Location> 子元素的命名空间 URI。

SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;
     namespace-uri(/AWMI:root[1]/AWMI:Location[1])') as Result
FROM Production.ProductModel
WHERE ProductModelID=7

结果如下:

https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions

B. 在谓词中使用没有参数的 namespace-uri()

对类型为 xml 的 CatalogDescription 列指定了以下查询。表达式将返回其命名空间 URI 为 https://www.adventure-works.com/schemas/OtherFeatures 的所有元素节点。指定没有参数的命名空间 uri() 函数,并使用上下文节点。

SELECT CatalogDescription.query('
declare namespace p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
   /p1:ProductDescription//*[namespace-uri() = "https://www.adventure-works.com/schemas/OtherFeatures"]
') as Result
FROM Production.ProductModel
WHERE ProductModelID=19

以下是部分结果:

<p1:wheel xmlns:p1="https://www.adventure-works.com/schemas/OtherFeatures">High performance wheels.</p1:wheel>
<p2:saddle xmlns:p2="https://www.adventure-works.com/schemas/OtherFeatures">
  <p3:i xmlns:p3="http://www.w3.org/1999/xhtml">Anatomic design</p3:i> and made from durable leather for a full-day of riding in comfort.</p2:saddle>
…

可以将以前查询中的命名空间 URI 更改为 https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain。然后,检索其展开的 QName 的命名空间 URI 部分为 https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain 的 <ProductDescription> 元素的所有子元素节点。

实现限制

限制如下:

  • namespace-uri() 函数将返回类型 xs:string(而不是 xs:anyURI)的实例。