基于节点的函数 - namespace-uri

适用于:SQL Server

以 xs:string 形式返回 在 $arg 中指定的 QName 的命名空间 URI。

语法

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

参数

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

备注

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

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

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

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

示例

本主题提供针对存储在 AdventureWorks 数据库中各种 xml 类型列中的 XML 实例的 XQuery 示例。

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

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

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

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

针对 Instructions 类型化的 xml 列指定以下查询。 表达式 namespace-uri(/AWMI:root[1]/AWMI:Location[1])返回元素的第一个Location><元素子元素的<root>命名空间 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 的所有元素节点。 namespace-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 部分为 的元素的所有元素节点子级<>ProductDescriptionhttps://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain

实现限制

限制如下:

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

另请参阅

节点上的函数
local-name 函数 (XQuery)