
- •Лекция 4-07
- •Тема 5.3. Языки xslt и xsl
- •Тема 5.3. Языки xslTиXsl
- •5.3.1. Связывание документовXmLс таблицами стилей
- •5.3.2. Язык xsLи его компоненты
- •5.3.3. Преобразование документа с помощьюXslt
- •5.3.3.1. Технология преобразования
- •5.3.3.2. Процессоры xslt
- •5.3.4. Структура документаXslt
- •5.3.4.1. Пространство именXslt
- •5.3.4.2. Корневые элементы и элементы верхнего уровня документаXslt
- •5.3.4.3. Условное включение элемента
- •5.3.4.4. Модульная структура преобразованийXslt
- •5.3.4.4.1. Включение внешних файлов
- •5.3.4.4.2. Импорт внешних файлов
- •5.3.4.4.3. Использование сущностей
- •5.3.4.4.4. Импорт схем
- •5.3.5. Совместное использование преобразований и документовXml
- •5.3.6. Управление выводом вXslt
- •5.3.6.1. Элементxsl:output
- •5.3.6.2. Метод вывода "xml"
- •5.3.6.3. Метод вывода "xhtml"
- •5.3.6.4. Метод вывода "html"
- •5.3.6.5. Метод вывода "text"
- •5.3.7. Правила шаблона вXslt
- •5.3.7.1. Образцы и шаблоны
- •5.3.7.2. Объявлениешаблона
- •5.3.7.3. Вызов неименованных правил шаблона
- •5.3.7.4. Упрощенные преобразования
- •5.3.8. Создание узлов элементов и атрибутов вXslt
- •5.3.8.1. Элементxsl:element
- •5.3.8.2. Элементxsl:attribute
- •5.3.8.3. Элементxsl:attribute-set
5.3.7.2. Объявлениешаблона
Объявление шаблона задается элементом xsl:template, который имеет следующий синтаксис:
<xsl:template
match="образец"
name="имя"
priority="число"
mode="режимы"
as="тип"
>.
<!--
Содержимое: элементы xsl:param,
конструктор-последовательности
-->
</xsl:template>
Это объявление определяет шаблон, который содержит 0 и более элементов xsl:param, а также конструктор последовательности для создания набора узлов и/или атомарных значений.
Все атрибуты элемента xsl:templateявляются необязательными.
Атрибут matchзадает образец узлов дерева, для которых необходимо применить преобразования. Если элементxsl:templateсодержит атрибутmatch, он называетсяправилом шаблона.
Правила шаблона вызываются при помощи инструкции xsl:apply-templates.
Объявление шаблона также может иметь имя, определяемое атрибутом name. Такое объявление называетсяименованным шаблоном.
Именованные шаблоны вызываются при помощи инструкции xsl:call-template.
Именованные шаблоны могут вызываться вне зависимости от текущего контекста, и даже вести себя как функции – принимать на вход параметры и возвращать некоторые значения.
При объявлении шаблона нужно обязательно указать хотя бы один из атрибутов matchилиname, причем эти атрибуты могут присутствовать вxsl:templateодновременно. Если атрибутmatchне задан, атрибутыpriorityиmodeигнорируются.
Атрибут priorityиспользуется для определения числового значения, которое называется приоритетом шаблона (чем больше число, тем больше приоритет). Это значение используется для разрешения конфликтов шаблонов в случае, когда один узел может быть обработан различными объявлениями шаблонов. Если атрибут неpriorityзадан, используются довольно сложные правила приоритета по умолчанию, зависящие от выражения в атрибутеmatch. Упрощенно можно считать, что более точно определенный образец имеет более высокий приоритет, чем менее точно определенный, т.е. правило с образцом "/message/header" имеет более высокий приоритет, чем правило "//header".
Атрибут modeопределяет режим или режимы обработки данного объявления шаблона. Режимы задаются как идентификаторы типаtoken, отделенные друг от друга пробелами. Режимы позволяют задавать различные преобразования для одних и тех же частей документа (имена этих режимов используются в элементеxsl:apply-templates). Существует два предопределенных имени режимов: "#default" (режим по умолчанию, действующий, когда режим не задан) и "#all" (правило действует для всех режимов).
Атрибут as задает тип возвращаемого функцией значения (один из типовXPath2.0). Если этот атрибут задан, результат выполнения конструктора последовательности преобразуется к заданному типу. Если такое преобразование невозможно, генерируется сообщение об ошибке. Если атрибутas не задан, преобразование результата не выполняется и тип элементов результата по умолчанию становитсяitem(), что предполагает любой тип.
Атрибуты объявления шаблона не влияют на выполнение его содержимого. Они используются элементами xsl:apply-templatesиxsl:call-templateпри выборе шаблонов. Правила, которые были импортированы в преобразование, вызываются могут быть вызваны элементомxsl:apply-imports.
В правиле шаблоне можно использовать не только элементы языка XSLT, но и строковые (литеральные) элементы.
Когда процессор выполняет правило шаблона, содержащее литеральные элементы, для них в результирующем документе создаются элементы с тем же расширенным именем и атрибутами, содержимым которых является результат выполнения содержимого литерального элемента в преобразовании, т.е. литеральные элементы выводятся в результирующий документ без изменений; но их содержимое при этом все же выполняется.
Помимо литеральных элементов тело правила шаблона может также содержать следующие элементы XSLT, называемыеинструкциями:
xsl:apply-imports;
xsl:apply-templates;
xsl:attribute;
xsl:call-template;
xsl:choose;
xsl:comment;
xsl:copy;
xsl:copy-of;
xsl:element;
xsl:fallback;
xsl:for-each;
xsl:if;
xsl:message;
xsl:number;
xsl:param;
xsl:processing-instruction;
xsl:text;
xsl:value-of;
xsl:variable.
Элементы xsl:paramиxsl:variableв теле шаблона определяют локальные параметры и переменные.