Пример
Если преобразование, включенное в преобразуемый документ, будет иметь вид
...
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. Поскольку пространство имен этого элемента ненулевое, такое объявление является корректным.
Упрощенные преобразования
Многие простые преобразования состоят из единственного правила, которое обрабатывает корневой узел входящего документа. Общий вид такого рода преобразований показан в следующем листинге.
Листинг 4.2. Простое преобразование
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
XSLT позволяет упрощать запись таких преобразований, опуская элементы xsl:stylesheetи xsl:templateи оставляя только шаблон, создающий выходящий документ.
Корневой элемент упрощенной записи должен содержать атрибут xsl:version, указывающий версию языка XSLT, использованного в шаблоне. Как правило, этот элемент также содержит объявление пространства имен XSLT, хотя оно может быть определено и в другом месте.
Пример
Преобразование, приведенное в листинге 4.2, можно переписать в упрощенном виде следующим образом.
Листинг 4.3. Упрощённая запись преобразования
xsl:version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Приведем еще один простой пример упрощенной записи преобразования, генерирующего простейшую HTML-страницу.
Листинг 4.4. Упрощённая запись преобразования XML-документа в HTML
Следующий листинг приводит полную версию этого же преобразования.
Листинг 4.5. Полная запись преобразования XML-документа в HTML
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Модульная организация преобразования
Как и любой, достаточно развитый язык программирования, XSLT обладает средствами для организации модульной структуры преобразований. Существуют два основных способа использования в преобразованиях внешних модулей — включение и импорт. Кроме того, поскольку преобразования в XSLT также являются XML-документами, для разбиения их на модули можно применять сущности.
Читать дальше