Xslt 覆盖组件的可见性

Xslt 覆盖组件的可见性,xslt,xslt-3.0,Xslt,Xslt 3.0,其中有一个例子让我感到困惑: <xsl:package name="P" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:use-package name="Q"> <xsl:override> <xsl:variable name="C" visibility="private" select="$xsl:original + 3"/>

其中有一个例子让我感到困惑:

<xsl:package name="P" 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:use-package name="Q">
    <xsl:override>
      <xsl:variable name="C" visibility="private" select="$xsl:original + 3"/>
    </xsl:override>
  </xsl:use-package>

  <xsl:template name="T" visibility="public">
    <xsl:value-of select="$A"/>
  </xsl:template>
</xsl:package>

然后它说:

根据3.5.3.2中的规则更改可见性 组件:尤其是对 可见性=“隐藏”

为什么需要指定
private
将可见性更改为
hidden
?我希望,由于您正在重写该组件,原始被重写的组件将自动隐藏,并且使用包和已使用包中的所有符号引用都将引用新的重写组件

组件Cp是覆盖组件。它的性质正是如此 就好像它在P中被声明为顶级组件一样(在 xsl:使用包元素)


这意味着
C
对任何使用包都是可见的,但它被标记为
private

有3个名为C的组件。C(Q)是Q中声明的组件,在Q中是公共的。C(PQ)是p中该组件的“副本”,并且由于存在覆盖声明而隐藏在p中;不能使用名称C来调用它,只能使用名称xsl:original。C(P)是P中的重写组件。它在P中是私有的,因为重写声明具有
visibility=“private”
。我认为下表有一个错误,它说C(P)是公共的

请在W3C bugzilla上直接向工作组提出这些问题,即使这些问题只是澄清问题。所有的反馈都是受欢迎的:事实上,W3C监控反馈的数量

==PS==

XSL工作组(正好在本周召开会议)对此进行了审查,并同意C(p)的可见性应该是私有的(*)。看

请注意,对3.5.3.2接受组件的引用并不直接相关,因为其中的规则讨论了在缺少xsl:override元素的情况下会发生什么

谢谢你的反馈


(*):我已经纠正了这个问题。我最初写的是“public”。

您是否检查了实际情况,即重写的变量
Cp
是否在第三个包中可见?在我看来,“它的属性就好像它被声明为顶级组件一样”并不一定意味着这个变量是公共的。这只意味着在两种情况下应用相同的规则。@MathiasMüller不,我还没有检查,我只是想了解规范。谢谢Michael。最后一个问题。组件的默认可见性是私有的,包括覆盖的组件?如果C(P)没有包含
visibility=“private”
它将是公共的?否,
visibility=“private”
是默认值(xsl:param除外)