
- •Лекция 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.4. Структура документаXslt
5.3.4.1. Пространство именXslt
Для того чтобы выделить элементы и атрибуты, которые принадлежат языку XSLT, в этом языке применяется механизм пространств имен. Это означает, что в документе преобразования элементы, относящиеся к XSLT, должны принадлежать его пространству имен.
Уникальный идентификатор ресурса пространства имен XSLT имеет следующий вид:
http://www.w3.org/1999/XSL/Transform
Общепринятым префиксом пространства имен языка XSLT является префикс xsl. Таким образом, объявление пространства имен XSLT в общем случае будет выглядеть следующим образом:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
Помимо элементов языка в документе XSLTмогут быть заданы следующие компоненты:
функции языка XPath 2.0 (идентификатор ресурса пространства имен – http://www.w3.org/2005/xpath-functions, префикс – fn);
данные языка XPath 2.0 (идентификатор ресурса пространства имен – http://www.w3.org/2005/xpath-datatypes, префикс – xdt);
элементы схемы XML (идентификатор ресурса пространства имен –http://www.w3.org/2001/XMLSchema, префикс – xs);
встроенные атрибуты схемы XML (идентификатор ресурса пространства имен –http://www.w3.org/2001/XMLSchema-instance, префикс – xsi);
специальные атрибуты XML: xml:lang,xml:spaceиxml:id(идентификатор ресурса пространства имен –http://www.w3.org/XML/1998/namespace, префикс – xml).
Поскольку спецификацией XSLT допустимы расширения языка, то для компонент расширений также необходимо задавать свои пространства имен.
5.3.4.2. Корневые элементы и элементы верхнего уровня документаXslt
За исключением случаев упрощенных преобразований, корневым элементом документа XSLT всегда является элемент xsl:stylesheetили его синонимxsl:transform. Эти элементы имеют следующий синтаксис:
<xsl:stylesheet
id="идентификатор"
extension-element-prefixes="префиксы"
exclude-result-prefixes="префиксы"
version
xpath-default-namespace="URI"
default-validation = "preserve" | "strip"
default-collation="список-URI"
input-type-annotations = "preserve" | "strip" |
"unspecified"
>
<!--
Содержимое: элементы xsl:import, элементы верхнего уровня
-->
</xsl:stylesheet>
<xsl:transform
id="идентификатор"
extension-element-prefixes="префиксы"
exclude-result-prefixes="префиксы"
version="число"
xpath-default-namespace="URI"
default-validation="preserve" | "strip"
default-collation="список-URI"
input-type-annotations="preserve" | "strip" |
"unspecified"
>
<!--
Содержимое: элементы xsl:import, элементы верхнего уровня
-->
</xsl:transform>
Элементы xsl:stylesheetиxsl:transformимеют обязательный атрибутversion, в котором указывается версия языка, использованная при создании этого преобразования (допустимыми являются значения1.0или2.0).
Необязательный атрибут idможет содержать уникальный идентификатор данного преобразования. Этот атрибут используется в тех случаях, когда преобразование включено в преобразуемый документ для его идентификации внутри этого документа.
Необязательный атрибут extension-element-prefixesперечисляет префиксы пространств имен, которые определяют элементы расширения.
Необязательный атрибут exclude-result-prefixesперечисляет префиксы пространств имен, определения которых не нужно включать в выходной документ.
Необязательный атрибут xpath-default-namespaceзадает пространство имен для элементов и типов данных, используемых в выражениях XPath при преобразовании данных, а также в некоторых других случаях, например в выражениях шаблонов. При задании этого атрибута соответствующие элементы и типы данных записываются выражениях XPath без префикса.
Необязательный атрибут default-validationзадает значение по умолчанию атрибутаvalidationв инструкцияхxsl:document,xsl:element,xsl:attribute,xsl:copy,xsl:copy-ofиxsl:result-document, а также значение по умолчанию атрибутаxsl:validationво всех литеральных элементах результирующей структуры документа. Если для атрибутаdefault-validationзадано значение"strip"(это значение по умолчанию), то проверка соответствия документа своей схеме, т.е. проверка действительности документа, пропускается. Если задано значение"preserve", такая проверка выполняется.
Необязательный атрибут default-collationзадает правила по умолчанию для сравнения данных в выражениях XPath преобразования. Значением этого атрибута является список разделенных пробелами URI, содержащих соответствующие правила сравнения.
Необязательный атрибут input-type-annotationsзадает правило сохранения типов данных исходного документа в выходном документе. Иногда необходимо, чтобы структура выходного документа была одинаковой, независимо от того, проверялся ли входной документ на соответствие своей схеме или нет. Для этого необходимо заменить типы всех элементов наxsl:untyped, а типы всех атрибутов наxsl:untypedAtomic. Такое изменение выполняется, если для атрибутаinput-type-annotationsзадано значение"strip". Если задано значение"preserve", типы данных сохраняются. По умолчанию атрибут имеет значение"unspecified", т.е. изменение типа данных не определено.
Элементы верхнего уровня делятся на две категории: объявления (определены в пространстве имен XSLT) и элементы, определенные пользователем в других пространствах имен.
На верхнем уровне можно использовать следующие объявления:
xsl:import;
xsl:import-schema;
xsl:include;
xsl:strip-space;
xsl:preserve-space;
xsl:output;
xsl:key;
xsl:decimal-format;
xsl:namespace-alias;
xsl:attribute-set;
xsl:character-map;
xsl:variable;
xsl:function;
xsl:param;
xsl:template.
Все перечисленные элементы кроме xsl:variableиxsl:paramдолжны находиться только на верхнем уровне. Элементыxsl:variableиxsl:paramмогут использоваться как объявления (на верхнем уровне), так и в качестве инструкций в шаблонах, определяя локальные переменные и параметры.
Если преобразование импортирует внешние модули, первыми дочерними элементами xsl:stylesheet(xsl:transform) должны быть элементыxsl:import. Порядок всех остальных дочерних элементовxsl:stylesheet(xsl:transform) не имеет значения.