
- •Лекция 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.8.2. Элементxsl:attribute
Атрибутам того или иного элемента соответствуют узлы атрибутов. Считается, что узел элемента является родителем узла своего атрибута, но вместе с тем узел атрибута не является дочерним узлом узла его элемента. Такая ситуация отличает дерево документа в XSLTот дерева вDOM– отношение между элементом и атрибутом не является отношением наследования, а отношением ассоциации. Говорят, что узел атрибута ассоциируется с узлом элемента.
Узел атрибута задается конструкцией вида:
<xsl:attribute
name="имя"
namespace="пространство-имен"
select="выражение"
separator?="строка"
type="имя-типа"
validation="strict" | "lax" | "preserve" | "strip"
>
<!--
Содержимое: конструктор последовательности
-->
</xsl:attribute>
Использование элементов xsl:attributeиxsl:elementво многом аналогично. Обязательный атрибутnameзадает имя атрибута, а все остальные атрибуты также являются необязательными.
Атрибут namespaceзадаетURIпространства имен создаваемого атрибута.
Атрибут selectзадает строковое значение нового атрибута (альтернативным является задание значения атрибута в конструкторе последовательности элементаxsl:attribute).
Атрибут separatorзадает символы-разделители между элементами сгенерированной последовательности при их преобразовании в результирующее строковое значение. По умолчанию таким разделителем является одиночный пробел. Если в качестве разделителя задана пустая строка, разделителей между элементами не будет.
В качестве значений атрибутов name,namespaceиseparatorмогут быть использованы вычисляемые выражения, т.е. выражения, заключенные в фигурные скобки "{" и "}".
Атрибут typeзадает проверку создаваемого атрибута на соответствие простому или комплексному типу, заданному в значении атрибута и определенному в схеме документа.
Атрибут validationопределяет действия по проверке действительности создаваемого узла документа. Значение "strip" этого атрибута указывает, что новый атрибут должен иметь типxs:untypedAtomic. Значение "preserve" указывает, что копируемые атрибуты сохраняют свой тип, а создаваемые атрибуты будут иметь типxs:untypedAtomic. Значение "strict" указывает, что создаваемые и копируемые атрибуты должны строго соответствовать своему типу, определенному в схеме документа (в случае такого несоответствия выдается сообщение об ошибке). Значение "lax" аналогично значению "strict", за исключением того, что в случае несоответствия сообщения об ошибке не выдается, а создаваемые или копируемые атрибуты будут иметь типxs:untypedAtomic.
Атрибуты typeиvalidationявляются взаимоисключающими, т.е. в элементе может быть задан только один из этих атрибутов.
Если атрибут создается в элементе, который уже имеет атрибут с таким же именем, старый атрибут будет переопределен новым значением.
Использование элемента xsl:attributeимеет следующие основные особенности:
атрибуты могут создаваться только в узлах элементов (если атрибут создается в узле, который не является узлом элемента, процессор может либо выдать ошибку, либо проигнорировать создаваемый атрибут);
атрибуты могут содержать только текстовые узлы (процессор может либо выдать ошибку, либо проигнорировать нетекстовые узлы);
узлы атрибутов должны быть первыми узлами, которые создаются в элементах (XSLT не разрешает создавать атрибуты после того, как в элемент включены дочерние узлы других типов);
элемент не может использоваться для генерации объявлений пространств имен;
элемент не может создавать атрибуты, имена которых имеют префикс xmlns;
в случае, когда документ преобразуется в другой документ XML, символы перевода строки в элементе заменяются символьными сущностями.
Элемент xsl:attributeможет быть использован в содержимом любого из следующих родителей:
литерального элемента результата;
элемента xsl:element;
элемента xsl:copyв случае, если текущий, копируемый узел является элементом;
элемента xsl:attribute-setв случае определения именованного набора атрибутов.
Элемент xsl:attributeобычно используется, если:
требуется создать атрибут с не известным заранее именем или пространством имен;
требуется создать атрибут в пространстве имен, которое является для процессора значащим (например, в пространстве имен XSLT);
требуется создать атрибут, вычисление значения которого не может быть реализовано одним или несколькими выражениями XPath(например, условный вывод атрибута).