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 が含まれていない要素または属性ノードである場合、この関数は長さゼロの文字列を返します。
例
このトピックでは、AdventureWorks2008R2 データベースのさまざまな xml 型の列に格納されている XML インスタンスに対して実行する XQuery の例について説明します。これらの各列の概要については、「AdventureWorks2008R2 データベースの 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=19l
結果の一部を次に示します。
<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 型のインスタンスを返します。