述語

述語は 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 に評価され、コンテキスト ノードが新しいノードセットにインクルードされます。 それ以外の場合は、コンテキスト ノードが新しいノード セットから除外されます。

ms256205.note(ja-jp,VS.100).gif注 :
数値の述語 [x] は論理述語 [position()=x] と等価です。

参照

リファレンス

ロケーション ステップ

ノードのテスト