繁体   English   中英

XSLT 2.0中的序列构造函数是什么?

[英]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-ofxsl:elementxsl: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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM