XPath クエリ内での軸の指定 (SQLXML 4.0)
以下の例では、XPath クエリに軸を指定する方法を示します。
これらの例では、SampleSchema1.xml に格納されているマッピング スキーマに対して XPath クエリを指定しています。このサンプル スキーマの詳細については、「XPath の例で使用する注釈付き XSD スキーマのサンプル (SQLXML 4.0)」を参照してください。
例
A. コンテキスト ノードの子要素を取得する
次の XPath クエリでは、コンテキスト ノードの <Contact> 子要素をすべて選択します。
/child::Contact
このクエリでは、child
は軸で、Contact
はノード テストです。<element> は child
軸に関連付けられている主ノード型なので、Contact
が <element> ノードの場合は TRUE になります。
child
軸は既定の軸です。したがって、クエリは次のように指定できます。
/Contact
マッピング スキーマに対して XPath クエリをテストするには
サンプル スキーマ コードをコピーして、テキスト ファイルに貼り付け、SampleSchema1.xml として保存します。
次のテンプレート (XPathAxesSampleA.xml) を作成し、SampleSchema1.xml を保存したディレクトリに保存します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Contact </sql:xpath-query> </ROOT>
マッピング スキーマ (SampleSchema1.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリの相対パスです。次のように、絶対パスを指定することもできます。
mapping-schema="C:\MyDir\SampleSchema1.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を使用した、SQLXML 4.0 クエリの実行」を参照してください。
テンプレートを実行して得られる結果セットの一部を次に示します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Contact ContactID="1" LastName="Achong" FirstName="Gustavo" Title="Mr." />
<Contact ContactID="2" LastName="Abel" FirstName="Catherine" Title="Ms." />
<Contact ContactID="3" LastName="Abercrombie" FirstName="Kim" Title="Ms." />
<Contact ContactID="4" LastName="Acevedo" FirstName="Humberto" Title="Sr." />
...
</ROOT>
B. コンテキスト ノードの孫を取得する
次の XPath クエリでは、コンテキスト ノードの <Customer> 子要素の、すべての <Order> 子要素を選択します。
/child::Customer/child::Order
このクエリでは、child
は軸で、Customer
と Order
はノード テストです。<element> ノードは child 軸の主ノードなので、Customer と Order が <element> ノードの場合、これらのノード テストは TRUE になります。<Customer> に一致するノードごとに、<Orders> に一致するノードが結果に追加されます。結果セットには <Order> のみが返されます。
child 軸は既定の軸です。したがって、クエリは次のように指定できます。
/Customer/Order
マッピング スキーマに対して XPath クエリをテストするには
サンプル スキーマ コードをコピーして、テキスト ファイルに貼り付け、SampleSchema1.xml として保存します。
次のテンプレート (XPathAxesSampleB.xml) を作成し、ディレクトリに保存します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Customer/Order </sql:xpath-query> </ROOT>
マッピング スキーマ (SampleSchema1.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリの相対パスです。次のように、絶対パスを指定することもできます。
mapping-schema="C:\MyDir\SampleSchema1.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を使用した、SQLXML 4.0 クエリの実行」を参照してください。
テンプレートを実行して得られる結果セットの一部を次に示します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Order SalesOrderID="Ord-43860" SalesPersonID="280"
OrderDate="2001-08-01T00:00:00"
DueDate="2001-08-13T00:00:00"
ShipDate="2001-08-08T00:00:00">
<OrderDetail ProductID="Prod-729" UnitPrice="226.8571"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-732" UnitPrice="440.1742"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-738" UnitPrice="220.2496"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-753" UnitPrice="2576.3544"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-756" UnitPrice="1049.7528"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-758" UnitPrice="1049.7528"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-761" UnitPrice="503.3507"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-762" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-763" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-765" UnitPrice="503.3507"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-768" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-770" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
</Order>
...
</ROOT>
XPath クエリを Customer/Order/OrderDetail
として指定した場合、クエリは <Customer> と一致する各ノードからその <Order> 要素に移動し、<Order> と一致する各ノードに対して、ノード <OrderDetail> が結果に追加されます。結果セットには <OrderDetail> のみが返されます。
C. .. を使用して parent 軸を指定する
次のクエリでは、CustomerID 属性値が 1 の親 <Customer> 要素をとるすべての <Order> 要素を取得します。クエリでは、述語内に child 軸を使用して、<Order> 要素の親を検索します。
/child::Customer/child::Order[../@CustomerID="1"]
child 軸は既定の軸です。したがって、クエリは次のように指定できます。
/Customer/Order[../@CustomerID="1"]
この XPath クエリは、次の指定と同じです。
/Customer[@CustomerID="1"]/Order.
メモ : |
---|
XPath クエリ /Order[../@CustomerID="1"] を実行すると、<Order> の親が存在しないため、エラーが返されます。マッピング スキーマには <Order> を含む要素が指定されている可能性がありますが、XPath はこのような要素からは開始していないため、<Order> はこのドキュメントの最上位要素の型とみなされます。 |
マッピング スキーマに対して XPath クエリをテストするには
サンプル スキーマ コードをコピーして、テキスト ファイルに貼り付け、SampleSchema1.xml として保存します。
次のテンプレート (XPathAxesSampleC.xml) を作成し、ディレクトリに保存します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Customer/Order[../@CustomerID="1"] </sql:xpath-query> </ROOT>
マッピング スキーマ (SampleSchema1.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリの相対パスです。次のように、絶対パスを指定することもできます。
mapping-schema="C:\MyDir\SampleSchema1.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を使用した、SQLXML 4.0 クエリの実行」を参照してください。
テンプレートを実行して得られる結果セットの一部を次に示します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Order SalesOrderID="Ord-43860" SalesPersonID="280"
OrderDate="2001-08-01T00:00:00"
DueDate="2001-08-13T00:00:00"
ShipDate="2001-08-08T00:00:00">
<OrderDetail ProductID="Prod-729" UnitPrice="226.8571"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-732" UnitPrice="440.1742"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-738" UnitPrice="220.2496"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-753" UnitPrice="2576.3544"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-756" UnitPrice="1049.7528"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-758" UnitPrice="1049.7528"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-761" UnitPrice="503.3507"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-762" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-763" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-765" UnitPrice="503.3507"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-768" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-770" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
</Order>
...
</Order>
</ROOT>
D. attribute 軸を指定する
次の XPath クエリでは、CustomerID 属性の値が 1 の、コンテキスト ノードのすべての <Customer> 子要素を選択します。
/child::Customer[attribute::CustomerID="1"]
述語 attribute::CustomerID
において、attribute
は軸で、CustomerID
はノード テストです。<attribute> ノードは attribute
軸の主ノードなので、CustomerID
が attribute の場合、ノード テストは TRUE になります。
attribute
軸は省略形 (@) で指定できます。また、child
軸は既定の軸なので、クエリから省略できます。
/Customer[@CustomerID="1"]
マッピング スキーマに対して XPath クエリをテストするには
サンプル スキーマ コードをコピーして、テキスト ファイルに貼り付け、SampleSchema1.xml として保存します。
次のテンプレート (XPathAxesSampleD.xml) を作成し、SampleSchema1.xml を保存したディレクトリに保存します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> child::Customer[attribute::CustomerID="1"] </sql:xpath-query> </ROOT>
マッピング スキーマ (SampleSchema1.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリの相対パスです。次のように、絶対パスを指定することもできます。
mapping-schema="C:\MyDir\SampleSchema1.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を使用した、SQLXML 4.0 クエリの実行」を参照してください。
テンプレートを実行して得られる結果セットの一部を次に示します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customer CustomerID="1" SalesPersonID="280"
TerritoryID="1" AccountNumber="1"
CustomerType="S" Orders="Ord-43860 Ord-44501 Ord-45283 Ord-46042">
<Order SalesOrderID="Ord-43860" SalesPersonID="280"
OrderDate="2001-08-01T00:00:00"
DueDate="2001-08-13T00:00:00"
ShipDate="2001-08-08T00:00:00">
<OrderDetail ProductID="Prod-729" UnitPrice="226.8571"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-732" UnitPrice="440.1742"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-738" UnitPrice="220.2496"
OrderQty="1" UnitPriceDiscount="0" />
...
</Order>
...
</Customer>
</ROOT>