11

簡単に検索すると、xsd (XML スキーマ) から rng (RelaxNG) または rnc (コンパクトな RelaxNG) に変換するすべての利用可能な (uUnix コマンド ライン) ツールには、何らかの問題があることがわかります。

まず、rngconv を使用する場合:

$ wget https://msv.dev.java.net/files/documents/61/31333/rngconv.20060319.zip
$ unzip rngconv.20060319.zip
$ cd rngconv-20060319/
$ java -jar rngconv.jar my.xsd  > my.rng

要素を非正規化する方法がないため、すべてが代替の開始要素になります (少しバグがあるようにも見えます)。

Trang は代替手段ですが、出力のみの入力で xsd ファイルをサポートしていません (なぜですか?)。ただし、DTD はサポートしています。DTD への変換が最初に思い浮かびますが、しっかりした xsd2dtd も見つけるのが困難です。以下のもの:

 $ xsltproc http://crism.maden.org/consulting/pub/xsl/xsd2dtd.xsl in.xsd > out.dtd

バギーらしい。

これはすべて非常に驚くべきことです。XML が何年にもわたって (乱用され) 使用されてきたにもかかわらず、これらの些細な基本タスクに適したコマンド ライン ツールはありませんか? 人々はエディターだけを使用していますか? それらは機能しますか?特にこれらのタスクを自動化したいので、私はコマンドラインを好みます。

これに関する啓発的なコメントはありますか?

4

5 に答える 5

4

確かに、trang は入力側で xsd を受け入れません。ただし、 Trang、仕様を満たす必要がある一連の xml ファイルを取得し、それらすべてに対して有効な rnc または rng スキーマを生成できます。

欠点:

  • 多くの準拠したxmlファイルが必要です(多いほど良いと思います)
  • 結果のスキーマは、おそらくまだ微調整を使用する可能性があります。

サンプルケース:

準拠している xml ファイルが格納されている場合1.xml 2.xml 3.xml 4.xml 5.xml

次のコマンドは、それらすべてに有効な rnc スキーマを出力するように trang に指示します。

java -jar trang.jar -I xml -O rnc 1.xml 2.xml 3.xml 4.xml 5.xml foo.rnc

結論

スキーマに適合する (または簡単に作成できる) xml ファイルの優れたテスト セットがある場合は、これが最適なオプションである可能性があります。

あなたの幸運をお祈りしています。

于 2009-07-07T21:56:31.687 に答える
4

XSD の変換は非常に難しい作業です。XSD 仕様は悪夢のようなものであり、非常に複雑です。いくつかの簡単な調査から、RelaxNG から XSD に移行するのは簡単であるように見えますが、その逆は正しくないか、可能でさえない可能性があります (Trang に関する質問を説明しています)。

エディターに関するあなたの質問が理解できません。ほとんどの人が最終的に XSD と RNG を手動で変換するかどうかを尋ねている場合は、そうです。

最善のアドバイスは、可能であれば XSD を避けるか、少なくとも RNG を決定的なドキュメントとして使用し、そこから XSD を生成することです。schematronも参照してください。

于 2008-09-23T17:25:11.687 に答える
2

のリストに追加されたオンライン コンバーター ( XSD -> RNGhttp://relaxng.org/#conversion ) があります。emacsでpom.xmlファイルを検証するためにmaven-v4_0_0.xsdを変換しようとしましたが、運がありませんでした。このサイトには、 で使用できる XSL スタイルシートも含まれていますがxsltproc、結果の品質は保証できません...

于 2010-02-20T12:12:18.330 に答える
0

繰り返しますが、エディターに関して: 人気のあるツールであると思われる Oxygen でこれを行う方法はないと思います。

于 2008-09-23T18:23:57.723 に答える
0

別の可能性はhttp://www.brics.dk/schematools/かもしれませんが、まだ試していません。

于 2008-11-27T12:24:15.743 に答える