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