3

スキーマに対して XML を検証する必要があります。

XML::SAX::ParserFactory; を試してみました。XML::Validator::Schema および関連モジュールですが、制限されているようです。
xsd:unique、xsd:group、xsd:keyref、xsd:union、xsd:key などのスキーマ要素を認識しなかったという意味で制限されています。

これらの xsd:unique などは新しい追加ですか?

最新でタスクに対応しているいくつかのPerlモジュールを教えていただければ幸いです。

前もって感謝します。

4

3 に答える 3

10

XML::LibXMLを見てください。

これは、ほとんどの人が Expat およびXML::Parserベースのモジュールの後継として挙げている、高く評価されている libxml2 ライブラリを使用します。

スキーマの検証については、XML::LibXML::Schemaを参照してください。

use XML::LibXML;
use XML::LibXML::Schema;

my $schema = XML::LibXML::Schema->new(location => 'file.xsd' );
my $parser = XML::LibXML->new;

my $xml    = 'file.xml';
my $doc    = $parser->parse_file( $xml );

eval { $schema->validate( $doc ) };
die $@ if $@;

say "$xml is valid\n";

注意。私はまだ主にXML::Twigユーザーであり、XML スキーマにはほとんど触れていないので、XML::LibXML::Schema があなたの問題を解決するかどうかはわかりませんが、CPAN であなたのニーズに最適なソリューションである可能性があります。

于 2008-11-27T15:50:31.507 に答える
2

xmllint で検証してみましたか?

于 2008-11-26T23:18:48.497 に答える
1

@Thushan Perlを使用することは絶対に必要ですか? そうでない場合は、XMLSTARLETを試してみませんか? これは、ターミナルで XML を操作するための非常に優れたツールキットです!

必要に応じて従来の DTD と XSD をサポートするだけでなく、Relax-NG スキーマもサポートします。xmlstarlet を使用して XML ドキュメントを検証する方法については、ドキュメントを確認して ください。

良い一日を過ごしてください!

PD ああ、あなたが xmllint を使っているようですね! それも素晴らしいですが、私は xmlstarlet の方が好きです =) 試してみてください ;)

于 2012-02-17T20:12:09.323 に答える