パス式 - 省略構文の使用

適用対象:SQL Server

「XQuery のパス式を理解する」のすべての例では、パス式に対して説明されていない構文が使用されています。 パス式の軸ステップの省略構文では、軸名とノード テストを 2 つのコロン (::) で区切り、その後にステップ修飾子を指定します。ステップ修飾子は、指定しなくてもかまいません。

次に例を示します。

child::ProductDescription[attribute::ProductModelID=19]  

XQuery は、パス式で次の省略をサポートしています。

  • 軸は既定の軸です。 したがって、式のステップから child:: 軸を省略できます。 たとえば、 /child::ProductDescription/child::Summary は として /ProductDescription/Summary記述できます。

  • 属性軸は @と省略できます。 たとえば、 /child::ProductDescription[attribute::ProductModelID=10] は として /ProudctDescription[@ProductModelID=10]記述できます。

  • /descendant-or-self::node()/ は // と省略できます。 たとえば、 /descendant-or-self::node()/child::act:telephoneNumber は として //act:telephoneNumber記述できます。

    前のクエリでは、Contact テーブルの AdditionalContactInfo 列に格納されているすべての電話番号が取得されます。 AdditionalContactInfo のスキーマは、telephoneNumber> 要素が<ドキュメント内の任意の場所に表示されるように定義されています。 したがって、すべての電話番号を取得するには、ドキュメント内のすべてのノードを検索する必要があります。 検索は、ドキュメントのルートから開始され、続いてすべての子孫ノードが検索されます。

    次のクエリは、特定の顧客の連絡先のすべての電話番号を取得します。

    SELECT AdditionalContactInfo.query('             
                declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes";             
                declare namespace crm="https://schemas.adventure-works.com/Contact/Record";             
                declare namespace ci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo";             
                /descendant-or-self::node()/child::act:telephoneNumber             
                ') as result             
    FROM Person.Contact             
    WHERE ContactID=1             
    

    パス式を省略形の構文 に置き換えると、 //act:telephoneNumber同じ結果が得られます。

  • ステップの self::node() は、1 つのドット (.) に省略できます。 ただし、ドットは self::node() と等価または交換可能ではありません。

    たとえば、次のクエリでは、ドットを使用して、ノードではなく値を表しています。

    ("abc", "cde")[. > "b"]  
    
  • ステップの parent::node() は、二重ドット (..) に省略できます。