Язык преобразований XSL

       

Образцы


Правило шаблона идентифицирует узлы, к которым оно будет применяться, с помощью образца. Помимо правил шаблона, образцы используются также для нумерации (см. ) и декларирования ключей (см. ). Образец задает перечень условий для обрабатываемого узла. Узел, который отвечает этим условиям, шаблону соответствует, а узел, который условиям не отвечает, шаблону не соответствует. Синтаксис шаблонов является подмножеством синтаксиса выражений. В частности, в качестве шаблонов могут использоваться пути адресации, которые отвечают определенным ограничениям. Выражение, которое является образцом, обрабатывается всегда как объект типа "набор узлов". Узел соответствует образцу, если он числится в наборе узлов, полученных в результате обработки этого образца как некого выражения в неком возможном контексте. Возможные контексты - это такие контексты, чей узлом контекста является проверяемый узел или один из его предков.

Некоторые примеры шаблонов:

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, в образцах могут использоваться как оператор //, так и оператор /. Образцы путей адресации могут начинаться также с вызова функций или с фиксированным аргументом. В предикатах образца могут использоваться произвольные выражения так это происходит в предикатах пути адресации.


Содержание раздела