В чем разница между префиксами 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"/>
Ответы
Ответ 1
Чтобы использовать функции EXSLT, такие как те, что указаны в пространстве имен http://exslt.org/common
, вам не нужен атрибут extension-element-prefix
. Это необходимо, только если вы хотите использовать элементы расширения, такие как func:function
в пространстве имен http://exslt.org/functions
. Атрибут extension-element-prefix
просто сигнализирует, что любые элементы с этим префиксом не являются литературными элементами результата, а скорее инструкциями расширения в дополнение к тем инструкциям, которые определены языком XSLT.
Что касается exclude-result-prefixes
, вы поняли, что это правильно, это помогает избежать любых объявлений пространства имен в ваших результирующих элементах для пространств имен, объявленных и используемых в таблице стилей, исключительно для выбора узлов в выражениях пути или шаблонов совпадений или используемых для вставки элементов расширения.