前回は、javax.xml.validation.Schema オブジェクトの取得方法を見ました。 今回は、それを使って妥当性検証を実行する方法を見てみましょう。 妥当性検証の実行方法には以下の様なものがあるのでした:
- SAXParser, DocumentBuilder の処理時に妥当性検証を行う
- Validator オブジェクトを用いて妥当性検証を行う
- ValidatorHandler オブジェクトを用いて妥当性検証を行う
SAXParser, DocumentBuilder の処理時に妥当性検証を行う
SAXParser や DocumentBuilder を用いて XML 文書を読み込む際に、妥当性検証を行うことができます。 ただし、Schema オブジェクトは、SAXParser や DocumentBuilder にではなく、それらを生成する SAXParserFactory や DocumentBuilderFactory などのファクトリ・クラスにセットします:
SAXParserFactory factory = SAXParserFactory.newInstance(); Schema schema = ... factory.setSchema(schema); // Schema を設定 SAXParser parser = factory.newSAXParser(); parser.parse(...);
- Schema をセットする以外は、SAXParserFactory や DocumentBuilderFactory の使い方は通常通りです。
- Schema がセットされている場合、isValidating() メソッドが false を返しても、妥当性検証は行われます。
Validator オブジェクトを用いて妥当性検証を行う
Validator クラスは(基本的に)妥当性検証のみを行うクラスです。 妥当性検証の実行の仕方は以下の通り:
- Schema オブジェクトを取得する
- Schema#newSchema() メソッドから Validator オブジェクトを取得する
- 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 イベントを伝えます。 詳細は省略。