JavaでXMLSchemaで検証する方法
XML Schemaを作ったのはいいけど、検証方法がどうやったら?
ってことで、ググって調べてみて、@ITの記事を元にちょっと書き換えて書いてみました。
http://www.atmarkit.co.jp/fjava/javatips/129java024.html
J2SE6なら、何のライブラリをインストールしなくても動きました。
import javax.xml.parsers.SAXParserFactory; import org.xml.sax.ErrorHandler; import org.xml.sax.SAXParseException; import org.xml.sax.XMLReader; public class tt { public static void main(String[] args) { try { XMLReader objXml=SAXParserFactory.newInstance().newSAXParser().getXMLReader(); // エラーハンドラ設定 objXml.setErrorHandler(new ErrorHandler(){ public void fatalError(SAXParseException e) { System.out.println("致命的なエラー: " + e.getLineNumber() +"行目"); System.out.println(e.getMessage()); } public void error(SAXParseException e) { System.out.println("エラー: " + e.getLineNumber() +"行目"); System.out.println(e.getMessage()); } public void warning(SAXParseException e) { System.out.println("警告: " + e.getLineNumber() + "行目"); System.out.println(e.getMessage()); } }); // XMLSchemaによる検証処理を有効に objXml.setFeature("http://xml.org/sax/features/validation", true); objXml.setFeature("http://apache.org/xml/features/validation/schema",true); objXml.setFeature("http://xml.org/sax/features/namespaces",true); // 実行時引数で指定されたファイルについて解析を行う objXml.parse(args[0]); System.out.println("検証処理を終了しました。"); } catch (Exception e) { e.printStackTrace(); } } }
以下は前に書いてた、XML Schemaとxmlファイルです。
exp.xsd
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xml.netbeans.org/schema/exp" xmlns:tns="http://xml.netbeans.org/schema/exp" elementFormDefault="qualified"> <xsd:element name="exp"> <xsd:complexType> <xsd:group ref="tns:exp"/> </xsd:complexType> </xsd:element> <xsd:group name="exp"> <xsd:choice> <xsd:element name="number"> <xsd:simpleType> <xsd:restriction base="xsd:short"/> </xsd:simpleType> </xsd:element> <xsd:element name="add"> <xsd:complexType> <xsd:sequence> <xsd:group ref="tns:exp"/> <xsd:group ref="tns:exp"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="sub"> <xsd:complexType> <xsd:sequence> <xsd:group ref="tns:exp"/> <xsd:group ref="tns:exp"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="mul"> <xsd:complexType> <xsd:sequence> <xsd:group ref="tns:exp"/> <xsd:group ref="tns:exp"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="div"> <xsd:complexType> <xsd:sequence> <xsd:group ref="tns:exp"/> <xsd:group ref="tns:exp"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:choice> </xsd:group> </xsd:schema>
exp.xml
<?xml version="1.0" encoding="UTF-8"?> <exp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xml.netbeans.org/schema/exp" xsi:schemaLocation="http://xml.netbeans.org/schema/exp exp.xsd"> <add> <div> <sub> <number>1</number> <number>2</number> </sub> <number>3</number> </div> <add> <number>4</number> <number>5</number> </add> </add> </exp>