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 が名前空間に expanded-QName が含まれていない要素または属性ノードである場合、この関数は長さゼロの文字列を返します。

このトピックでは、AdventureWorks データベースのさまざまな xml 型列に格納されている XML インスタンスに対して実行される XQuery の例を紹介します。これらの各列の概要については、「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 に変更できます。その場合、展開された QName の URI 名前空間部分が https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain である <ProductDescription> 要素のすべての子要素ノードが取得されます。

実装の制限事項

制限事項を次に示します。

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

関連項目

参照

概念