Speak.Me Учить иностранные слова

XSL: включение и импорт (xsl:include и xsl:import)

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

Синтаксис:

и

Атрибуты:

  • href — обязательный атрибут, содержит путь до файла с включаемым или импортируемым стилем

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

Импортируемые и включаемые стили могут содержать одинаковые шаблоны, переменные и прочие конфликтующие инструкции. Разрешаются эти конфликты в соответствии с приоритетом (порядком) импорта. Все шаблоны, переменные и инструкции имеют такой же приоритет импорта как и стиль, в котором они находятся. Применяться в преобразовании будет тот стиль (шаблон, переменная, инструкция), который обладает высшим приоритетом импорта по отношению к конфликтующему с ним. Приоритет импорта стиля определяется по следующим правилам:

  • приоритет импорта основного стиля (тот, который импортирует остальные) всегда выше приоритета импортируемых;
  • приоритет импорта включенного стиля (xsl:include) равен приоритету импорта основного стиля;
  • если основной стиль импортирует несколько внешних стилей, то приоритет импорта этих внешних стилей будет возрастать от первого (который импортируется раньше/выше) к последнему (который импортируется позже/ниже);
  • если импортируемые (внешние) стили в свою очередь импортируют другие стили, то приоритет этих дочерних стилей будет выше, чем у импортированных в основной стиль раньше родительского и ниже, чем у импортированных в основной стиль позже родительского.

Чтоб все это стало понятнее приведу пример:

main.xsl

styleA.xsl

styleB.xsl

styleC.xsl

Приоритет импорта в этом случае будет следующий (от большего к меньшему):

  1. main.xsl, styleC.xsl и styleC-c.xsl
  2. styleC-b.xsl
  3. styleC-a.xsl
  4. styleB.xsl и styleB-c.xsl
  5. styleB-b.xsl
  6. styleB-a.xsl
  7. styleA.xsl и styleA-c.xsl
  8. styleA-b.xsl
  9. styleA-a.xsl