Какова область применения xsl apply-import? - PullRequest
1 голос
/ 10 марта 2010

Моя первоначальная идея о apply-import состояла в том, что если есть два шаблона, которые соответствуют одному и тому же узлу, то использование apply-import в шаблоне с более высоким приоритетом запускает шаблон с более низким приоритетом.Но недавно я обнаружил, что важно, как организован импорт.

Меня особенно интересуют два случая.

  • Будет ли работать импорт для шаблона, который импортируется в импортируемый файл (вложенный импорт)?
  • Как насчет «импорта одного уровня» (мастер-файл импортирует два файла с шаблонами, совпадающими с одинаковыми узлами)

Мне кажется, что это не совсем ясно описано в спецификация .Может ли кто-нибудь предоставить авторитетные рекомендации?

РЕДАКТИРОВАТЬ: я могу попробовать эти случаи самостоятельно, но всегда есть опасность, что это будет поведение, специфичное для реализации.

1 Ответ

1 голос
/ 19 марта 2010

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

http://en.wikipedia.org/wiki/Tree_traversal

В спецификации дерева "приоритета импорта" есть пример:

http://www.w3.org/TR/xslt#dt-import-precedence

Например, предположим,

  • таблица стилей A импортирует таблицы стилей B и C в указанном порядке;
  • таблица стилей B импортирует таблицу стилей D;
  • таблица стилей C импортирует таблицу стилей E.

Тогда порядок импорта приоритет (низший первый) - это D, B, E, C, A.

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

Как правило, определение или шаблонное правило с более высоким приоритетом импорта имеет приоритет над определением или шаблонным правилом с более низким приоритетом импорта.

Итак, вернемся к вашим конкретным вопросам:

  • Будет ли работать импорт для шаблона, который импортируется в импортируемый файл (вложенный импорт)?

Мое предположение было бы "да" (в соответствии с порядком приоритета), и оно даже вызывало бы несколько шаблонов, если вы вызываете их из соответствующего соответствующего шаблона. Как описано здесь:

http://www.w3.org/TR/xslt#element-apply-imports

Например, предположим, что таблица стилей doc.xsl содержит шаблонное правило для элементы примера:

<code><xsl:template match="example">
  <pre><xsl:apply-templates/>
</ XSL: шаблон>

Другая таблица стилей может импортировать doc.xsl и измените обработку пример элементов следующим образом:

<xsl:import href="doc.xsl"/>

<xsl:template match="example">
  <div style="border: solid red">
     <xsl:apply-imports/>
  </div>
</xsl:template>

Объединенный эффект будет превратить пример в элемент формы:

<code><div style="border: solid red"><pre>...
  • А как насчет "импорта одного брата" (мастер-файл импортирует два файла с шаблонами, совпадающими с одинаковыми узлами)

Соответствующий шаблон будет выбран на основе более высокого приоритета импорта, и это определяется порядком импорта.

Я думаю, это будет работать так:

  • таблица стилей A импортирует таблицы стилей B и C в указанном порядке;

Тогда порядок приоритета импорта (сначала младший) - B, C, A.

Таким образом, в этом случае будет выбран шаблон в таблице стилей C.

  • таблица стилей A импортирует таблицы стилей C и B в указанном порядке;

Тогда порядок приоритета импорта (сначала младший) - C, B, A.

Таким образом, в этом случае будет выбран шаблон в таблице стилей B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...