次の方法で共有


場所パスでの選択述語の指定 (SQLXML 4.0)

述語は、軸に関してノード セットをフィルター処理します (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 クエリでは、 childattribute は軸名です。 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 式では、 childattribute が軸の名前です。 CustomerOrder、および 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が任意のOrderShipDateと等しいOrderを持つすべての顧客を選択します。

こちらもご覧ください

注釈付き XSD スキーマの概要 (SQLXML 4.0)
クライアント側 XML 書式設定 (SQLXML 4.0)