目次へ

3. ロケーションパス (2)

3.1 ロケーションステップ

前回ロケーションパスの簡略な記述方法を説明しましたが、今回はロケーションパスの詳細な記述方法について説明します。

簡略な方法においてもロケーションパスは "/" で区切られた形で表されましたが、詳細な記述方法においてもその点は変わりません。実は、ロケーションパスは "/" で区切られた 1つ以上のロケーションステップと呼ばれる単位からなっています。そして、詳細な方法によるとロケーションステップは以下の 3つのパートからなります。

選択するノードとコンテキストノードとの間のツリー上の位置関係を指定する
ノードテスト 選択するノードのノード型と名前を指定する
述語 選択するノードの集合を、任意の式を使用してさらに細かく選別する

ロケーションステップの構文は、軸名とノードテストが二重コロンで区切られ、その後に述語が続きます。述語は大括弧で囲まれた式の形で表されます。よってロケーションステップは、軸::ノードテスト[式] の形で表されることになります。ただし、述語 ([式] の部分) は必ずしも必要ではなく、また、2個以上の述語を付加することもできます。

次に、具体例を挙げ簡略な方法と詳細な方法によるロケーションパスを比較します。

//track[2]/text()

前回、上に示したようなロケーションパスを取り上げましたが、これを詳細な記述方法によると以下のようになります。

location path

次節からロケーションステップの必須要素である軸とノードテストを詳しくみていくことにします。

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 文書内のすべてのノードを指定することになり、これを図で表すと以下のようになります。

axes

上の図に含まれていない child, parent, following-sibling, preceding-sibling, attribute の軸を図示すると以下のようになります。

image

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp
  • シナジーマーケティング研究開発グループブログ
Loading