基于节点的函数 - 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 部分为 的元素的所有元素节点子级<>ProductDescription
。https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain
实现限制
限制如下:
- namespace-uri () 函数返回 xs:string 类型的实例,而不是 xs:anyURI。