- •Лабораторная работа 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.3. Вызов неименованных правил шаблона
Для применения правил шаблона (в которых не задан атрибут name) вXSLTиспользуется элемент-инструкцияxsl:apply-templates.
Этот элемент имеет следующий синтаксис:
<xsl:apply-templates
select="выражение"
mode="режим">
<!--
Содержимое: элементы xsl:sort или xsl:with-param
-->
</xsl:apply-templates>
Элемент xsl:apply-templatesполучает на входе последовательность узлов, соответствующих образцу, заданному в атрибутеmatchэлементаxsl:template. Необязательный атрибутselectзадает выражение, результатом которого является последовательность узлов, которая является выборкой из исходной последовательности узлов. Если атрибутselectне задан, то правила шаблона применяются ко всем дочерним узлам текущего узла, т.е. инструкция
<xsl:apply-templates/>
действует так же, как инструкция
<xsl:apply-templates select="child::node()"/>
В результате выполнения элемента xsl:apply-templatesполучается последовательность компонент, которая чаще всего добавляется к результирующей иерархической структуре.
Оба элемента xsl:templateиxsl:apply-templatesимеют необязательный атрибутmode. Если элементxsl:templateне имеет атрибутаmatch, то он не должен иметь и атрибутаmode. Если элементxsl:apply-templatesимеет атрибутmode, то он применяется только к тем правилам шаблона из элементовxsl:template, которые имеют атрибутmodeс тем же значением, либо имеют значение атрибутаmode, равное "#all". Если элементxsl:apply-templatesатрибутаmodeне имеет, то он применяется только к тем правилам шаблона из элементовxsl:template, которые также не имеют атрибутаmode, либо имеют значение атрибутаmode, равное "#default". В элементеxsl:apply-templatesсуществует два предопределенных имени режимов: "#default" (режим, действующий по умолчанию) и "#current" (текущий режим).
3.3.4. Создание узлов элементов и атрибутов вXslt
3.3.4.1. Элемент xsl:element
Каждому элементу документа XML соответствует узел элемента. Дочерними узлами узла элемента могут быть узлы его дочерних элементов, а также узлы комментариев, инструкций по обработке и текстовые узлы, которые представляют его непосредственное содержимое. Следует отметить, что узлы атрибутов не считаются дочерними узлами своего элемента, они лишь только ассоциируются с ними.
Узлы элементов в выходящем документе можно создавать с помощью литеральных элементов. Однако в тех случаях, когда требуется создать элемент с заранее неизвестным (например, вычисляемым во время выполнения) именем или создать элемент, принадлежащий пространству имен, известному обрабатывающему процессору, литеральные элементы не подходят.
Для создания элемента с вычисляемым названием используется элемент xsl:element, который имеет следующий синтаксис:
<xsl:element
name="имя"
namespace="пространство-имен"
inherit-namespaces="yes" | "no"
use-attribute-sets="имена"
type="имя-типа"
validation="strict" | "lax" | "preserve" | "strip"
>
<!--
Содержимое: конструктор последовательности
-->
</xsl:element>
Здесь обязательный атрибут nameуказывает имя создаваемого элемента. Этот атрибут может содержать шаблон значения, а значит, имя элемента может быть вычислено во время выполнения. Все остальные атрибуты элемента являются необязательными.
Атрибут namespaceуказываетURIпространства имен создаваемого элемента. Точно так же, как иname, этот атрибут может содержать шаблон значения, что позволяет вычислять пространство имен создаваемого элемента при помощи выражений.
В качестве значений атрибутов nameиnamespaceмогут быть использованы вычисляемые выражения, т.е. выражения, заключенные в фигурные скобки "{" и "}".
Атрибут inherit-namespacesзадает ("yes") или отменяет ("no") наследование узлов пространства имен для потомков создаваемого элемента. По умолчанию значение этого атрибута равно "yes".
Атрибут use-attribute-setsперечисляет (через пробел) имена наборов атрибутов, которые должны быть включены в создаваемый элемент.
Атрибут typeзадает проверку создаваемого элемента на соответствие простому или комплексному типу, заданному в значении атрибута и определенному в схеме документа.
Атрибут validationопределяет действия по проверке действительности создаваемого элемента. Значение "strip" этого атрибута указывает, что новый элемент и все содержащиеся в нем узлы должны иметь типxs:untyped. Значение "preserve" указывает, что копируемые элементы сохраняют свой тип, а создаваемые элементы будут иметь типxs:untyped. Значение "strict" указывает, что создаваемые и копируемые элементы должны строго соответствовать своему типу, определенному в схеме документа (в случае такого несоответствия выдается сообщение об ошибке). Значение "lax" аналогично значению "strict", за исключением того, что в случае несоответствия сообщения об ошибке не выдается, а создаваемые или копируемые элементы будут иметь типxs:untyped.
Атрибуты typeиvalidationявляются взаимоисключающими, т.е. в элементе может быть задан только один из этих атрибутов.
Содержимым xsl:elementявляется конструктор последовательности, который создается процессором и затем включается в создаваемый элемент.
