libxml2を使って、DTD、XML Schema、RELAX NGを検証に使用する

初稿: 2005-08-26

libxml2は3つのスキーマ言語を実装

XMLパーサlibxml2は優れたライブラリ、ツールで、DTDはもちろん、XML SchemaやRELAX NGを使って、XML文書を検証できます。これだけで3つのスキーマ言語を実装するので、スキーマ定義を複数の言語で用意する場合など大変重宝します。

XMLパーサlibxml2を使って実際に検証

libxml2はC言語で書かれたXMLパーサであり、複数のライブラリ、ツールを提供します。また、オープンソースのデスクトップ環境を提供するGnomeプロジェクトの一環であり、MITというライセンスにより提供されています。今回はlibxml2のコマンドラインツールであるxmllintを使ってXML文書を検証してみます。まず最も基本となる使い方を見てみましょう。

xmllint [オプション] XMLファイル

上記の構文により、「XMLファイル」を解析します。もし「オプション」を何も指定しなかった場合、解析したXMLをそのまま出力します。日本語文字が「は」というように文字参照に置き換えられますが、指定したXMLファイルの内容がほぼそのまま出力されるだけなので、これ自体にはあまり使い道はないでしょう。ではまず、DTDによりXML文書を検証してみます。

xmllint ––noout ––valid XMLファイル

オプション「––valid」でDTDによる検証を指定します。「XMLファイル」の中の文書型宣言を解析してDTDの場所を自動的に検出してロードします。これにより、XML文書自体にDTDが記述してあるような内部サブセットでも、ローカルやインターネット上の別のファイルにDTDが記述してあるような外部サブセットでもロードできます。ちなみにオプション「––noout」ですが、ここでは検証結果だけを見たいので、解析したXMLを出力しないように指定しています。なおDTDによる検証結果が妥当だった場合は、何も出力されません。エラーがあった場合にはそのエラー箇所が出力されます。次にXML Schemaにより検証してみます。

xmllint ––noout ––schema XML_Schemaファイル XMLファイル

オプション「––schema XML_Schemaファイル」でXML Schemaファイルを指定し、「XMLファイル」を検証します。検証結果が妥当だった場合には「ファイル名 validates」と出力され、エラーがあった場合にはそのエラー箇所が出力されます。次にRELAX NGにより検証してみます。

xmllint ––noout ––relaxng RELAX_NGファイル XMLファイル

オプション「––relaxng RELAX_NGファイル」でRELAX NGファイルを指定し、「XMLファイル」を検証します。検証結果の出力はXML Schemaの場合と同様です。これらのようにほとんど同じ使い方で3つのスキーマ言語が検証に使用できるので、ぜひ覚えてもらいたいツールです。


目次へ戻る