1

Binding References to Components中有一个我觉得令人困惑的例子:

<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?我希望,由于您正在覆盖组件,因此原始覆盖的组件会自动隐藏,并且 using 和 used 包中的所有符号引用都引用新的覆盖组件。

组件 Cp 是最重要的组件。它的属性就像它被声明为 P 中的顶级组件一样(在 xsl:use-package 元素之外)......

这意味着C任何使用包都可以看到它,但它被标记为private.

4

1 回答 1

1

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

请随时通过在 W3C bugzilla 上直接向 WG 提出这些问题,即使它们只是澄清问题。欢迎所有反馈:确实,W3C 监控反馈的数量。

== PS ==

XSL WG(恰好本周开会)对此进行了审查,并同意 C(P) 的可见性应该是私有的 (*)。见https://www.w3.org/Bugs/Public/show_bug.cgi?id=29468

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

感谢您的反馈意见。

(*):我已经更正了。我最初写的是“公共”。

于 2016-02-15T18:02:23.367 回答