Выбрать главу

Глава 4

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

Пространство имен 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 элемента xsclass="underline" stylesheet.

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

Пример

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

<xsclass="underline" stylesheet

 version="1.0"

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

 <xsclass="underline" template match="/">

  <xsclass="underline" element name="root"/>

 </xsclass="underline" template>

</xsclass="underline" stylesheet>

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

<stylesheet

 version="1.0"

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

 <template match="/">

  <element name="root"/>

 </template>

</stylesheet>

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

<stylesheet

 version="1.0"

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

 <template match="root">

  <root xmlns=""/>

 </template>

</stylesheet>

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

<root/>

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

Пример

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

<xsclass="underline" template match="a" xsldoc:text="Processes all a elements"

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

 ...

</xsclass="underline" template>

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

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

За исключением случаев упрощенных преобразований, корневым элементом XSLT-документа всегда является элемент xsclass="underline" stylesheet или его синоним xsclass="underline" transform. Эти элементы полностью идентичны и различаются только именами, поэтому мы будем описывать семантику и пользоваться только элементом xsclass="underline" stylesheet.

Элементы xsclass="underline" stylesheet и xsclass="underline" transform

<xsclass="underline" stylesheet

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

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

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

 version="число">

 <!--

  Содержимое: несколько элементов xsclass="underline" import, элементы верхнего уровня

 -->

</xsclass="underline" stylesheet>

<xsclass="underline" transform id="идентификатор"

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

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

 version="число">

 <!--

  Содержимое: несколько элементов xsclass="underline" import, элементы верхнего уровня

 -->

</xsclass="underline" transform>

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

<xsclass="underline" stylesheet version="1.0" ... >

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

Пример

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

...

<xsclass="underline" stylesheet

 version="1.0"

 id="trans"

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

 ...

</xsclass="underline" stylesheet>

...

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

<?xml-stylesheet type="text/xsl" href="#trans"?>

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

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

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

□ xsclass="underline" import;

□ xsclass="underline" include;

□ xsclass="underline" strip-space;

□ xsclass="underline" output;

□ xsclass="underline" key;

□ xsclass="underline" decimal-format;

□ xsclass="underline" namespace-alias;