3.0 样式表中 XSLT 2.0 处理器的回退
Fallbacks for XSLT 2.0 processor in 3.0 stylesheet
为了解析一些字符串,我想使用 analyze-string()
(如果可用)并提供与 XSLT 2.0 一起使用的较慢的回退。这是我做的一个快速测试:
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template name="tokenize"
use-when="not(function-available('analyze-string'))">
2.0
</xsl:template>
<xsl:template name="tokenize" version="3.0"
use-when="function-available('analyze-string')">
3.0
</xsl:template>
<xsl:template match="/">
<xsl:call-template name="tokenize"/>
<xsl:value-of select="function-available('analyze-string')"/>
</xsl:template>
</xsl:stylesheet>
我 运行 在 oXygen 15.2 和 Saxon-PE/EE 9.5.1.3 中。 st运行gely,输出为
2.0
true
这表明包含了第一个模板而不是第二个模板,尽管它的 use-when
属性应该评估为 true,如输出的第二行所示。出了什么问题?
开发针对 2.0 和 3.0 处理器的样式表时是否有标准的最佳实践?如果我使用选项 -xsltversion:2.0
覆盖 xsl:stylesheet
元素上的版本属性,Saxon HE 将接受样式表。我还尝试将版本属性设置为 2.0 以使覆盖变得多余,但是 function-available('analyze-string')
将在 Saxon PE/EE 中计算为 false,即使我在它前面加上 XPath 函数命名空间也是如此。
在 Saxon 9.5 中,出于我现在无法理解的原因,use-when 表达式的静态上下文仅包括核心 XPath 2.0 函数以及一些选定的 XSLT 函数,例如 element-available、system-property, 和 function-available;它不包括 analyze-string 等 XPath 3.0 函数,尽管这些函数在样式表中的 "ordinary" XPath 表达式中可用。我怀疑这反映了 2013 年发布 Saxon 9.5 时 XSLT 3.0 规范的状态。情况将在 9.6 和 9.7 中发生变化。
为了解析一些字符串,我想使用 analyze-string()
(如果可用)并提供与 XSLT 2.0 一起使用的较慢的回退。这是我做的一个快速测试:
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template name="tokenize"
use-when="not(function-available('analyze-string'))">
2.0
</xsl:template>
<xsl:template name="tokenize" version="3.0"
use-when="function-available('analyze-string')">
3.0
</xsl:template>
<xsl:template match="/">
<xsl:call-template name="tokenize"/>
<xsl:value-of select="function-available('analyze-string')"/>
</xsl:template>
</xsl:stylesheet>
我 运行 在 oXygen 15.2 和 Saxon-PE/EE 9.5.1.3 中。 st运行gely,输出为
2.0
true
这表明包含了第一个模板而不是第二个模板,尽管它的 use-when
属性应该评估为 true,如输出的第二行所示。出了什么问题?
开发针对 2.0 和 3.0 处理器的样式表时是否有标准的最佳实践?如果我使用选项 -xsltversion:2.0
覆盖 xsl:stylesheet
元素上的版本属性,Saxon HE 将接受样式表。我还尝试将版本属性设置为 2.0 以使覆盖变得多余,但是 function-available('analyze-string')
将在 Saxon PE/EE 中计算为 false,即使我在它前面加上 XPath 函数命名空间也是如此。
在 Saxon 9.5 中,出于我现在无法理解的原因,use-when 表达式的静态上下文仅包括核心 XPath 2.0 函数以及一些选定的 XSLT 函数,例如 element-available、system-property, 和 function-available;它不包括 analyze-string 等 XPath 3.0 函数,尽管这些函数在样式表中的 "ordinary" XPath 表达式中可用。我怀疑这反映了 2013 年发布 Saxon 9.5 时 XSLT 3.0 规范的状态。情况将在 9.6 和 9.7 中发生变化。