0

I want to know whether it is possible to transform Relax NG XML with XSLT. Please give me some tutorial.

I don't seem to be able to match the grammar-tag in the RelaxNG schema below with <xsl:template match="grammar">

<grammar>

  <start>
    <element name="html">
      <zeroOrMore>
        <ref name="section"/>
      </zeroOrMore>
    </element>
  </start>

  <define name="section">
    <element name="div">
      <attribute name="class"><value>section</value></attribute>
      <zeroOrMore>
        <element name="para">
          <text/>
        </element>
      </zeroOrMore>
      <zeroOrMore>
        <ref name="subsection"/>
      </zeroOrMore>
   </element>
  </define>



</grammar>
4

2 回答 2

3

Relax NG 是一种用于表达 XML 语法的语言。W3C XML Schema 也是这样一种语言。然而,XSLT 是一种将 XML 转换为另一种数据格式的语言。换句话说,它们涵盖不同的理由。你真的是想把Relax NG 转换成XSLT 吗?

您可以在Relax NG 主页上找到相当多的 XSLT,可用于优化、转换等您的 Relax NG、DTD 或 XML Schema 。

只是猜测:您可能实际上是在使用一种通过其 Relax NG 模式验证现有 XML 的工具。您可以使用任何一个验证器来做到这一点。

编辑,根据您的最后评论。你没有被命中的原因xsl:template很可能是因为你没有指定 RelaxNG 命名空间。您没有显示任何代码,但尝试将以下内容应用于您的样式表(请注意,名称空间前缀无关紧要,不需要在源 XML 文档中):

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ng="http://relaxng.org/ns/structure/1.0">

    <xsl:template match="ng:grammar">
        <xsl:text>Grammar found!</xsl:text>
    </xsl:template>
</xsl:stylesheet>
于 2012-03-22T10:02:30.973 回答
1

你的意思是,我可以将一个 Relax NG 模式编译成一个 XSLT 样式表来执行模式隐含的验证吗?

答案是,是的,理论上你可以,如果你对以下计算机科学理论有很好的理解:(a)如何将 BNF 语法转换为有限状态自动机,以及(b)如何在 a 中实现有限状态自动机函数式编程语言。

但是,不知何故,我怀疑如果这是您想要做的,那么您就不会以您的方式提出问题。

于 2012-03-22T10:43:08.317 回答