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

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

Жанры

Технология XSLT

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

Шрифт:
Пример

Рассмотрим следующую схему включений и импорта (табл 4.1).

Таблица 4.1. Включение и импорт преобразований

Преобразование Импортирует Включает
alpha.xsl
bravo.xsl charlie.xsl
bravo.xsl
delta.xsl echo.xsl
foxtrot.xsl
charlie.xsl
golf.xsl hotel.xsl
hotel.xsl
india.xsl

Этой

схеме будет соответствовать логическое дерево импорта на рис. 4.1.

Рис. 4.1. Обход дерева импорта преобразований

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

Таким образом, порядок импорта преобразований от младших к старшим будет выглядеть следующим образом:

delta.xsl

echo.xsl

bravo.xsl foxtrot.xsl

golf.xsl

hotel.xsl india.xsl

charlie.xsl

alpha.xsl

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

□ 

xsl:attribute-set
— порядок импорта используется для определения главенства элементов
xsl:attribute
, включенных в разные именованные списки атрибутов, но создающих атрибуты с одинаковыми именами.

□ 

xsl:namespace-alias
— в случае, если в преобразовании определяются несколько псевдонимов префиксов пространств имен, процессор использует самый старший в порядке импорта псевдоним.

□ 

xsl:output
— эти элементы объединяются процессором. В случае конфликтов, например, когда в разных элементах
xsl:output
атрибуты определены по-разному, процессор должен использовать старшее в порядке импорта определение.

□ 

xsl:strip-space
и
xsl:preserve-space
— в этих элементах порядок импорта также используется для разрешения конфликтов: выигрывают определения со старшим порядком импорта.

□ 

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

□ 

xsl:variable
и
xsl:param
— порядок импорта используется при обращении к глобальным переменным в случае, если в разных преобразованиях существуют разные определения переменной с одним именем. В подобной ситуации будет
использована переменная со старшим порядком импорта.

Использование сущностей для разбивки на модули

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

Пример
Листинг 4.15. Входящий документ:

<root>

 <a/>

 <b/>

</root>

Листинг 4.16. Основное преобразование

<!DOCTYPE xsl:stylesheet [

 <!ENTITY ab SYSTEM "ab.xsl">

]>

<xsl:stylesheet

 version="1.0"

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

 <xsl:template match="root">

<ROOT>

<xsl:apply-templates/>

</ROOT>

 </xsl:template>

 &ab;

</xsl:stylesheet>

Листинг 4.17. Файл ab.xsl

<xsl:template match="a">

 <A/>

</xsl:template>

<xsl:template match="b">

 <B/>

</xsl:template>

Листинг 4.18. Результат преобразования

<ROOT>

 <A/>

 <B/>

</ROOT>

В этом примере в DTD-блоке мы определяем сущность с именем

ab
, которая содержит два шаблонных правила для обработки элементов
a
и
b
. Файл
ab.xsl
, в котором содержится текст внешней сущности, заменяет в документе ссылку
&ab;
. После раскрытия процессором сущности (замены ссылки на ее содержимое) наше преобразование будет выглядеть следующим образом.

Листинг 4.19. Основное преобразование после раскрытия сущности &ab;

<xsl:stylesheet

 version="1.0"

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

 <xsl:template match="root">

<ROOT>

<xsl:apply-templates/>

</ROOT>

 </xsl:template>

 <xsl:template match="a">

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

Граф

Ланцов Михаил Алексеевич
6. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Граф

Идеальный мир для Лекаря 27

Сапфир Олег
27. Лекарь
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 27

Начальник милиции. Книга 3

Дамиров Рафаэль
3. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 3

Его маленькая большая женщина

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Его маленькая большая женщина

Адаптация

Уленгов Юрий
2. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Адаптация

Идеальный мир для Лекаря 28

Сапфир Олег
28. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 28

Курсант: назад в СССР 9

Дамиров Рафаэль
9. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: назад в СССР 9

Газлайтер. Том 15

Володин Григорий Григорьевич
15. История Телепата
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Газлайтер. Том 15

Кодекс Охотника. Книга IX

Винокуров Юрий
9. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга IX

Клан

Русич Антон
2. Долгий путь домой
Фантастика:
боевая фантастика
космическая фантастика
5.60
рейтинг книги
Клан

Купец V ранга

Вяч Павел
5. Купец
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Купец V ранга

Неудержимый. Книга XX

Боярский Андрей
20. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XX

Студиозус

Шмаков Алексей Семенович
3. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус

Черный дембель. Часть 2

Федин Андрей Анатольевич
2. Черный дембель
Фантастика:
попаданцы
альтернативная история
4.25
рейтинг книги
Черный дембель. Часть 2