![]() |
ADOS Developer's Site - XML Stadium |
![]() |
![]() |
|
![]() |
【Xercesを利用したXSDバリデーションの実行】(2005/06/01 溝口@アドス)
目次 概要 †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のダウンロードとインストール †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ファイル( 【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ファイルとXMLファイルの用意 †XSDファイルを適当なフォルダへコピーします。ここで、XSDファイルのパスを{XSD_PATH}とします。(サンプル: XMLファイルを適当なフォルダへコピーします。ここで、XMLファイルのパスを{XML_PATH}とします。(不正なXMLのサンプル: XSDバリデーションの実行 †以下のフォーマットでコマンドを実行します。下記2行は一行のコマンドとして記述します。
具体的なコマンドの例 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. |