倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

javax.xml.validation で妥当性検証の実行

前回は、javax.xml.validation.Schema オブジェクトの取得方法を見ました。 今回は、それを使って妥当性検証を実行する方法を見てみましょう。 妥当性検証の実行方法には以下の様なものがあるのでした:

  • SAXParser, DocumentBuilder の処理時に妥当性検証を行う
  • Validator オブジェクトを用いて妥当性検証を行う
  • ValidatorHandler オブジェクトを用いて妥当性検証を行う

SAXParser, DocumentBuilder の処理時に妥当性検証を行う


SAXParser や DocumentBuilder を用いて XML 文書を読み込む際に、妥当性検証を行うことができます。 ただし、Schema オブジェクトは、SAXParser や DocumentBuilder にではなく、それらを生成する SAXParserFactoryDocumentBuilderFactory などのファクトリ・クラスにセットします:

SAXParserFactory factory = SAXParserFactory.newInstance();

Schema schema = ...
factory.setSchema(schema);  // Schema を設定

SAXParser parser = factory.newSAXParser();
parser.parse(...);
  • Schema をセットする以外は、SAXParserFactory や DocumentBuilderFactory の使い方は通常通りです。
  • Schema がセットされている場合、isValidating() メソッドが false を返しても、妥当性検証は行われます。

Validator オブジェクトを用いて妥当性検証を行う


Validator クラスは(基本的に)妥当性検証のみを行うクラスです。 妥当性検証の実行の仕方は以下の通り:

  1. Schema オブジェクトを取得する
  2. Schema#newSchema() メソッドから Validator オブジェクトを取得する
  3. Validator#validate(Source) オブジェクトを用いて妥当性検証をする

例えば、"sample.xml" という XML ファイルに妥当性検証を行うには、以下のようにします:

Schema schema = ...
Validator v = schema.newSchema();  // Validator オブジェクトを生成
v.validate(new StreamSource("sample.xml"));  // 妥当性検証を実行

ValidatorHandler オブジェクトを用いて妥当性検証を行う


ValidatorHandler は org.xml.sax.ContentHandler を実装するクラスです。 使い方は、SAX イベントを伝える他の SAXContentHandler オブジェクトをセットした上で、その ValidatorHandler オブジェクトに SAX イベントを伝えます。 詳細は省略。