[英]What is a sequence constructor in XSLT 2.0?
我看了规格和其他一些文件,但我真的不明白。 我知道现在有了序列而不是节点集,好吧,但是什么是序列构造函数(或者更容易地说:什么是ISNT序列构造函数)?
规格只是说
[定义:序列构造器是样式表中零个或多个同级节点的序列,可以对其进行评估以返回节点和原子值的序列。 使用结果序列的方式取决于包含的指令。]
许多XSLT元素以及文字结果元素被定义为将序列构造函数作为其内容。
我有点明白xsl:sequence构造了一个序列,但是为什么xsl:element的内容是一个序列构造器? 那么什么是序列构造函数呢?
感谢您的澄清!
查看规范中的进一步说明
术语序列构造函数取代了XSLT 1.0中使用的模板。 进行此更改的部分目的是为了清楚起见(避免与模板规则和命名模板混淆),但也反映了语义的更正式定义。 XSLT 1.0将模板描述为写入结果树的指令序列,而XSLT 2.0将序列构造器描述为可以评估以返回项目序列的东西。 这些项目会发生什么情况取决于所包含的说明。
因此,例如XSLT 1.0语法
<!-- Category: top-level-element -->
<xsl:template
match = pattern
name = qname
priority = number
mode = qname>
<!-- Content: (xsl:param*, template) -->
</xsl:template>
作为xsl:template
规则的内容,允许多个xsl:param
加上一个template
,XSLT 2.0语法现在具有
<!-- Category: declaration -->
<xsl:template
match? = pattern
name? = qname
priority? = number
mode? = tokens
as? = sequence-type>
<!-- Content: (xsl:param*, sequence-constructor) -->
</xsl:template>
将xsl:template
规则的内容定义为xsl:param
的数量加上序列构造函数。
这样一来,显然xsl:param
并不是例如序列构造函数,但是当然,因为它的内容具有序列构造函数。
至于如何构造序列,您可以使用文字结果元素,当然也可以使用xsl:value-of
, xsl:element
, xsl:attribute
等指令以及xsl:sequence
来实现(您将构造并返回原始值(的序列),并且不仅返回节点,而且还返回XSLT 1.0中的可能)。
几乎可以在任何地方放置文字结果元素的地方都是序列构造函数,例如
<xsl:template match="/">
<a></a>
</xsl:template>
...要么
<xsl:variable name="a">
<a></a>
</xsl:variable>
...但不是
<xsl:choose>
<a></a>
</xsl:choose>
...因为xsl:choose
指令不允许这样做:
<xsl:choose>
<!-- Content: (xsl:when+, xsl:otherwise?) -->
</xsl:choose>
因此,序列构造函数是值和创建值的指令所在的地方。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.