2012-03-22 6 views
0

リラックスNG XMLをXSLTで変換できるかどうかを知りたい。チュートリアルを教えてください。XSLTでRelax NG xmlを読むことはできますか?

私はNGがXMLの文法を表現するための言語であるリラックス<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> 

答えて

3

して以下のRelaxNGスキーマで文法タグが一致することはできていないようです。 W3C XMLスキーマもそのような言語です。しかし、XSLTは、XMLを別のデータ形式に変換する言語です。言い換えれば、彼らは異なる根拠をカバーしています。あなたはRelax NGをXSLTに変換することを本当に意味しますか?

あなたは、Relax NG homepageのRelax NG、DTD、またはXMLスキーマを相互に最適化したり、変換したりするために使用できるかなりのXSLTを見つけることができます。

ちょっと推測しておけば、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> 
+0

はい、Relax NGをXSLTに変換するだけですか? – user1283110

+0

@ user1283110 _ "xsltで構文の型が読めるようになっていますか?私はいくつかのサンプルを提供しています。"この新しい "_"では、XSLTを使ってXMLを読み込み/変換できます。 NG _is_ XMLをリラックスして、XSLTで読むことができます。しかし、Relax NGをXSLTに変換することはできません。なぜなら、それらは完全に異なる獣であるからです(1つは検証用、もう1つは変換用です)。技術的にはXSLTにバリデーターを書くことが可能ですが、もし存在すればわかりません。周囲には多くのバリデータがあるので、私はその必要性を見ません。 – Abel

+0

@ Abelしかし、私はxslt で文法タグを取得しなかったので、一致しないように名前空間を持つ文法タグに入れました – user1283110

1

Relax NGスキーマを、スキーマが暗示する検証を実行するXSLTスタイルシートにコンパイルできますか?

答えは、理論的には、(a)BNF文法を有限状態オートマトンに変換する方法、および(b)有限状態機械を実装する方法関数型プログラミング言語でのオートステートオートマトンです。

どういうわけか、私はこれがあなたがしたいと思ったことなら、あなたが行った方法で質問しなかったと思います。

+0

申し訳ありません次回この間違いを修正します – user1283110

関連する問題