<更新記録>
2007年 11月 19日
作成

姉妹サイト検索 Web検索


XMLSchemaで妥当性検証その2

XMLSchemaで妥当性検証で、一般的なXMLSchemaでの妥当性検証の方法をまとめましたが、 その方法だと、schemaLocationやnoNamespaceSchemaLocation等の記述をXMLファイルにすることで、 あらかじめXMLスキーマファイルを関連づけておかなければなりませんでした。 しかし、XMLファイルとXMLスキーマファイルの関連を、完全に分離したい場合もあります。 そこで使うJAXPが、javax.xml.validation.Validatorクラスです。

javax.xml.validation.Validatorを使ったサンプル

用意するものは以下の3つです。

  • Javaソースファイル(./Validation.java)
  • XMLファイル(./sample.xml)
  • XMLSchemaファイル(./sample.xsd)

以下最も簡単なサンプルを紹介します。

Javaソースファイル(./Validation.java)
public class Validation {
	public static void main(String[] args) throws SAXException, IOException {
		DocumentBuilderFactory factory;
		DocumentBuilder builder;
		SchemaFactory sFac;
		Schema schema;
	
		factory = DocumentBuilderFactory.newInstance();
		factory.setNamespaceAware(true);
		factory.setSchema(schema);
		builder = factory.newDocumentBuilder();
	
		Document doc = builder.parse(new File("./sample.xml"));
	
		// 妥当性検証
		sFac = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
		schema = sFac.newSchema(new File("./sample.xsd"));
		Validator validator = schema.newValidator();
		validator.validate(new DOMSource(doc));
	}
}
XMLファイル(./sample.xml)
<?xml version="1.0" encoding="UTF-8"?>

<root>
    <number1>aiu</number1>
	<number2>eo</number2>    
</root>
XMLSchemaファイル(./sample.xsd)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<xsd:element name="root">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="number1" type="xsd:string"/>
				<xsd:element name="number2" type="xsd:string"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
</xsd:schema>

しかしXMLReader(及びSAXParser)でこの検証方法を使用すると、 ストリームから2回読み込まなくてはならなくなります。(検証時とパース時) その問題を解決する方法を、 XMLSchemaで妥当性検証(javax.xml.validation.ValidatorHandler) で紹介します。


Powered by VeryEasyCMS