
- •Лекция 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.4. Упрощенные преобразования
Многие простые преобразования состоят из единственного правила, которое обрабатывает корневой узел входящего документа как в следующем примере:
<xsl:stylesheet
version="l.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<result>
<!-- Шаблон -->
</result>
</xsl:template>
</xsl:stylesheet>
В XSLTможно упрощать запись таких преобразований, опуская элементыxsl:stylesheetиxsl:templateи оставляя только правило шаблона, создающий выходящий документ.
Корневой элемент упрощенной записи должен содержать атрибут xsl:version, указывающий версию языка XSLT, использованного в шаблоне. Как правило, этот элемент также содержит объявление пространства имен XSLT, хотя оно может быть определено и в другом месте.
Так, приведенное выше преобразование можно записать в упрощенном виде следующим образом:
<result
xsl:version="l.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Шаблон -->
</result >.
5.3.8. Создание узлов элементов и атрибутов вXslt
5.3.8.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является конструктор последовательности, который создается процессором и затем включается в создаваемый элемент.