我正在研究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)
为什么我要在架构元素或属性上匹配?有什么用?
答案 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处理器的一个示例。