Выражения используются в значении определенных атрибутов у элементов, описанных в XSLT, а также – в фигурных скобках – в шаблоне для значения атрибута.
Внешнее выражение в XSLT (т.е. выражение, не являющееся частью какого-либо другого выражения) получает свой контекст следующим образом:
– узел контекста получается из текущего узла
– положение в контексте определяется положением текущего узла в текущем наборе узлов , первая позиция имеет индекс 1
– размер контекста определяется размером текущего набора узлов
– привязка переменных контекста – это привязка в пределах видимости того элемента, которому принадлежит атрибут с рассматриваемым выражением (см. [11 Переменные и параметры])
– набор деклараций пространства имён – это те декларации, в области видимости которых находится элемент, содержащий атрибут с рассматриваемым выражением. Сюда относится также неявная декларация префикса
– используемая библиотека функций формируется из основной библиотеки функций, дополнительных функций, описанных в главе [12 Дополнительные функции], а также функций расширения, описанных в главе [14 Расширения]. Если в выражении появится вызов какой-либо другой функции, зафиксируется ошибка.
5 Правила шаблона
5.1 Схема обработки
Чтобы в конечном дереве построить фрагмент, обрабатывается перечень исходных узлов. Само конечное дерево строится путем обработки набора, состоящего из одного корневого узла. Перечень исходных узлов обрабатывается посредством помещения в конечное дерево структуры, созданной путем последовательной обработки каждого члена в этом перечне. Обработка узла осуществляется путем нахождения всех правил шаблона, чей образец соответствуют этому узлу, и выбора среди них самого лучшего. Затем обрабатывается шаблон из выбранного правила, причем в качестве текущего узла берется обрабатываемый узел, а как текущий набор узлов используется обрабатываемый перечень исходных узлов. Обычно шаблон содержит инструкции, которые набирают новый набор исходных узлов для дальнейшей обработки. Процесс сравнения, подстановки и нового набора продолжается рекурсивно до тех пор, пока для обработки можно найти новые исходные узлы.
Реализация XMLT может обрабатывать исходный документ любым способом, который дает тот же результат, как если бы выполнялась обработка в соответствии с представленной моделью.
5.2 Образцы
Правило шаблона идентифицирует узлы, к которым оно будет применяться, с помощью образца. Помимо правил шаблона, образцы используются также для нумерации (см. [7.7 Нумерация]) и декларирования ключей (см. [12.2 Ключи]). Образец задает перечень условий для обрабатываемого узла. Узел, который отвечает этим условиям, шаблону соответствует, а узел, который условиям не отвечает, шаблону не соответствует. Синтаксис шаблонов является подмножеством синтаксиса выражений. В частности, в качестве шаблонов могут использоваться пути адресации, которые отвечают определенным ограничениям. Выражение, которое является образцом, обрабатывается всегда как объект типа «набор узлов». Узел соответствует образцу, если он числится в наборе узлов, полученных в результате обработки этого образца как некого выражения в неком возможном контексте. Возможные контексты – это такие контексты, чей узлом контекста является проверяемый узел или один из его предков.
Некоторые примеры шаблонов: