[ADOS] ADOS Developer's Site - XML Stadium
ADOS Company slogan - XML Total Solution

【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/

m1.gif

このページからダウンロードページのミラーサイトを辿ることができます。(ショートカット

m2.gif

ミラーサイトから、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ファイル(filexsdvalid.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ファイルとXMLファイルの用意

XSDファイルを適当なフォルダへコピーします。ここで、XSDファイルのパスを{XSD_PATH}とします。(サンプル:filesample.xsd

XMLファイルを適当なフォルダへコピーします。ここで、XMLファイルのパスを{XML_PATH}とします。(不正なXMLのサンプル:filesample.xml


XSDバリデーションの実行

以下のフォーマットでコマンドを実行します。下記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.


添付ファイル: filesample.xsd 1254件 [詳細] filesample.xml 1149件 [詳細] filexsdvalid.jar 1048件 [詳細] filem2.gif 948件 [詳細] filem1.gif 927件 [詳細]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: Wed, 16 Sep 2009 11:18:02 JST (3171d)

Copyright 2005-2008. ADOS Co., Ltd. All Rights Reserved.