述語
述語は XPath 式であり、ノード セットを 1 つの軸に対してフィルターして、新しいノード セットを生成します。 フィルター処理では、ノード セット中の各ノードに対して、述語を評価してゆきます。 ノードに対して述語を評価するたびに、次のようになります。
コンテキスト ノードは現在評価されているノード。
コンテキスト サイズは、評価中のノードセットのノード数。
コンテキスト位置は、ノードセット中のコンテキスト ノードの位置。
この最後のコンテキスト、ノードセット中のコンテキスト ノードは、ロケーション ステップ中で指定された軸がドキュメント ツリーを移動する方向に関係します。 通常、軸はツリーを順方向か逆方向のいずれかに移動します。
順方向軸は、コンテキスト ノードまたはコンテキスト ノード以降のノードを含む軸です。 child::、descendant::、descendant-or-self::、following::、および following-sibling:: 軸は順方向軸です。 これらの順方向軸では、ノードセット内のノードは、最初の位置 1 から開始して、ドキュメントの順に番号が付けられます。
逆方向軸は、コンテキスト ノードまたはコンテキスト ノードの前のノードを含む軸です。 ancestor::、ancestor-or-self::、preceding::、および preceding-sibling:: 軸は逆方向軸です。 これらの逆方向軸では、ノードセット内のノードは、最初の位置 1 から開始して、ドキュメントの逆順に番号が付けられます。
残りの軸、self:: および parent:: 軸は単一のノードを返します。 そのため、これらの 2 つの軸では順方向や逆方向の方向は意味がありません。 attribute:: 軸および namespaces:: 軸には順番が定義されていないので、これらも順逆の軸のいずれでもありません。
ノードの選択
述語の式は、数値か論理値に評価されます。
述語が数値に評価されると、XPath はその数値をコンテキスト ノードのコンテキスト位置と比較します。 数値と位置が等しければ (つまり、コンテキスト ノードがツリー内の適切な位置にある)、述語は True として評価され、そのコンテキスト ノードは新しいノードセットにインクルードされます。 それ以外の場合は、コンテキスト ノードが新しいノード セットから除外されます。
述語が結果として数値にならなければ、XPath は boolean 関数を使用して結果をブール値に変換します。 たとえば述語 [genre='Computer'] はノードセットとなります。 コンテキスト ノードに内容 Computer を持つ <genre> 子要素があると、この述語は True に評価され、コンテキスト ノードが新しいノードセットにインクルードされます。 それ以外の場合は、コンテキスト ノードが新しいノード セットから除外されます。
注意
数値の述語 [x] は論理述語 [position()=x] と等価です。