namespace-uri 函數 (XQuery)
傳回在 $arg 中指定為 xs:string 的 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 是一個元素或屬性節點,而其擴充 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 部份,而只有本機名稱部份,所以結果是長度為零的字串。
以下查詢是針對已指定 Instructions 類型的 xml 資料行而指定。運算式 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()
以下查詢是針對已指定 CatalogDescription 類型的 xml 資料行而指定。運算式會將命名空間 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。接著,您將會收到 <ProductDescription> 元素的所有元素節點子系,而該元素之擴充 QName 的命名空間 URI 部份為 https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain。
實行限制
限制如下:
- namespace-uri() 函數會傳回類型 xs:string 的執行個體,而非 xs:anyURI 的執行個體。