Книга: Технология XSLT
Порядок импорта
Разделы на этой странице:
Порядок импорта
Как уже было сказано выше, элементы 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="bravo.xsl"/>
<xsl:import href="charlie.xsl"/>
<xsl:import href="delta.xsl"/>
<!-- ... -->
</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.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
— порядок импорта используется при обращении к глобальным переменным в случае, если в разных преобразованиях существуют разные определения переменной с одним именем. В подобной ситуации будет использована переменная со старшим порядком импорта.
- 7.3. Порядок заключения, изменения, расторжения договоров
- Магическая программа, или Беспорядок по расписанию
- Порядок создания связей
- 2.6.1. Порядок ведения записей
- Приоритет и порядок выполнения
- 2.3.2. GNU getopt() и порядок опций
- Порядок байтов на компьютере и в сети
- Барьеры и порядок выполнения
- Порядок следования байтов
- Порядок байтов в ядре
- Порядок выполнения операций процессором
- Порядок выполнения операторов