Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ППТС-2 / Лекции / Lect4-07.doc
Скачиваний:
7
Добавлен:
12.05.2015
Размер:
332.29 Кб
Скачать

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) не имеет значения.

Соседние файлы в папке Лекции