3. ロケーションパス (2)
XPath 3章 ロケーションパス (2)
3.1 ロケーションステップ前回ロケーションパスの簡略な記述方法を説明しましたが、今回はロケーションパスの詳細な記述方法について説明します。 簡略な方法においてもロケーションパスは "/" で区切られた形で表されましたが、詳細な記述方法においてもその点は変わりません。実は、ロケーションパスは "/" で区切られた 1つ以上のロケーションステップと呼ばれる単位からなっています。そして、詳細な方法によるとロケーションステップは以下の 3つのパートからなります。
ロケーションステップの構文は、軸名とノードテストが二重コロンで区切られ、その後に述語が続きます。述語は大括弧で囲まれた式の形で表されます。よってロケーションステップは、軸::ノードテスト[式] の形で表されることになります。ただし、述語 ([式] の部分) は必ずしも必要ではなく、また、2個以上の述語を付加することもできます。 次に、具体例を挙げ簡略な方法と詳細な方法によるロケーションパスを比較します。 //track[2]/text() 前回、上に示したようなロケーションパスを取り上げましたが、これを詳細な記述方法によると以下のようになります。
次節からロケーションステップの必須要素である軸とノードテストを詳しくみていくことにします。 3.2 軸 (Axes)軸とは、ロケーションステップを使用して選択するノードとコンテキストノードとの間のツリー上の位置関係を指定するもののことをいいます。言い換えると、ロケーションステップを使用して選択するノードがコンテキストノードからみて、どのようなノードの集合に属するかを指定するもの、となるでしょうか。軸をうまく使うことにより簡略な記述方法ではできなかったこともできるようになります。軸には次のようなものがあります。
子孫ノードとは、子ノードまたは子ノードの子ノードなどのことをいいます。したがって descendant 軸に属性ノードや名前空間ノードが含まれることはありません。また、祖先ノードとは、親ノードまたは親ノードの親ノードなどのことをいいます。したがってコンテキストノードがルートノードの場合以外は、ancester 軸は常にルートノードも含むことになります。 一つの XML 文書は(属性ノードと名前空間ノードをのぞいて) ancestor, descendant, following, preceding, self の軸によって分割されます。つまりこれらの軸には重なる部分はなく、すべて一緒にすると XML 文書内のすべてのノードを指定することになり、これを図で表すと以下のようになります。 ![]() 上の図に含まれていない child, parent, following-sibling, preceding-sibling, attribute の軸を図示すると以下のようになります。 ![]() |
![]()
![]()
|