我想知道是否可以使用XSLT转换Relax NG XML。请给我一些教程。
我似乎无法将下面的RelaxNG架构中的语法标记与<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>
答案 0 :(得分:3)
Relax NG是一种表达XML语法的语言。 W3C XML Schema也是这样一种语言。然而,XSLT是一种将XML转换为另一种数据格式的语言。换句话说,它们涵盖了不同的理由。你真的想把Relax NG转换成XSLT吗?
您可以找到一些XSLT,您可以使用这些XSLT在Relax NG homepage上相互优化,转换您的Relax NG,DTD或XML Schema。
猜测:您可能真正想到的是通过其Relax NG架构验证现有XML的工具。您可以使用any one of the validators执行此操作。
编辑,根据您的上次评论。您的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>
答案 1 :(得分:1)
您的意思是,我可以将Relax NG模式编译到执行模式隐含的验证的XSLT样式表中吗?
答案是,是的,理论上你可以,如果你对(a)如何将BNF语法转换为有限状态自动机的计算机科学理论有很好的理解,以及(b)如何实现有限状态函数式编程语言中的自动机。
但不知何故,我怀疑如果这是你想做的事情,那么你就不会以你的方式提出这个问题。