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