ロケーション パスの指定 (SQLXML 4.0)
XPath クエリは式の形式で指定され、式の種類にはさまざまなものがあります。ロケーション パスは、コンテキスト ノードに相対的なノードのセットを選択する式です。ロケーション パスを評価すると、結果はノード セットになります。
ロケーション パスの種類
ロケーション パスは、次のいずれかの形式で指定できます。
- 絶対ロケーション パス
絶対ロケーション パスは、ドキュメントのルート ノードから開始します。構成要素はスラッシュ記号 (/) で、その後に相対ロケーション パスを続けることもできます。スラッシュ記号 (/) によって、ドキュメントのルート ノードが選択されます。 - 相対ロケーション パス
相対ロケーション パスは、ドキュメントのコンテキスト ノードから開始します。構成要素は連続する 1 つ以上のロケーション ステップで、区切りにはスラッシュ記号 (/) を使用します。各ステップで、コンテキスト ノードに対して相対的なノードのセットが選択されます。最初のステップでは、コンテキスト ノードに対して相対的なノードのセットが選択され、そのセットの各ノードが次のステップのコンテキスト ノードとして使用されます。そのステップで指定されたノードのセットは結合されます。たとえば、child::Order/child::OrderDetail と指定すると、コンテキスト ノードの <Order> 子要素の <OrderDetail> 子要素が選択されます。メモ : SQLXML 4.0 における XPath の実装では、XPath が明示的に絶対として指定されていない場合でも、各 XPath クエリはルート コンテキストから開始します。たとえば、"Customer" で開始する XPath クエリは "/Customer" として扱われます。Customer[Order] という XPath クエリでは、Customer はルート コンテキストで開始しますが、Order は Customer コンテキストで開始します。詳細については、「XPath クエリの使用について (SQLXML 4.0)」を参照してください。
ロケーション ステップ
ロケーション パス (絶対または相対) は、次の 3 つの部分から成るロケーション ステップで構成されます。
- 軸
軸によって、ロケーション ステップで選択されるノードと、コンテキスト ノードの間のツリー リレーションシップが指定されます。サポートされる軸は、parent、child、attribute、および self 軸です。ロケーション パスに child 軸を指定した場合、クエリで選択されるすべてのノードはコンテキスト ノードの子です。parent 軸を指定した場合、選択されるノードはコンテキスト ノードの親ノードです。attribute 軸を指定した場合、選択されるノードはコンテキスト ノードの属性です。 - ノード テスト
ノード テストによって、ロケーション ステップで選択されるノードの型が決まります。すべての軸 (child、parent、attribute、および self) には主ノード型があります。attribute 軸の場合、主ノード型は <attribute> です。parent、child、および self 軸の場合、主ノード型は <element> です。
たとえば、ロケーション パスで child::Customer と指定すると、コンテキスト ノードの <Customer> 子要素が選択されます。child 軸の主ノード型は <element> なので、Customer が <element> ノードの場合、ノード テスト Customer は TRUE になります。 - 選択述語 (0 以上)
述語では、軸に関してノード セットをフィルタ選択します。XPath 式内に選択述語を指定するときには、SELECT ステートメント内に WHERE 句を指定するときのように、述語をかっこで囲みます。選択述語に指定したテストを適用すると、そのノード テストによって返されたノードがフィルタ選択されます。次に、フィルタ選択されたノード セットの各ノードに対し、ノードをコンテキスト ノード、ノード セット内のノード数をコンテキストのサイズとして、述語式が評価されます。述語式が TRUE と評価された場合、そのノードは結果のノード セットに含められます。
ロケーション ステップの構文では、軸名とノード テストを 2 つのコロン (::) で区切り、その後に式をそれぞれ角かっこで囲んで指定します。式は指定しなくてもかまいません。たとえば、XPath 式 (ロケーション パス) に child::Customer[@CustomerID='ALFKI'] と指定すると、まず、コンテキスト ノードのすべての <Customer> 子要素が選択され、次に、述語内のテストがノード セットに適用されます。その結果、CustomerID 属性に 'ALFKI' という属性値が指定されている <Customer> 要素ノードだけが返されます。
ロケーション パスの例
- 軸の指定 (SQLXML 4.0)
軸を指定する例を示します。
- ロケーション パスでのノード テストの指定 (SQLXML 4.0)
ノード テストを指定する例を示します。
- ロケーション パスでの選択述語の指定 (SQLXML 4.0)
選択述語を指定する例を示します。