- •Лабораторная работа 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.6.3. Элементxsl:comment
Элемент-инструкция xsl:commentсоздает в результирующем дереве узел комментария. Текстом комментария становится результат выполнения шаблона, который содержится в элементеxsl:comment. Этот элемент имеет следующий синтаксис:
<xsl:comment
select="выражение"
>
<!--
Содержимое: конструктор последовательности
-->
</xsl:comment>
Необязательный атрибут selectзадает строковое значение нового текстового узла (альтернативным является задание значения нового текстового узла в конструкторе последовательности элементаxsl:comment).
В соответствии с синтаксисом XML, комментарий вXMLне может содержать символов "--" и оканчиваться на символ "-". Поэтому наличие таких последовательностей символов в тексте комментария будет являться вXSLTошибкой. Для того чтобы избежать некорректного синтаксиса, процессор может разделять два последовательных минуса пробелом (заменять "--" на "- -") или добавлять пробел после завершающего минуса комментария.
3.3.6.4. Элемент xsl:processing-instruction
Элемент xsl:processing-instructionсоздает в результирующем дереве узел инструкции по обработке и имеет следующий синтаксис:
<xsl:processing-instruction
name="имя"
select="выражение"
>
<!--
Содержимое: конструктор последовательности
-->
</xsl:processing-instruction>
Обязательный атрибут nameопределяет имя целевого приложения, которому будет адресована инструкция по обработке. В этом атрибуте может быть указано вычисляемое выражение.
Необязательный атрибут selectзадает строковое значение новой инструкции по обработке (альтернативным является задание строкового значения новой инструкции по обработке в конструкторе последовательности элементаxsl:processing-instruction).
Инструкция по обработке не может содержать последовательности символов "?>".
Если результат выполнения шаблона содержит такую комбинацию, процессор может либо выдать ошибку, либо разделить символы "?" и ">" пробелом: "? >".
Имя инструкции по обработке, должно быть корректным именем XML (но не равным при этом "xml" в любом регистре символов).
3.3.6.5. Элементxsl:namespace
Узел пространства имен создается с помощью следующей инструкции:
<xsl:namespace
name="имя"
select="выражение"
>
<!--
Содержимое: конструктор последовательности
-->
</xsl:namespace>
Обязательный атрибут nameзадает имя узла, т.е. префикс пространства имен. В этом атрибуте может быть указано вычисляемое выражение. Если в качестве значения атрибутаnameзадана пустая строка, узел пространства имен добавляется к пространству имен по умолчанию.
Необязательный атрибут selectзадает строковое значение нового пространства имен (альтернативным является задание строкового значения нового пространства имен в конструкторе последовательности элементаxsl:namespace).
3.3.7. Копирование узлов вXslt
Преобразование может включать в себя не только создание новых, но и Преобразование может включать в себя не только создание новых, но и копирование существующих узлов. Для этого можно использовать элементы xsl:copyиxsl:copy-of, а также элементxsl:sequence.
3.3.7.1. Элементxsl:copy
Элемент xsl:copyсоздает копию текущего узла вне зависимости от его типа. Вместе с текущим узлом в выходящее дерево копируются только узлы пространств имен, ассоциированные с ним. Дочерние узлы и узлы атрибутов в выходящий документ не копируются.
Элемент-инструкция xsl:copyимеет следующий синтаксис:
<xsl:copy
copy-namespaces="yes" | "no"
inherit-namespaces="yes" | "no"
use-attribute-sets="имена"
type="имя-типа"
validation="strict" | "lax" | "preserve" | "strip"
>
<!--
Содержимое: конструктор последовательности
-->
</xsl:copy>
Если xsl:copyиспользуется для копирования корневого узла или узла элемента, в выходящем документе процессор создает дочерний фрагмент дерева, являющийся результатом конструктора последовательности, содержащегося вxsl:copy. Все атрибуты этого элемента являются необязательными.
Атрибут copy-namespacesзадает ("yes") или отменяет ("no") копирование узлов пространства имен исходного элемента в результирующий элемент. По умолчанию значение этого атрибута равно "yes".
Атрибут inherit-namespacesзадает ("yes") или отменяет ("no") наследование узлов пространства имен для потомков создаваемого элемента. По умолчанию значение этого атрибута равно "yes".
Атрибут use-attribute-setsперечисляет (через пробел) имена наборов атрибутов, которые должны быть включены в копируемый элемент.
Атрибут typeзадает проверку копируемого узла документа, элемента или атрибута на соответствие типу, заданному в значении атрибута и определенному в схеме документа.
Атрибут validationопределяет действия по проверке действительности копируемого элемента. Значение "strip" этого атрибута указывает, что копируемый элемент и все содержащиеся в нем узлы должны иметь типxs:untyped. Значение "preserve" указывает, что копируемые элементы сохраняют свой тип. Значение "strict" указывает, что копируемые элементы должны строго соответствовать своему типу, определенному в схеме документа (в случае такого несоответствия выдается сообщение об ошибке). Значение "lax" аналогично значению "strict", за исключением того, что в случае несоответствия сообщения об ошибке не выдается, а копируемые элементы будут иметь типxs:untyped.
Атрибуты typeиvalidationявляются взаимоисключающими, т.е. в элементе может быть задан только один из этих атрибутов.
Содержимым xsl:copyявляется конструктор последовательности, который создается процессором и затем включается в создаваемый элемент.
