Updated: 2002-11-21 19:34:33 - [ Home | Wiki Home | Index | Changes ]
ロケーションパスは、XPathの式の一種で、XMLツリーのノードを選択するために使われます。
以下は、ロケーションパスの例です。
XPathの式のうち、XMLツリーのノードの集合(ノードセット)を得るための式を、ロケーションパスと呼びます。
スタート地点として渡されたノード(コンテキストノード)から、次のノードセットを選択するまでの処理の単位を、 ステップ と呼びます。
コンテキストノード(入力) → ステップ → ノードセット(出力)
ロケーションパスは、「/」「//」で区切られた一つ以上のステップで構成されます。
ステップはさらに、 軸 、 ノードテスト 、 述部 に分解できます。
ロケーションパス −(分解)→ ステップ −(分解)→ 軸,ノードテスト,述部
ステップは、つぎのような形式で記述されます。
軸::ノードテスト[述部]
軸と述部は省略できます。
軸・ノードテスト・述部の役割の違いは、つぎのようなものです。
軸は、今選ばれているノードと、次に選びたいノードとの関係を表します。ノードテストは、名前や型のようなノード自身の性質を表します。最後に、軸やノードテストだけでは表現しきれない複雑な条件が、述部によって表現されます。
つぎのような手順でノードセットが選ばれます。
以下で、これらを詳しく見ていきます。
軸は、現在選択されているノード(コンテキストノード)と、次に選択したいノードとの関係を表します。
軸は全部で13種類あります。以下に全てを挙げます。
つぎのような省略した書き方ができます。
すべての軸は、主ノード型を持ちます。
主ノード型は、続くノードテストで名前を指定した際の結果に影響します。たとえば、主ノード型が要素型の軸を使った場合、後に続く名前は要素の名前であると判断されます。属性の名前で一致するものがあっても、その属性ノードが選ばれることはありません。
ノードテストは、軸で選ばれたノードの性質を表現します。ノードテストには、つぎのものを指定できます。
名前を指定した場合は、上で説明したとおり、軸の主ノード型と一致し、かつ名前が一致するノードが選ばれます。名前はリテラルとして(そのまま)書けます。
child::a/attribute::href
述部には、軸とノードテストだけでは表現しきれなかった、複雑な条件を指定できます。ここに記述した式が真を返したノードだけが、ステップを評価した結果のノードセットに加えられます。
述部に数字だけが書かれた場合、例えば[ 3 ]とあった場合は、[position() = 3]の略です。
ステップの区切りには、以下の2つがあります。
//は、/descendant-or-self::node()/の略です。つまり、
です。