(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ファイル(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ファイルとXMLファイルの用意 †
XSDファイルを適当なフォルダへコピーします。ここで、XSDファイルのパスを{XSD_PATH}とします。(サンプル:sample.xsd)
XMLファイルを適当なフォルダへコピーします。ここで、XMLファイルのパスを{XML_PATH}とします。(不正なXMLのサンプル:sample.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.
- mV0Dy3 <a href="http://fvclrbwjbqaq.com/">fvclrbwjbqaq</a>, [url=http://cynwvnnydips.com/]cynwvnnydips[/url], [link=http://ijluplzmigfa.com/]ijluplzmigfa[/link], http://dnhcfyszebrx.com/ -- dghbts
- http://www.youtube.com/EgilLeofwine#1 discount tramadol, 924421018238, -- soma bay
- http://www.youtube.com/EgilLeofwine#1 tramadol drug, 487, -- accupril
- http://www.youtube.com/TaunoWebster#1 accupril, ewqmggzqyphw, -- abilify
- http://www.youtube.com/PerseusRodolfo#1 soft cialis, qgpzvw, -- viagra online
- http://www.youtube.com/ColtonThemba#1 abana, ajlzumdc, -- celexa
- http://www.youtube.com/ShunVeasna#1 acomplia, :PPP, -- soft viagra
- http://www.youtube.com/LauritsYudel#1 effects zoloft, wzbxblaf, -- buy xenical
- http://www.youtube.com/YngvarFabien#1 buy viagra, xfzleqult, -- zoloft
- http://www.youtube.com/JeraldVojtgch#1 buy xenical, =-(, -- escitalopram
- http://www.youtube.com/YngvarFabien#1 viagra online, 1883464340, -- soft cialis
- http://www.youtube.com/ShunVeasna#1 acomplia online, 906665807719, -- cialis
- http://www.youtube.com/RedChandlers#1 propecia online, npwjm, -- acutane
- http://www.youtube.com/AlbinCorey#1 citalopram side effects, 4221994, -- generic tadalafil
- http://www.youtube.com/MikheilEstebe#1 levitra, 57882226, -- acutane
- http://www.youtube.com/TaunoWebster#1 accupril, =-PPP, -- abilify
- http://www.youtube.com/PippinYvon#1 celexa, tyqjevll, -- tramadol
- http://www.youtube.com/OrsinoImre#1 revatio, :-DDD, -- buy cialis
- http://www.youtube.com/PippinYvon#1 celexa, mqejngmm, -- celexa
- http://www.youtube.com/PerseusRodolfo#1 soft cialis, (, -- revatio
- http://www.youtube.com/BimaChristian#1 tramadol ultram, pyuojj, -- abilify
- http://www.youtube.com/ColtonThemba#1 habana, mufz, -- accupril
- http://www.youtube.com/DexterPhilberts#1 prozac, ajdgkbxlkgkn, -- propecia
- http://www.youtube.com/SaleemConnla#1 abilify, 86560009, -- phentrimine
- http://www.youtube.com/MikheilEstebe#1 levita, 924774, -- revatio
- http://www.youtube.com/MikheilEstebe#1 levitra, snsnb, -- abilify
- http://www.youtube.com/ColtonThemba#1 abana, 51291749, -- abilify
- http://www.youtube.com/LauritsYudel#1 effects zoloft, jczi, -- soft viagra
- http://www.youtube.com/HarriJerrard#1 tamiflu, 22156803795, -- cheap ultram
- http://www.youtube.com/ShunVeasna#1 acomplia, jlqmgsrkvol, -- celexa
- http://www.youtube.com/ColtonThemba#1 abana, 676198, -- revatio
- http://www.youtube.com/HarriJerrard#1 tamiflu, 266, -- celexa
- http://www.youtube.com/ColtonThemba#1 habana, =-PP, -- tamiflu
- http://www.youtube.com/PontusHemming#1 phentrimine, cdjf, -- ultram online
- http://www.youtube.com/MikheilEstebe#1 levita, 85287397864, -- roaccutane
- http://www.youtube.com/MikheilEstebe#1 levita, fmrempd, -- abilify
- http://www.youtube.com/TaunoWebster#1 accupril, 0483, -- buy xenical
- http://www.youtube.com/DexterPhilberts#1 prosac, apqsa, -- cialis
- http://www.youtube.com/PerseusRodolfo#1 generic tadalafil, ncduzqklurqi, -- accupril
- http://www.youtube.com/DexterPhilberts#1 prosac, 3609, -- soft cialis
- http://www.youtube.com/LauritsYudel#1 generic zoloft, cbev, -- xenical
- http://www.youtube.com/SheldonRobert#1 clomid success, 019428, http://www.youtube.com/EwaldElias#1 cheap adipex, freefj, http://www.youtube.com/NoakAmerigo#1 celexa, 0717815, http://www.youtube.com/InnokentiJob#1 avandia, >:OO, http://www.youtube.com/RajeshHernando#1 valacyclovir, zzou, -- anastrozole
- http://www.youtube.com/KapilaTemitope#1 abilify, %-P, http://www.youtube.com/RuslanPatrizio#1 benadryl, %[, http://www.petitiononline.com/accutan/petition.html roaccutane, >:OO, http://www.youtube.com/ToreVadim#1 ciprofloxacin, 260371, http://www.youtube.com/OzIestyn#1 cephalexin, 9683489, -- abilify
- http://www.youtube.com/HeshamBelenus#1 augmentin, 8[, http://www.youtube.com/EwaldElias#1 adipex p, rkdhcogl, http://www.youtube.com/SusilaBakr#1 atenolol side effects, 8530, http://www.youtube.com/InnokentiJob#1 avandia, >:]], http://www.youtube.com/ColtenEelis#1 anastrozole, nrnqu, -- benedryl
- http://www.youtube.com/KapilaTemitope#1 abilify, >:O, http://www.youtube.com/RuslanPatrizio#1 benedryl, %-], http://www.youtube.com/GudmundIsrael#1 coumadin, ovjqogbncqy, http://www.youtube.com/InnokentiJob#1 avandia, %-PPP, http://www.youtube.com/DudelMin#1 biaxin, 73989829, -- buy adipex
- http://www.youtube.com/HeshamBelenus#1 augmentin, :-DD, http://www.youtube.com/GudmundIsrael#1 coumadin, 8-]]], http://www.youtube.com/ToreVadim#1 cipro side effects, oqdovhiz, http://www.youtube.com/OzIestyn#1 cephalexin 500mg, %]], http://www.youtube.com/ColtenEelis#1 anastrozole, 802199217411, -- buy clomid
- http://www.youtube.com/HeshamBelenus#1 augmentin, fhfrgecpgr, http://www.youtube.com/EliezerTakis#1 alli, gkw, http://www.youtube.com/YuutoBartomeu#1 citalopram effects, :-OOO, http://www.youtube.com/DudelMin#1 bioxin, %), http://www.youtube.com/VernerKwasi#1 generic tadalafil, wul, -- augmentin
- http://www.youtube.com/BalaTheocritus#1 arimidex, 8385785639, http://www.youtube.com/KapilaTemitope#1 abilify, iyfkzu, http://www.youtube.com/SheldonRobert#1 clomid and, 99729941, http://www.petitiononline.com/accutan/petition.html roaccutane, 5208, http://www.youtube.com/OzIestyn#1 cephalexin, 996386517047, -- abilify
- http://www.youtube.com/BalaTheocritus#1 arimidex, :-], http://www.youtube.com/RuslanPatrizio#1 benadryl, 991699, http://www.youtube.com/SheldonRobert#1 clomid and, >:-)), http://www.youtube.com/NoakAmerigo#1 celexa, 8-[[[, http://www.youtube.com/ColtenEelis#1 anastrozole, =-[[, -- generic tadalafil
- http://www.youtube.com/RuslanPatrizio#1 benadryl, 6851124, http://www.youtube.com/GudmundIsrael#1 coumadin, 718681799, http://www.youtube.com/ToreVadim#1 cipro, hdamnjfhtnfy, http://www.youtube.com/RajeshHernando#1 aciclovir, 8))), http://www.youtube.com/VernerKwasi#1 tadalafil, 828164, -- coumadin
- http://www.youtube.com/KapilaTemitope#1
- http://www.youtube.com/RuslanPatrizio#1 benedryl, %], http://www.youtube.com/AkiBlake#1 bactrim ds, gwpdtdy, http://www.youtube.com/DudelMin#1 bioxin, muzucdrxeyyh, http://www.youtube.com/OzIestyn#1 cephalexin 500mg, >:-D, http://www.youtube.com/VernerKwasi#1 soft cialis, 402879, -- citalopram
- http://www.youtube.com/EliezerTakis#1
- http://www.youtube.com/HeshamBelenus#1 augmentin, kedrug, http://www.youtube.com/EliezerTakis#1 alli, ylefvuqdpcg, http://www.youtube.com/NoakAmerigo#1 celexa, vnywp, http://www.youtube.com/YuutoBartomeu#1 citalopram side effects, xayulkrifey, http://www.youtube.com/VernerKwasi#1 buy cialis, 3034, -- cephalexin 500mg
- http://www.youtube.com/BalaTheocritus#1 arimidex, :-DD, http://www.youtube.com/EliezerTakis#1 alli, 624036, http://www.youtube.com/RajeshHernando#1 valacyclovir, 8449, http://www.youtube.com/VernerKwasi#1 soft cialis, rwbvxyfngvqq, http://www.youtube.com/ColtenEelis#1 anastrozole, wjoue, -- citalopram hydrobromide
- http://www.youtube.com/KapilaTemitope#1 abilify, lqxkuoiiyec, http://www.youtube.com/SusilaBakr#1 atenolol, :-O, http://www.youtube.com/NoakAmerigo#1 celexa, :-O, http://www.youtube.com/RajeshHernando#1 valacyclovir, %OOO, http://www.youtube.com/VernerKwasi#1 generic tadalafil, 19147959803, -- tadalafil
- http://www.youtube.com/SheldonRobert#1 on clomid, ifwlivdwbw, http://www.youtube.com/SusilaBakr#1 atenolol side effects, %)), http://www.youtube.com/ToreVadim#1 ciprofloxacin, dzpnp, http://www.youtube.com/RajeshHernando#1 valacyclovir, evdvgimqi, http://www.youtube.com/DudelMin#1 bioxin, 4790964460, -- bactrim ds