述語は、軸に関してノード セットをフィルター処理します (SELECT ステートメントの WHERE 句に似ています)。 述語は角かっこの間で指定されます。 フィルター処理するノード セット内の各ノードについて、述語式はそのノードをコンテキスト ノードとして評価し、ノードセット内のノードの数をコンテキスト サイズとして評価します。 述語式がそのノードに対して TRUE に評価された場合、ノードは結果のノード セットに含まれます。
XPath では、位置ベースのフィルター処理も可能です。 数値に評価される述語式は、その序数ノードを選択します。 たとえば、場所のパス Customer[3]
は、3 番目の顧客を返します。 このような数値述語はサポートされていません。 ブール値の結果を返す述語式のみがサポートされています。
注
XPath のこの XPath 実装の制限事項と、XPath と W3C 仕様の違いについては、「 XPath クエリの使用の概要 (SQLXML 4.0)」を参照してください。
選択述語: 例 1
次の XPath 式 (場所パス) は、現在のコンテキスト ノードから、値が ALFKI の CustomerID 属性を持つすべての <Customer> 要素の子から選択します。
/child::Customer[attribute::CustomerID="ALFKI"]
この XPath クエリでは、 child
と attribute
は軸名です。
Customer
はノード テストです (Customer
が <element ノードの場合は TRUE><element> はchild
軸のプリンシパル ノード タイプであるため)。
attribute::CustomerID="ALFKI"
は述語です。 述語では、attribute
は軸であり、CustomerID
はノード テストです (<attribute> が軸の主要ノードの種類であるため、CustomerID がコンテキスト ノードの属性である場合は TRUEattribute
)。
省略構文を使用して、XPath クエリを次のように指定することもできます。
/Customer[@CustomerID="ALFKI"]
選択述語: 例 2
次の XPath 式 (場所パス) は、現在のコンテキスト ノードから、値が 1 の SalesOrderID 属性を持つすべての<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]
この例では、<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]
このクエリでは、OrderDate
が任意のOrder
のShipDate
と等しいOrder
を持つすべての顧客を選択します。