Образец должен отвечать грамматике Pattern. Pattern представляет собой набор образцов для путей адресации, разделенных символом |. Образец для пути адресации – это некий путь адресации, на всех шагах которого используются лишь оси child или attribute. Хотя образцы и не должны использовать ось descendant-or-self, в образцах могут использоваться как оператор //, так и оператор /. Образцы путей адресации могут начинаться также с вызова функций id или key с фиксированным аргументом. В предикатах образца могут использоваться произвольные выражения так это происходит в предикатах пути адресации.
Образцы
[1]
Pattern
::=
| Pattern '|' LocationPathPattern
[2]
LocationPathPattern
::=
'/' RelativePathPattern ?
| IdKeyPattern (('/' | '//') RelativePathPattern )?
| '//'? RelativePathPattern
[3]
IdKeyPattern
::=
'id' '(' Literal ')'
| 'key' '(' Literal ',' Literal ')'
[4]
RelativePathPattern
::=
| RelativePathPattern '/' StepPattern
| RelativePathPattern '//' StepPattern
[5]
StepPattern
::=
ChildOrAttributeAxisSpecifier NodeTest Predicate *
[6]
ChildOrAttributeAxisSpecifier
::=
AbbreviatedAxisSpecifier
| ('child' | 'attribute') '::'
Считается что узел соответствует образцу тогда и только тогда, когда есть такой возможный контекст, что если с этим контекстом данный образец обрабатывать как выражение, то этот узел будет среди полученного набора узлов. Когда узел соответствует образцу, то для возможных контекстов используется узел контекста, которому соответствует либо сам этот элемент, либо какой-либо предок этого узла, а контекстный набор узлов содержит только этот узел контекста.
Например, образец