基于节点的函数 - 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 部分而只有本地名称部分,因此结果是长度为零的字符串。
以下查询针对“指令类型化 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
的所有元素节点。 命名空间 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 https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain
的命名空间 URI 部分的元素的所有元素节点子><ProductDescription
级。
实现限制
限制如下:
- namespace-uri() 函数返回类型为 xs:string 而不是 xs:anyURI 的实例。