Предикаты
Оси делятся на прямые и обратные. Ось, содержащая лишь текущий узел контекста или те узлы, которые следуют за ним, называется прямой осью (forward axis). Ось, содержащая текущий узел контекста или те узлы, которые предшествуют ему, называется обратной осью (reverse axis). Таким образом, оси ancestor, ancestor-or-self, preceding и preceding-sibling являются обратными осями, а все остальные - прямыми. Поскольку ось self всегда содержит не более одного узла, то нет разницы, является ли она прямой или обратной. Положение близости (proximity position) по отношению к оси для какого-либо члена в наборе узлов определяется как положение узла в наборе, когда последний выстроен в соответствии с порядком следования узлов в документе, если ось является прямой, или в обратном порядке, если ось является обратной. Первая позиция имеет номер 1.
Для получения нового набора предикат фильтрует имеющийся набор узлов, отталкиваясь от оси. Каждый узел в исходном наборе, подлежащем фильтрации, поочередно становится узлом контекста и для него проверяется . При этом в качестве размера контекста используется количество узлов в исходном наборе, а в качестве положения в контексте берется к оси. Если для данного узла оценивается как true, то этот узел попадает во вновь создаваемый набор узлов, в противном случае узел туда не попадает.
Проверка сводится к обработке и приведению результата к булевому значению. Если результатом обработки является число, оно будет преобразовано в true, если соответствует положению узла в контексте. В противном случае оно преобразуется в false. Если же результат обработки не является числом, то он будет приведен к булевому значению как при вызове функции . Таким образом, путь адресации para[3] равнозначен para[position()=3].