2016-02-14 18 views
0

关于packages在XSLT 3.0中,隐式与未命名包是相同的东西吗?假设没有一个可以被其它软件包使用,为什么它说:隐式与未命名包

出于兼容性考虑,所有的命名模板和模式宣告 在包被公布于众。

+0

来自规范的引用没有提到隐式或未命名的包。也许你可以在这里包含更多的背景?你的问题是什么“兼容性原因”?或者,如果在具有'name'属性的显式'xsl:package'内命名没有'visibility'属性的模板也被公开了? –

+0

@MathiasMüller为什么命名模板和模式是公开的,如果由于软件包没有名称而无法引用它们? –

+0

它可能与3.0之前的XSLT(因此“兼容性”)有关,例如,命名模板可以导入到其他样式表中。由于任何样式表现在都转换为隐式包,因此不声明它们为公共可能会破坏现有代码。 (这只是一个猜测,我不知道能见度是否对进口产生影响)。 –

回答

1

隐式包是一个根源于xsl:stylesheet而非xsl:package元素;隐式包总是未命名的。但是,您也可以拥有一个以xsl:package元素为根的包,但不包含@name属性;这是未命名但不是隐含的。

公开组件意味着它们对调用API可见,例如,任何已命名的模板都可用作指定call-template和命名模板的入口点。如果他们是私人的,否则这是默认的,他们不能以这种方式被外部引用。

+0

谢谢迈克尔。你能改变一个隐式包中组件的声明的可见性,还是必须将根元素改为'xsl:package'? –

+0

我认为你可以用一个隐式包做非常好的事情,而不是将它用作'xsl:use-package'的目标。 –