覆盖组件的可见性

时间:2016-02-15 02:56:33

标签: xslt xslt-3.0

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

1 个答案:

答案 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元素的情况下会发生什么。

感谢您的反馈。

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