17

パフォーマンスと精度の両方で推奨できる XML 検証ツールはどれですか。それぞれがシステムの重大な問題です。次の要件があります。

  • xmllintではありません(以下を参照)。
  • リラックスNG対応
  • Perl と簡単に統合できます (これはオプションですが、あると便利です)

なぜxmllintではないのですか?(これは背景です。必要に応じてスキップできます)

XML を検証するために RelaxNG を使用する大規模な Perl システムがあります。コンパクトなRelaxNG形式trangを使用して、標準のRelaxNG形式に変換します。次に、 xmllintを介して実際の検証を行います。

問題が発生するのはそのときです。xmllint には、検証エラーを誤って報告するという問題が定期的に発生します。誤検知や誤検知は発生しませんが、ドキュメントの検証に失敗した場合、xmllint は特定のエラーに対して間違った要素または属性を報告することがよくあります。エラーが正しい場合もありますが (「要素 'bar' が表示されるとは予想していませんでした)、それは以前のエラーが報告されていないためです ('bar' は必須であるが欠落している要素 'foo' に続くはずでしたが、xmllint はそうではないためです」)。これは xmllint の長年の問題であり、最新バージョンでさえ同じ問題を抱えていることに注意してください. 私たちはしばしば巨大な XML 文書を持っており、エラーを誤って報告すると、クライアントと開発者の両方に多くの悲しみをもたらします.

4

5 に答える 5

15

少なくとも今のところ、RNG 検証用の libxml2 ベースのツールを避ける必要があるという JDrago の考えは正しいと思います。私は自分のプロジェクトでもこれを発見しています。私は最近、RNG 検証に関する libxml2 に対する 2 つのバグを記録しました。

私はジンをお勧めします。これは、Relax NG の作成者であり、XML の世界をリードする人物の 1 人である James Clark によって書かれました。彼は、あなたがすでに使っている trang の作者でもあります。このコード (および trang) の開発は、先にリンクした Google Code サイトで最近再開されました。

Jing は、コンテンツとスキーマで一貫して正しいことが証明されており、libxml2 よりもはるかに優れたエラー メッセージを表示しますが、この点に関してはまだ多くの改善の余地があります。

libxml2/xmllint に対する jing の欠点の 1 つは、現在 OASIS XML カタログを使用して、スキーマを指すパブリックおよびシステム識別子と URI を解決していないことです。これは、'http' URI によって参照されるスキーマを含めた場合に問題になります。それらは常にネットワーク経由でフェッチされます。

于 2008-11-03T16:03:41.167 に答える
3

Hamcrest スキーマを使用すると、Hamcrest マッチャーを使用して、RelaxNG に対して XML ドキュメントを検証できます。

于 2010-01-11T20:14:54.810 に答える
2

私はRNVの作者です。これはsourceforge.netで管理されており、sourceforgeとdebianパッケージの両方のビルドを管理するメンテナがいます。コードが変更されていないのは、コードが安定しているためです。報告されたバグはありません。

于 2008-12-23T10:07:08.597 に答える
2

xmllintは他のものと同じ基礎となるライブラリ(libxml2など)を使用していると思います。同じライブラリの別のフロントエンドが異なる結果をもたらすと考えるのは直感に反します。

于 2008-11-03T15:16:26.317 に答える
2

rnvは非常に高速で、無料 (言論の自由のように) であり、コマンド ラインで実行されます (Perl で簡単に呼び出すことができます)。ほとんどの場合、メッセージは問題ありません。残念ながら、それはもう維持されていないようです。

于 2008-12-23T09:05:22.667 に答える