- •Лабораторная работа 4-03
- •3.1.2. Пространство имен xslt
- •3.1.3. Корневые элементы и элементы верхнего уровня документаXslt
- •3.1.4. Условное включение элемента
- •3.1.5. Модульная структура преобразованийXslt
- •3.1.4. Совместное использование преобразований и документов xml
- •3.2. Управление выводом в xslt
- •3.2.1. Элементxsl:output
- •3.2.2. Метод вывода "xml"
- •3.2.3. Метод вывода "xhtml"
- •3.2.4. Метод вывода "html"
- •3.2.5. Метод вывода "text"
- •3.3.Язык xslt
- •3.3.1. Образцы и шаблоны
- •3.3.2. Объявлениешаблона
- •3.3.3. Вызов неименованных правил шаблона
- •3.3.4. Создание узлов элементов и атрибутов вXslt
- •3.3.4.1. Элемент xsl:element
- •3.3.4.2. Элементxsl:attribute
- •3.3.4.3. Элементxsl:attribute-set
- •3.3.5. Создание текстовых узлов вXslt
- •3.3.5.1. Элементxsl:text
- •3.3.5.2. Элементxsl:value-of
- •3.3.5.3. Встроенные правила шаблона
- •3.3.5.4. Обработка пробельных символов
- •3.3.6. Создание узлов документа, комментариев, инструкций по обработке и пространства имен в xslt
- •3.3.6.1. Элемент xsl:document
- •3.3.6.2. Элементxsl:result-document
- •3.3.6.3. Элементxsl:comment
- •3.3.6.4. Элемент xsl:processing-instruction
- •3.3.6.5. Элементxsl:namespace
- •3.3.7. Копирование узлов вXslt
- •3.3.7.1. Элементxsl:copy
- •3.3.7.2. Элементxsl:copy-of
- •3.3.7.3. Элементxsl:sequence
- •3.3.8. Условная и циклическая обработка вXslt
- •3.3.8.1. Элементxsl:if
- •3.3.8.2. Элементы xsl:choose, xsl:when и xsl:otherwise
- •3.3.8.3. Элементxsl:for-each
- •3.3.9. Сортировка в xslt
- •3.3.10. Нумерация в xslt
- •3.3.11. Переменные и параметры в xslt
- •3.3.11.1. Переменные в xslt
- •3.3.11.2. Вызов именованных правил шаблона
- •3.3.11.3. Параметры в xslt
- •3.4. Выполнение преобразований документов в xmlSpy
- •3.4.1. Создание документа xslt
- •3.4.2. Выполнение преобразования xslt
- •4. Порядок выполнения работы
- •Вариант 5-01
- •Вариант 5-02
- •Вариант 5-03
- •Вариант 5-04
- •Вариант 5-05
- •Вариант 5-06
- •Вариант 5-07
- •Вариант 5-08
- •Вариант 5-09
- •Вариант 5-10
- •Вариант 5-11
- •Вариант 5-12
- •Вариант 5-13
- •Вариант 5-14
- •Вариант 5-15
- •Вариант 5-16
- •Вариант 5-17
- •Вариант 5-18
- •Вариант 5-19
- •Вариант 5-20
- •Вариант 5-21
- •Вариант 5-22
- •Вариант 5-23
- •Вариант 5-24
- •Вариант 5-25
- •Вариант 5-26
- •Вариант 5-27
- •Вариант 5-28
- •Вариант 5-29
- •Вариант 5-30
- •5. Содержание отчета
- •6. Вопросы для самоконтроля
3.3.Язык xslt
3.3.1. Образцы и шаблоны
Основными компонентами документа XSLT являются правила шаблона. Правило шаблона состоит из двух частей: этообразец(pattern), который сопоставляется с узлами в исходном дереве, ишаблон(template), который содержит конструктор последовательности, используемой для создания фрагментов результирующей иерархической структуры.
Преобразование в XSLTсостоит не из последовательности действий, а изнабора правил шаблона, каждое из которых обрабатывает свою часть документа XML.
Чтобы получить фрагмент результирующей структуры, шаблон обрабатывается для определенного элемента в исходной структуре. Шаблон может содержать элементы, определяющие фиксированную структуру элемента в результирующей структуре (аналог прямого конструктора в XQuery), а также элементы из пространства имен XSLT, содержащие инструкции по формированию фрагментов результирующей структуры (аналог вычисляемого конструктора в XQuery).
При поиске соответствующего правила шаблона может возникнуть ситуация, когда обрабатываемому элементу соответствует не одно, а несколько правил. В этом случае выбирается шаблон с самым большим приоритетом (если правил с самым большим приоритетом окажется несколько, генерируется ошибка).
В правиле шаблона образец задает перечень условий для обрабатываемого узла. Узел, который отвечает этим условиям, шаблону соответствует, а узел, который условиям не отвечает, шаблону не соответствует. Синтаксис шаблонов является подмножеством синтаксиса выражений XPath. В частности, в качестве шаблонов могут использоваться пути адресации, которые отвечают определенным ограничениям.
Образец для пути адресации – это некоторый путь адресации, на всех шагах которого используются лишь оси childилиattribute. Хотя образцы и не должны использовать осьdescendant-or-self, в образцах могут использоваться как оператор "//", так и оператор "/". Образцы путей адресации могут начинаться также с вызова функцийidилиkeyс фиксированным аргументом. В предикатах образца могут использоваться произвольные выражения.
В шаблонах атрибутов могут присутствовать фиксированные и вычисляемые компоненты. Вычисляемые компоненты, как и в конструкторах XQuery заключаются в фигурные скобки "{" и "}". При преобразовании эти компоненты будут вычислены и заменены своим результатом.
Если символы "{" и "}" используются в шаблонах атрибутов как обычные символы, они должны быть удвоены, т.е. заменены символами "{{" и "}}".
3.3.2. Объявлениешаблона
Объявление шаблона задается элементом xsl:template, который имеет следующий синтаксис:
<xsl:template
match="образец"
name="имя"
priority="число"
mode="режимы"
as="тип-последовательности"
>.
<!--
Содержимое: элементы xsl:param,
конструктор-последовательности
-->
</xsl:template>
Это объявление определяет шаблон, который содержит конструктор последовательности для создания набора узлов и/или атомарных значений.
Атрибут matchзадает образец узлов дерева, для которых необходимо применить преобразования. Если элементxsl:templateсодержит атрибутmatch, он называетсяправилом шаблона.
Правила шаблона вызываются при помощи инструкции xsl:apply-templates.
Объявление шаблона также может иметь имя, определяемое атрибутом name. Такое объявление называетсяименованным шаблоном.
Именованные шаблоны вызываются при помощи инструкции xsl:call-template.
Именованные шаблоны могут вызываться вне зависимости от текущего контекста, и даже вести себя как функции – принимать на вход параметры и возвращать некоторые значения.
При объявлении шаблона нужно обязательно указать хотя бы один из атрибутов matchилиname, причем эти атрибуты могут присутствовать вxsl:templateодновременно.
Атрибут modeопределяет режим или режимы обработки данного объявления шаблона. Режимы задаются как идентификаторы типаtoken, отделенные друг от друга пробелами. Режимы позволяют задавать различные преобразования для одних и тех же частей документа (имена этих режимов используются в элементеxsl:apply-templates). Существует два предопределенных имени режимов: "#default" (режим по умолчанию, действующий, когда режим не задан) и "#all" (правило действует для всех режимов).
Атрибут priorityиспользуется для определения числового значения, которое называется приоритетом шаблона (чем больше число, тем больше приоритет). Это значение используется для разрешения конфликтов шаблонов в случае, когда один узел может быть обработан различными объявлениями шаблонов.
Атрибуты объявления шаблона не влияют на выполнение его содержимого. Они используются элементами 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в теле шаблона определяют локальные параметры и переменные.
