Prédicats
Un prédicat est une expression XPath qui filtre une collection de nœuds par rapport à un axe et produit une nouvelle collection de nœuds.Ce processus de filtrage implique l'évaluation séquentielle du prédicat par rapport à chaque nœud de la collection.Chaque fois que le prédicat est évalué par rapport à un nœud :
le nœud de contexte est le nœud en cours d'évaluation ;
la taille du contexte est le nombre de nœuds de la collection de nœuds en cours d'évaluation ;
la position du contexte est la position du nœud de contexte dans la collection de nœuds.
Ce dernier contexte, celui du nœud de contexte dans la collection de nœuds, se rapporte à la direction dans laquelle l'axe spécifié dans l'étape de localisation parcourt l'arborescence de documents.Généralement, un axe parcourt l'arborescence vers l'avant ou vers l'arrière :
Un axe vers l'avant contient le ou les nœuds de contexte situés après le nœud de contexte.Les axes child::, descendant::, descendant-or-self::, following:: et following-sibling:: sont des axes vers l'avant.Ces axes vers l'avant numérotent les nœuds de la collection de nœuds dans l'ordre du document, la première position étant la position 1.
Un axe vers l'arrière contient le ou les nœuds de contexte situés avant le nœud de contexte.Les axes ancestor::, ancestor-or-self::, preceding:: et preceding-sibling:: sont des axes vers l'arrière.Ces axes vers l'arrière numérotent les nœuds de la collection de nœuds dans l'ordre inverse du document, la première position étant la position 1.
Quant aux autres axes, les axes self:: et parent:: retournent un seul nœud.La qualification d'axe vers l'avant ou l'arrière n'a donc pas de sens pour ces deux axes.Aucun ordre n'est défini pour les axes attribute:: et namespaces:: ; eux non plus ne sont donc ni des axes vers l'avant ni des axes vers l'arrière.
Sélection des nœuds
Une expression de prédicat est évaluée en une valeur numérique ou booléenne.
Si le prédicat donne un nombre, XPath compare ce nombre à la position du nœud de contexte.Si le nombre et la position de contexte sont identiques (ce qui signifie que le nœud de contexte est à la position appropriée dans l'arborescence), le prédicat donne la valeur true et le nœud de contexte est inclus dans la nouvelle collection de nœuds.Sinon, le nœud de contexte est exclus de la nouvelle collection de nœuds.
Si le prédicat ne donne pas un nombre, XPath utilise la fonction boolean pour convertir le résultat en une valeur booléenne.Par exemple, le prédicat [genre='Computer'] produit une collection de nœuds.Si le nœud de contexte a un élément enfant <genre> dont le contenu est Computer, ce prédicat donne la valeur true et le nœud de contexte est inclus dans la nouvelle collection de nœuds.Sinon, le nœud de contexte est exclus de la nouvelle collection de nœuds.
Notes
Un prédicat numérique [x] est équivalent au prédicat booléen [position()=x].