local-name 関数 (XQuery)

$arg の名前のローカル部分を xs:string で返します。名前のローカル部分は長さゼロの文字列となるか、xs:NCName 形式の名前になります。引数を指定しない場合の既定値はコンテキスト ノードです。

構文

fn:local-name() as xs:string
fn:local-name($arg as node()?) as xs:string

引数

  • $arg
    ローカル名部分を取得するノード名。

解説

  • SQL Server では、引数を指定しないで fn:local-name() を使用できるのは、コンテキスト依存の述語のコンテキストの場合だけです。具体的には、角かっこ ([ ]) 内でしか使用できません。
  • 引数に空のシーケンスを指定すると、関数は長さゼロの文字列を返します。
  • 対象ノードに名前がない場合、そのノードはドキュメント ノード、コメント、またはテキスト ノードなので、関数は長さゼロの文字列を返します。

このトピックでは、AdventureWorks データベースのさまざまな xml 型列に格納される XML インスタンスに対する XQuery の例について説明します。これらの各列の概要については、「AdventureWorks データベースの xml データ型表現」を参照してください。

A. 特定のノードのローカル名を取得する

次のクエリは、型指定されていない XML インスタンスに対して指定されています。クエリ式 local-name(/ROOT[1]) は、指定されたノードのローカル名部分を取得します。

declare @x xml
set @x='<ROOT><a>111</a></ROOT>'
SELECT @x.query('local-name(/ROOT[1])')
-- result = ROOT

次のクエリは、ProductModel テーブルの型指定された xml 型の列である Instructions 列に対して指定されています。式 local-name(/AWMI:root[1]/AWMI:Location[1]) は、指定されたノードのローカル名 Location を返します。

SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;
     local-name(/AWMI:root[1]/AWMI:Location[1])') as Result
FROM Production.ProductModel
WHERE ProductModelID=7
-- result = Location

B. 述語で引数を指定せずに local-name を使用する

次のクエリは、ProductModel テーブルの型指定された xml 型の列である Instructions 列に対して指定されています。式は、QName のローカル名部分が "Location" である <root> 要素のすべての子要素を返します。local-name() 関数を述語で指定し、引数はありません。そのため、コンテキスト ノードが使用されます。

SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;
  /AWMI:root//*[local-name() = "Location"]') as Result
FROM Production.ProductModel
WHERE ProductModelID=7

このクエリは、<root> 要素のすべての <Location> 子要素を返します。

参照

関連項目

ノードの関数

概念

namespace-uri 関数 (XQuery)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手