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

fsc*_*ore 2 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)
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*Kay 5

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

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

例如,如果你写

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

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

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