パス式 (XQuery)

XQuery パス式は、ドキュメント内の要素、属性、テキストなど、ノードの位置を特定します。パス式の結果は常に、結果シーケンス内でノードが重複することなく、ドキュメント順で生成されます。パスの指定には、省略された構文と省略しない構文のいずれも使用することができます。以下の説明では、主に省略しない構文を取り上げます。省略された構文についてはこのトピックの最後で説明します。

注意注意

このトピックのサンプル クエリは xml 型の列 (ProductModel テーブルの CatalogDescription 列と Instructions 列) を対象としているので、これらの列に格納されている XML ドキュメントの内容と構造について理解しておく必要があります。詳細については、「AdventureWorks データベースの xml データ型表現」を参照してください。

パス式には、相対パスまたは絶対パスのいずれを使用することもできます。ここでは、その両方について説明します。

  • 相対パス式は、1 つまたは 2 つのスラッシュ記号 (/ または //) で区切られた 1 つ以上のステップで構成されます。たとえば、child::Features は、コンテキスト ノードの子ノードのみを Child で参照している相対パス式です。コンテキスト ノードとは、現在処理中のノードです。この式は、コンテキスト ノードの子要素ノード <Features> を取得します。

  • 絶対パス式では、1 つまたは 2 つのスラッシュ記号 (/ または //) が先頭にあり、その後に必要に応じて相対パスが続きます。たとえば、式 /child::ProductDescription の先頭のスラッシュ記号は、この式が絶対パス式であることを示しています。式の先頭のスラッシュ記号は、コンテキスト ノードのドキュメント ルート ノードを返します。したがって、この式は、ドキュメント ルートの子要素ノード <ProductDescription> のすべてを返します。

    絶対パス式の先頭が 1 つのスラッシュ記号の場合、その後に相対パスを指定することもしないことも可能です。スラッシュ記号 (/) 1 つのみを指定した場合、この式はコンテキスト ノードのルート ノードを返します。XML データ型の場合、これはドキュメント ノードになります。

パス式は、通常、ステップで構成されます。たとえば、/child::ProductDescription/child::Summaryという絶対パス式には、1 つのスラッシュ記号で区切られた 2 つのステップがあります。

  • 最初のステップは、ドキュメント ルートの子要素ノード <ProductDescription> を取得します。

  • 2 番目のステップは、取得された各 <ProductDescription> 要素ノードの子要素ノード <Summary> を取得します。これが次のコンテキスト ノードになります。

パス式のステップには、軸ステップまたは汎用ステップを使用できます。

軸ステップ

パス式の軸ステップは、次の部分で構成されます。

  • パス式のステップでの軸の指定
    移動の方向を定義します。パス式の軸ステップはコンテキスト ノードから始まり、軸ステップにより指定されている方向で到達可能なノードまで移動します。

  • パス式のステップでのノード テストの指定
    選択するノードの型またはノード名を指定します。

  • 0 個以上の述語 (省略可)。
    ノードにフィルタを適用し、一部を選択して残りを破棄します。

次の例では、パス式に軸ステップを使用しています。

  • 絶対パス式 /child::ProductDescription には、ステップが 1 つしかありません。これは、軸 (child) とノード テスト (ProductDescription) を指定しています。

  • 相対パス式 child::ProductDescription/child::Features には、1 つのスラッシュ記号で区切られた 2 つのステップがあります。どちらのステップも、child を軸に指定しています。ProductDescription と Features はノード テストです。

  • 相対パス式 child::root/child::Location[attribute::LocationID=10]には、1 つのスラッシュ記号で区切られた 2 つのステップがあります。最初のステップは、軸 (child) とノード テスト (root) を指定しています。2 番目のステップは、軸ステップの 3 種類のコンポーネントをすべて指定しています。つまり、軸 (child)、ノード テスト (Location)、および述語 ([attribute::LocationID=10]) です。

軸ステップのコンポーネントの詳細については、「パス式のステップでの軸の指定」、「パス式のステップでのノード テストの指定」、および「パス式のステップでの述語の指定」を参照してください。

汎用ステップ

汎用ステップは、評価結果がノードのシーケンスになる必要のある式です。

SQL Server の XQuery 実装は、パス式の最初のステップとして汎用ステップをサポートしています。汎用ステップを使用するパス式の例を次に示します。

(/a, /b)/c
id(/a/b)

id 関数の詳細については、「id 関数 (XQuery)」を参照してください。

このセクションの内容