Технология XSLT — страница 12 из 66

Структура преобразования

Пространство имен XSLT

Для того чтобы выделить элементы и атрибуты, которые принадлежат логической схеме XSLT, в этом языке применяется механизм пространств имен. Это означает, что в документе преобразования элементы, относящиеся к XSLT, должны принадлежать его пространству имен.

Уникальный идентификатор ресурса пространства имен XSLT имеет вид

http://www.w3.org/1999/XSL/Transform

Как отмечалось ранее, по адресу, указанному в URI пространства имен, совершенно необязательно будет находиться что-либо осмысленное. Однако в нашем случае по адресу

http://www.w3.org/1999/XSL/Transform
находится текстовый документ, содержащий единственную строчку:

This is the XSLT namespace.

Символ

1999
в URI пространства имен XSLT никак не соотносится с версией языка преобразования. Это просто год, который был назначен Консорциумом W3 данной спецификации и не более. Версия использованного языка определяется атрибутом
version
элемента
xsl:stylesheet
.

Общепринятым префиксом пространства имен языка XSLT является префикс

xsl
. Естественно, он может быть любым другим, но в этой книге мы будем использовать именно такое обозначение. Таким образом, объявление пространства имен XSLT в общем случае будет выглядеть следующим образом:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

Пример

Приведем пример простого преобразования, в котором объявлено пространство имен XSLT.

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">



В некоторых случаях исходный текст намного упрощается, если пространство имен XSLT объявляется по умолчанию:

 version="1.0"

 xmlns="http://www.w3.org/1999/XSL/Transform">



Кроме этого, пространство имен по умолчанию можно снова обнулить:

 version="1.0"

 xmlns="http://www.w3.org/1999/XSL/Transform">



В последнем случае элемент

root
будет принадлежать нулевому пространству имен. Результат всех трех преобразований одинаков:

Элементы XSLT могут содержать атрибуты, принадлежащие другим, но обязательно ненулевым, пространствам имен. Такие атрибуты могут содержать дополнительную информацию, но поскольку они не относятся к XSLT, обрабатываться процессором в общем случае они не будут.

Пример

Если мы определим в преобразовании элемент вида

 xmlns:xsldoc="http://www.a.com/XSL/doc">

 ...

то в общем случае атрибут

xsldoc:text
будет проигнорирован. Однако процессор, которому знакомо пространство имен с URI
http://www.a.com/XSL/doc
сможет понять, что этот атрибут применен для документирования преобразования и будет использовать его в своих целях.

Корневые элементы преобразования

За исключением случаев упрощенных преобразований, корневым элементом XSLT-документа всегда является элемент

xsl:stylesheet
или его синоним
xsl:transform
. Эти элементы полностью идентичны и различаются только именами, поэтому мы будем описывать семантику и пользоваться только элементом
xsl:stylesheet
.

Элементы xsl:stylesheet и xsl:transform

 id="идентификатор"

 extension-element-prefixes="префиксы"

 exclude-result-prefixes="префиксы"

version="число">


 extension-element-prefixes="префиксы"

 exclude-result-prefixes="префиксы"

version="число">

Элемент

xsl:stylesheet
имеет обязательный атрибут
version
, в котором указывается версия языка, использованная при создании этого преобразования. Текущей версией языка является версия 1.0, поэтому все преобразования, которые мы будем приводить в качестве примеров, будут начинаться следующим тегом:

Необязательный атрибут

id
может содержать уникальный идентификатор данного преобразования. Этот атрибут используется в тех случаях, когда преобразование включено в преобразуемый документ для его идентификации внутри этого документа.

Пример

Если преобразование, включенное в преобразуемый документ, будет иметь вид

...

 version="1.0"

 id="trans"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 ...

...

то ассоциироваться с документом оно будет следующей инструкцией:

Необязательный атрибут

extension-element-prefixes
перечисляет префиксы пространств имен, которые определяют элементы расширения. Об использовании этого атрибута мы расскажем в главе 10, которая посвящена созданию расширений языка XSLT.

Необязательный атрибут

exclude-result-prefixes
перечисляет префиксы пространств имен, определения которых не нужно включать в выходящий документ. Использование этого атрибута подробно описано в главе 8.

Элемент

xsl:stylesheet
может включать следующие элементы языка XSLT:

xsl:import
;

xsl:include
;

xsl:strip-space
;

xsl:output
;

xsl:key
;

xsl:decimal-format
;

xsl:namespace-alias
;

xsl:attribute-set
;

xsl:variable
;

xsl:param
;

xsl:template
.

Эти элементы называются элементами верхнего уровня, поскольку они могут находиться на самом верхнем (не считая уровня корневого элемента) уровне в иерархии элементов документа. Более того, все перечисленные элементы кроме

xsl:variable
и
xsl:param
должны находиться только на верхнем уровне. Элементы
xsl:variable
и
xsl:param
могут использоваться в шаблонах, определяя локальные переменные и параметры.

Если преобразование импортирует внешние модули, первыми дочерними элементами

xsl:stylesheet
должны быть элементы
xsl:import
. Иначе говоря, элементам
xsl:import
внутри
xsl:stylesheet
должны предшествовать только другие элементы
xsl:import
. Порядок всех остальных дочерних элементов
xsl:stylesheet
не имеет значения.

Помимо элементов верхнего уровня,

xsl:stylesheet
может содержать элементы других, но обязательно ненулевых пространств имен. Это позволяет включать в преобразования любую сопутствующую информацию, правда спецификация оговаривает, что такого рода элементы не должны изменять поведение элементов и функций самого XSLT.

Пример
Листинг 4.1. Преобразование с элементом верхнего уровня, не принадлежащим XSLT

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


  Simple stylesheet



Выделенный полужирным шрифтом на листинге 4.1 элемент

source
принадлежит пространству имен с URI
http://www.a.com/XSL/source
. Поскольку пространство имен этого элемента ненулевое, такое объявление является корректным.

Упрощенные преобразования