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)的实例。