次の方法で共有


ノードの関数 - namespace-uri

適用対象: SQL Server

$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が空のシーケンスの場合は、長さ 0 の文字列が返されます。

  • $argが、expanded-QName が名前空間にない要素または属性ノードである場合、関数は長さ 0 の文字列を返します。

このトピックでは、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 部分はなく、ローカル名部分のみが含まれるため、結果は長さ 0 の文字列になります。

次のクエリは、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 に変更できます。 その後、展開された QName の名前空間 URI 部分がhttps://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain<ProductDescription>要素のすべての要素ノードの子を受け取ります。

実装の制限事項

制限事項は次のとおりです。

  • namespace-uri()関数は、xs:anyURI ではなく xs:string 型のインスタンスを返します。

参照

ノード上の関数
local-name 関数 (XQuery)