schema-element和schema-attribute的用途是什么

时间:2014-08-26 21:44:08

标签: xml xslt schema xslt-2.0

我正在研究XSLT,并从规范http://www.w3.org/TR/xslt20/#conflict

中找到了优先事项

我想知道为什么以下用于:

schema-element(E)   0.25    (matches by substitution group and type)
schema-attribute(A) 0.25    (matches by name and type)

为什么我要在架构元素或属性上匹配?有什么用?

2 个答案:

答案 0 :(得分:5)

schema-element()非常有用,因为您可以匹配替换组的所有成员;如果你正在使用一个充分利用替换组的模式,那么这确实非常方便。 (但schema-attribute()的用处非常少,因为很少有模式使用全局属性声明。)

编写模式感知代码的最大好处是调试更容易:因为系统有更多关于XML结构的信息,所以当你出错时它可以为你提供编译时诊断。

例如,如果你写

<xsl:template match="schema-element(books)">
  <xsl:value-of select="books/@title"/>
</xsl:template>

然后,架构感知的XSLT处理器可能会检测到架构不允许有效的“books”元素具有名为“books”的子元素,因此它可以在编译样式表时提醒您注意此错误。如果你只是写了match =“books”,那么就没有指向架构信息的链接,因此这种推断是不可能的。你会遇到经典问题,找出你的样式表没有产生输出的原因。

虽然在大多数情况下它可能会很小,但可能会有一些性能优势,并且可能会因验证源文档的额外成本而被取消。

答案 1 :(得分:2)

Schema-element()schema-attribute()支持模式感知的XSLT处理,它利用类型检查来提高表达能力,并帮助在开发周期的早期检测错误。

对模式感知XSLT处理的好处的一个很好的介绍是Schema-aware processing with XSLT 2.0.

请注意,您的XSLT 2.0处理器必须支持架构感知处理。 Saxon-EE是支持模式感知处理的XSLT 2.0处理器的一个示例。