ロケーション パスでの選択述語の指定 (SQLXML 4.0)
適用対象: SQL Server Azure SQL Database
述語は、SELECT ステートメントの WHERE 句と同様に、軸についてノード セットをフィルター選択するものです。 述語はかっこで囲みます。 フィルター選択されたノード セットの各ノードに対し、ノードをコンテキスト ノード、ノード セット内のノード数をコンテキストのサイズとして、述語式が評価されます。 述語式が TRUE と評価された場合、そのノードは結果のノード セットに含められます。
XPath では、位置に基づくフィルター選択を行うこともできます。 数値として評価される述語式を使用すると、その序数に対応するノードが選択されます。 たとえば、ロケーション パス Customer[3]
では、3 番目の顧客が返されますが、 このような数値述語はサポートされていません。 サポートされているのは、ブール値の結果を返す述語式のみです。
Note
XPath のこの XPath 実装の制限事項と、XPath と W3C 仕様の違いについては、「 XPath クエリの使用に関する概要 (SQLXML 4.0)」を参照してください。
選択述語: 例 1
次の XPath 式 (場所パス) は、ALFKI の値を持つ CustomerID 属性を持つすべての <Customer> 要素の子を現在のコンテキスト ノードから選択します。
/child::Customer[attribute::CustomerID="ALFKI"]
この XPath クエリでは、child
と attribute
は軸名で、 Customer
はノード テストです ( Customer
が <要素ノードの場合は TRUE>、 <element> は child
軸のプリンシパル ノード タイプであるため)。 attribute::CustomerID="ALFKI"
は述語です。 述語では、 attribute
は軸であり、 CustomerID
はノード テストです ( CustomerID がコンテキスト ノードの属性である場合、 <attribute> は attribute 軸のプリンシパル ノード 型であるため)。
省略構文を使用した場合、XPath クエリは次のように指定できます。
/Customer[@CustomerID="ALFKI"]
選択述語: 例 2
次の XPath 式 (場所パス) は、現在のコンテキスト ノードから、SalesOrderID>属性を持つすべての<Orderの孫から値 1 を選択します。
/child::Customer/child::Order[attribute::SalesOrderID="1"]
この XPath 式では、child
と attribute
は軸名で、 Customer
、Order
、および SalesOrderID
はノード テストです。 attribute::OrderID="1"
は述語です。
省略構文を使用した場合、XPath クエリは次のように指定できます。
/Customer/Order[@SalesOrderID="1"]
選択述語: 例 3
次の XPath 式 (場所パス) は、現在のコンテキスト ノードから、1 つ以上の <ContactName> 子を持つすべての <Customer> 子から選択します。
child::Customer[child::ContactName]
この例では、 <ContactName> が XML ドキュメントの <Customer> 要素の子要素であり、注釈付き XSD スキーマでは 要素中心のマッピング と呼ばれます。
この XPath 式では、child
が軸名で、 Customer
はノード テストです ( Customer
が <element> ノードの場合は TRUE、 <element> は child
軸の主ノード タイプであるため)。 child::ContactName
は述語です。 述語では、 child
は軸であり、 ContactName
はノード テストです ( ContactName
が <element> ノードの場合は TRUE)。
この式は、<ContactName>要素の子を持つコンテキスト ノードの <Customer> 要素の子のみを返します。
省略構文を使用した場合、XPath クエリは次のように指定できます。
Customer[ContactName]
選択述語: 例 4
次の XPath 式は、 <ContactName> 要素の子を持たないコンテキスト ノードの子 <Customer> 要素を選択します。
child::Customer[not(child::ContactName)]
この例では、 <ContactName> が XML ドキュメントの <Customer> 要素の子要素であり、ContactName フィールドがデータベースに必要ないことを前提としています。
この例では、child
は軸で、 Customer
はノード テストです ( Customer
が <element> ノードの場合は TRUE)。 not(child::ContactName)
は述語です。 述語では、 child
は軸であり、 ContactName
はノード テストです ( ContactName
が <element> ノードの場合は TRUE)。
省略構文を使用した場合、XPath クエリは次のように指定できます。
Customer[not(ContactName)]
選択述語: 例 5
次の XPath 式は、現在のコンテキスト ノードから、CustomerID 属性を持つすべての<Customer>子から選択します。
child::Customer[attribute::CustomerID]
この例では、 child
は軸であり、 Customer
はノード テストです ( Customer
が <element> ノードの場合は TRUE)。 attribute::CustomerID
は述語です。 述語では、 attribute
は軸、 CustomerID
は述語です ( CustomerID
が <attribute> ノードの場合は TRUE)。
省略構文を使用した場合、XPath クエリは次のように指定できます。
Customer[@CustomerID]
選択述語 : 例 6
Microsoft SQLXML 4.0 には、次の例に示すように、述語にクロス積を含む XPath クエリのサポートが含まれています。
Customer[Order/@OrderDate=Order/@ShipDate]
このクエリでは、Order
の OrderDate
が任意の ShipDate
の Order
と等しいすべての顧客が選択されます。
参照
注釈付き XSD スキーマの概要 (SQLXML 4.0)
クライアント側の XML 書式設定 (SQLXML 4.0)