Образцы
Правило шаблона идентифицирует узлы, к которым оно будет применяться, с помощью образца. Помимо правил шаблона, образцы используются также для нумерации (см. ) и декларирования ключей (см. ). Образец задает перечень условий для обрабатываемого узла. Узел, который отвечает этим условиям, шаблону соответствует, а узел, который условиям не отвечает, шаблону не соответствует. Синтаксис шаблонов является подмножеством синтаксиса выражений. В частности, в качестве шаблонов могут использоваться пути адресации, которые отвечают определенным ограничениям. Выражение, которое является образцом, обрабатывается всегда как объект типа "набор узлов". Узел соответствует образцу, если он числится в наборе узлов, полученных в результате обработки этого образца как некого выражения в неком возможном контексте. Возможные контексты - это такие контексты, чей узлом контекста является проверяемый узел или один из его предков.
Некоторые примеры шаблонов:
para соответствует любому элементу para
* соответствует любому элементу
chapter|appendix соответствует любому элементу chapter и любому элементу appendix
olist/item соответствует любому элементу item с родителем olist
appendix//para соответствует любому элементу para, предком которого является элемент appendix
/ соответствует корневому узлу
text() соответствует любому текстовому узлу
processing-instruction() соответствует любой инструкции обработки
node() соответствует любому узлу за исключением узла атрибута и корневого узла
id("W11") соответствует элементу с уникальным ID W11
para[1] соответствует любому элементу para, который для своего родителя будет первым непосредственным потомком являющимся элементом para
*[position()=1 and self::para] соответствует любому элементу para, являющемуся для своего родителя первым непосредственным элементом-потомком
para[last()=1] соответствует любому элементу para, который является для своего родителя единственным непосредственным потомком para
items/item[position()>1] соответствует любому элементу item, который имеет родителя items, но не является для этого родителя первым непосредственным потомком item
item[position() mod 2 = 1] будет иметь значение true для любого элемента item, который является нечетным непосредственным потомком item своего родителя.
div[@class="appendix"]//p соответствует любому элементу p, предком которого является элемент div, имеющий атрибут class со значением appendix
@class соответствует любому атрибуту class (но не любому элементу, имеющему атрибут class)
@* соответствует любому атрибуту
Образец должен отвечать грамматике . представляет собой набор образцов для путей адресации, разделенных символом |. Образец для пути адресации - это некий путь адресации, на всех шагах которого используются лишь оси child или attribute. Хотя образцы и не должны использовать ось descendant-or-self, в образцах могут использоваться как оператор //, так и оператор /. Образцы путей адресации могут начинаться также с вызова функций или с фиксированным аргументом. В предикатах образца могут использоваться произвольные выражения так это происходит в предикатах пути адресации.