[1] 【XPath】 文脈節からの相対的な位置を表す位置経路のことを、そのままですが相対位置経路 (relative location path) といいます。
相対位置経路は、1つ以上の位置段階が区切子
/
で区切られた形になってます。
まず最初の位置段階をその文脈で評価し、 その結果を新しい文脈として更に次の位置段階で評価します。 これを最後の位置段階まで繰り返して、 残った節の集合が与えられた相対位置経路の評価結果になります。
[2] たとえば、次の XML 文書断片を考えます。
<context> <p id="p1"> <q id="q1"> <r id="r1"></r> <r id="r2"></r> <q id="q2"> <r id="r3"></r> </q> </q> <p id="p2"> <q id="q3"> <r id="r4"/> </q> </p> <q id="q4"> </q> <q id="q5"> <r id="r5"/> </q> </p> </context>
context 要素を文脈節として、 child:p/child:q/child:r を評価することを考えます。
まず、最初の位置段階である child:p
を評価します。ここで、軸 child
は子要素を選択することを意味します。
そこで context 要素の子要素で型名が
p であるものを探します。
すると要素 p1 が見つかります。
次に、得られた結果である要素 p1 を文脈節として、二番目の位置段階である child:q を評価します。 同様に子要素を眺めると、該当する節は3つ見つかります。
そして、三番目の位置段階 child:r を評価します。まず、 q1 を文脈節にしてみると、2つの節が見つかります。
次に、 q4 を文脈節にしてみます。 ところが、 child:r に合致する節は見つかりません。
最後になりますが、 q5 を文脈節にします。 該当する節は1つあります。
ということで、以上の結果を総合すると、
従って、 child:p/child:q/child:r
を評価すると、節集合
{r1, r2, r5}
が得られます。
[WSP] 段階 *(("/" / "//") 段階) [WSP]
というだけのことです。更に絶対位置経路も含めれば、 位置経路 := 1*(段階区切子 段階) / "/" / 段階; 段階区切子 := "/" / "//"
ともっと単純にかけます。