ADOS Developer's Site - XML Stadium |
目次
Xerces2 Java ParserはApache XML プロジェクトで開発された、オープンソースのXMLパーサです。JavaプログラムのDOM APIを持つほか、XSDバリデーションの機能を持ちます。ここでは、簡単なXSDバリデーションのプログラムを用意し、コマンドラインでのXSDバリデーション実行方法を解説します。
Xerces2 Java Parserの実行にはJDK or JRE 1.2以上相当が必要です。
ここでは、Xerces2 Java Parser 2.6.2 / J2SE 1.4.2_08 / Windows2000 の環境を例に説明します。
Xerces2 Java Parserプロジェクトのページは下記URLです。
http://xml.apache.org/xerces2-j/
このページからダウンロードページのミラーサイトを辿ることができます。(ショートカット)
ミラーサイトから、Xerces-J-bin.2.6.2.zip または Xerces-J-bin.2.6.2.tar.gz をダウンロードします。このアーカイブには xercesImpl.jar ファイルおよび xml-apis.jar ファイルが含まれています。この2つのファイルを適当なフォルダへコピーします。ここで、このフォルダを{XERCES_HOME}とします。
Xerces2にはコマンドラインで利用できるXSDバリデーションツールが付属していません。そのため、下記のプログラムを利用します。このプログラムのjarファイル(xsdvalid.jar)を{XERCES_HOME}へコピーします。
【ValidatingXMLDOMParser.java】
/* This source comes from http://www.experts-exchange.com/Web/Web_Languages/XML/Q_21058568.html */ import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.xml.sax.helpers.DefaultHandler; import org.apache.xerces.parsers.DOMParser; import org.apache.xerces.parsers.XMLParser; import java.io.File; import org.w3c.dom.Document; public class ValidatingXMLDOMParser { public void validateSchema(String SchemaUrl, String XmlDocumentUrl) { try { DOMParser domParser = new DOMParser(); domParser.setFeature("http://xml.org/sax/features/validation",true); domParser.setFeature("http://apache.org/xml/features/validation/schema",true); domParser.setFeature("http://apache.org/xml/features/validation/schema-full-checking",true); domParser.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation" ,SchemaUrl); Validator handler=new Validator(); domParser.setErrorHandler(handler); domParser.parse(XmlDocumentUrl); if(!handler.validationError) System.out.println("XML Document is valid"); } catch(java.io.IOException e) { System.out.println(e); } catch (SAXException e) { System.out.println(e); } } private class Validator extends DefaultHandler { public boolean validationError = false; public void error(SAXParseException e) throws SAXException { validationError = true; System.out.println(e); } public void fatalError(SAXParseException e) throws SAXException { validationError = true; System.out.println(e); } public void warning(SAXParseException e) throws SAXException { validationError = true; System.out.println(e); } } public static void main(String[] argv) { String SchemaUrl=argv[0]; String XmlDocumentUrl=argv[1]; ValidatingXMLDOMParser validator=new ValidatingXMLDOMParser(); validator.validateSchema(SchemaUrl, XmlDocumentUrl); } }
このプログラムでは、外部の(XMLファイルにおいてxsi:noNamespaceSchemaLocation属性やxsi:schemaLocation属性で指定されていない)、かつ対象名前空間の指定されていないXSDファイルを利用します。
XSDファイルを適当なフォルダへコピーします。ここで、XSDファイルのパスを{XSD_PATH}とします。(サンプル:sample.xsd)
XMLファイルを適当なフォルダへコピーします。ここで、XMLファイルのパスを{XML_PATH}とします。(不正なXMLのサンプル:sample.xml)
以下のフォーマットでコマンドを実行します。下記2行は一行のコマンドとして記述します。
java -classpath {XERCES_HOME}\xercesImpl.jar;{XERCES_HOME}\xml-apis.jar;
{XERCES_HOME}\xsdvalid.jar ValidatingXMLDOMParser {XSD_PATH} {XML_PATH}
具体的なコマンドの例
java -classpath .\xercesImpl.jar;.\xml-apis.jar;.\xsdvalid.jar ValidatingXMLDOMParser sample.xsd sample.xml
XMLファイルがXSDファイルに対して正常であれば、下記の文字列を出力します。
XML Document is valid
XMLファイルがXSDファイルに対して不正であれば、下記のようなエラーメッセージを出力します。
【エラーメッセージ例】
org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '1.1' is not a valid value for 'boolean'. org.xml.sax.SAXParseException: cvc-type.3.1.3: The value '1.1' of element 'cell' is not valid.
Copyright 2005-2008. ADOS Co., Ltd. All Rights Reserved. |