覆盖组件的可见性
Visibility of an overriden component
在 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>
然后它说:
The visibility is changed according to the rules in 3.5.3.2 Accepting
Components: in particular, visibility="private" changes to
visibility="hidden".
为什么需要指定 private
才能将可见性更改为 hidden
?我希望,由于您正在覆盖组件,原始覆盖的组件会自动隐藏,并且使用和使用包中的所有符号引用都引用新的覆盖组件。
Component Cp is the overriding component. Its properties are exactly
as if it were declared as a top-level component in P (outside the
xsl:use-package element)...
这意味着 C
对任何使用包可见,但它被标记为 private
。
有 3 个名为 C 的组件。C(Q) 是 Q 中声明的组件,并且在 Q 中是 public。C(PQ) 是该组件在 P 中的 "copy" , 并且隐藏在 P 中,因为存在覆盖声明;它不能使用名称 C 调用,只能使用名称 xsl:original。 C(P) 是 P 中的重写组件。它在 P 中是私有的,因为重写声明具有 visibility="private"
。我认为下面的 table 有一个错误,它说 C(P) 是 public.
请随时通过在 W3C bugzilla 上提出这些问题直接向工作组提出这些问题,即使它们只是需要澄清的问题。欢迎所有反馈:事实上,W3C 会监控反馈的数量。
== PS ==
XSL WG(恰好在本周开会)对此进行了审查,并同意 C(P) 的可见性应该是私有的 (*)。参见 https://www.w3.org/Bugs/Public/show_bug.cgi?id=29468
请注意,对 3.5.3.2 接受组件的引用并不直接相关,因为那里的规则讨论了在没有 xsl:override 元素的情况下会发生什么。
感谢您的反馈。
(*):我已更正此问题。我最初写的是 "public".
在 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>
然后它说:
The visibility is changed according to the rules in 3.5.3.2 Accepting Components: in particular, visibility="private" changes to visibility="hidden".
为什么需要指定 private
才能将可见性更改为 hidden
?我希望,由于您正在覆盖组件,原始覆盖的组件会自动隐藏,并且使用和使用包中的所有符号引用都引用新的覆盖组件。
Component Cp is the overriding component. Its properties are exactly as if it were declared as a top-level component in P (outside the xsl:use-package element)...
这意味着 C
对任何使用包可见,但它被标记为 private
。
有 3 个名为 C 的组件。C(Q) 是 Q 中声明的组件,并且在 Q 中是 public。C(PQ) 是该组件在 P 中的 "copy" , 并且隐藏在 P 中,因为存在覆盖声明;它不能使用名称 C 调用,只能使用名称 xsl:original。 C(P) 是 P 中的重写组件。它在 P 中是私有的,因为重写声明具有 visibility="private"
。我认为下面的 table 有一个错误,它说 C(P) 是 public.
请随时通过在 W3C bugzilla 上提出这些问题直接向工作组提出这些问题,即使它们只是需要澄清的问题。欢迎所有反馈:事实上,W3C 会监控反馈的数量。
== PS ==
XSL WG(恰好在本周开会)对此进行了审查,并同意 C(P) 的可见性应该是私有的 (*)。参见 https://www.w3.org/Bugs/Public/show_bug.cgi?id=29468
请注意,对 3.5.3.2 接受组件的引用并不直接相关,因为那里的规则讨论了在没有 xsl:override 元素的情况下会发生什么。
感谢您的反馈。
(*):我已更正此问题。我最初写的是 "public".