Чтение онлайн

на главную - закладки

Жанры

Технология XSLT

Валиков Алексей Н.

Шрифт:

 <xsl:template match="a">

<xsl:value-of select="."/>

 </xsl:template>

</xsl:stylesheet>

Тогда основное преобразование может быть переписано в следующем виде.

Листинг 4.13. Основное преобразование после включения simple.xsl

<xsl:stylesheet

 version="1.0"

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

 <xsl:template match="/">

<html>

<xsl:apply-templates/>

</html>

 </xsl:template>

 <xsl:template match="a">

<xsl:value-of select="."/>

 </xsl:template>

</xsl:stylesheet>

Полужирным

шрифтом на листинге 4.13 выделен шаблон, который соответствует преобразованию
simple.xsl
.

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

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

xsl:include
. При этом преобразование не должно прямо или косвенно включать само себя — такая ситуация породит бесконечный цикл включений.

Импорт преобразований

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

xsl:import
. Импорт преобразований более сложен, чем их простое включение — последовательность импорта модулей может влиять на то, как будет выполняться преобразование. Равно как и в случае с
xsl:include
, условное импортирование преобразований не разрешено.

Элемент xsl:import

<xsl:import

 href =" URI"/>

Синтаксис импорта преобразования практически полностью аналогичен включению: обязательный атрибут

href
содержит URI внешнего модуля, который должен быть импортирован в текущее преобразование. Так же, как и в случае с
xsl:include
, элемент
xsl:import
логически заменяется содержимым внешнего модуля, и относительные идентификаторы ресурсов (URI), используемые во внешнем преобразовании, отсчитываются от его базового адреса. Преобразование не может прямо или косвенно импортировать само себя.

Совет

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

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

Главным отличием импорта преобразований является то, что последовательность импортирования внешних модулей, называемая порядком импорта оказывает влияние на приоритет исполнения шаблонов, определения и многое другое.

Порядок импорта

Как уже было сказано выше, элементы

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

□ Порядок импорта основного преобразования всегда старше порядка импорта внешнего преобразования.

□ В случае, если преобразование импортирует несколько внешних модулей, порядок импорта преобразований, которые импортируются раньше, младше порядка импорта последующих модулей.

□ Порядок импорта преобразования, включенного в основное при помощи элемента

xsl:include
, равен порядку импорта основного преобразования.

Эти правила могут быть проиллюстрированы следующими примерами.

Рассмотрим преобразование

alpha.xsl
, которое импортирует преобразования
bravo.xsl
и
сharlie.xsl
и включает преобразование
delta.xsl
.

Листинг 4.14. Фрагмент преобразования alpha.xsl

<xsl:stylesheet

 version="1.0"

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

 <xsl:import href="#"/>

 <xsl:import href="#"/>

 <xsl:import href="#"/>

 <!-- ...
– ->

</xsl:stylesheet>

В соответствии с первым правилом, порядок импорта основного преобразования старше порядка импорта внешних модулей, значит

alpha.xsl
старше
bravo.xsl
и
charlie.xsl
. Далее, согласно второму правилу порядок импорта преобразования
bravo.xsl
младше порядка
charlie.xsl
, поскольку оно импортируется первым. Преобразование
delta.xsl
будет иметь порядок импорта такой же, как и у основного преобразования
alpha.xsl
. Таким образом, порядок импорта в этом примере будет иметь следующий вид:

bravo.xsl

charlie.xsl

alpha.xsl delta.xsl

Преобразование

bravo.xsl
будет самым младшим, а преобразования
alpha.xsl
и
delta.xsl
— самыми старшими.

Заметим, что импортируемые преобразования могут и сами импортировать другие модули. В этих случаях вычисление порядка импорта несколько усложняется.

Техническая рекомендация XSLT предлагает решать эту проблему построением логического дерева импорта.

Поделиться:
Популярные книги

Архил...? 4

Кожевников Павел
4. Архил...?
Фантастика:
фэнтези
попаданцы
альтернативная история
5.50
рейтинг книги
Архил...? 4

Камень Книга одиннадцатая

Минин Станислав
11. Камень
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Камень Книга одиннадцатая

1941: Время кровавых псов

Золотько Александр Карлович
1. Всеволод Залесский
Приключения:
исторические приключения
6.36
рейтинг книги
1941: Время кровавых псов

Нечто чудесное

Макнот Джудит
2. Романтическая серия
Любовные романы:
исторические любовные романы
9.43
рейтинг книги
Нечто чудесное

Случайная свадьба (+ Бонус)

Тоцка Тала
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Случайная свадьба (+ Бонус)

Голодные игры

Коллинз Сьюзен
1. Голодные игры
Фантастика:
социально-философская фантастика
боевая фантастика
9.48
рейтинг книги
Голодные игры

Мастер темных Арканов

Карелин Сергей Витальевич
1. Мастер темных арканов
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Мастер темных Арканов

Страж Кодекса. Книга VIII

Романов Илья Николаевич
8. КО: Страж Кодекса
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Страж Кодекса. Книга VIII

Сердце Дракона. Том 8

Клеванский Кирилл Сергеевич
8. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.53
рейтинг книги
Сердце Дракона. Том 8

Ученичество. Книга 2

Понарошку Евгений
2. Государственный маг
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ученичество. Книга 2

Новый Рал 8

Северный Лис
8. Рал!
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Новый Рал 8

30 сребреников

Распопов Дмитрий Викторович
1. 30 сребреников
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
5.00
рейтинг книги
30 сребреников

Мастер темных Арканов 5

Карелин Сергей Витальевич
5. Мастер темных арканов
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Мастер темных Арканов 5

Кротовский, вы сдурели

Парсиев Дмитрий
4. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
рпг
5.00
рейтинг книги
Кротовский, вы сдурели