在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接受中的规则更改可见性 组件:特别是,visibility =“private”更改为 能见度= “隐藏”。
为什么需要指定private
来将可见性更改为hidden
?我希望,由于您要覆盖组件,原始重写的组件会自动隐藏,并且using包和used包中的所有符号引用都会引用新的重写组件。
组件Cp是最重要的组件。它的属性正是如此 好像它被宣布为P中的顶级组件(在...之外) xsl:use-package element)...
这意味着C
对任何使用的包都可见,但它被标记为private
。
答案 0 :(得分:1)
有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)的可见性应该是私有的(*)。见https://www.w3.org/Bugs/Public/show_bug.cgi?id=29468
请注意,对3.5.3.2 Accepting Components的引用并不直接相关,因为那里的规则讨论了在没有xsl:override元素的情况下会发生什么。
感谢您的反馈。
(*):我已经纠正了这个问题。我最初写的是“公开”。