ノードの関数 - 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 型のインスタンスを返します。