Подтвердить что ты не робот

В чем разница между префиксами exclude-result и префиксом расширения-элемента в объявлении пространства имен XSLT?

В чем разница между exclude-result-prefixes и extension-element-prefix? Оба они используются в заголовке XSLT. Я нашел extension-element-prefix при использовании EXSLT и Веб-сайт EXSLT Howto говорит, что extension-element-prefix используется для "предотвращения распространения пространств имен расширений" в дереве результатов ".

Но это неверно (с использованием libxslt). Только exclude-result-prefixes удаляет пространство имен расширений. Так зачем мне extension-element-prefix???

Пример:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:exsl="http://exslt.org/common" version="1.0"
  extension-element-prefix="exsl">

<xsl:template match="/">
  <blabla/>
</xsl:template>

</xsl:stylesheet>

Мой вывод с libxslt (xsltproc):

<?xml version="1.0"?>
<blabla xmlns:exsl="http://exslt.org/common"/>
4b9b3361

Ответ 1

Чтобы использовать функции EXSLT, такие как те, что указаны в пространстве имен http://exslt.org/common, вам не нужен атрибут extension-element-prefix. Это необходимо, только если вы хотите использовать элементы расширения, такие как func:function в пространстве имен http://exslt.org/functions. Атрибут extension-element-prefix просто сигнализирует, что любые элементы с этим префиксом не являются литературными элементами результата, а скорее инструкциями расширения в дополнение к тем инструкциям, которые определены языком XSLT.

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