XML Schema 定義されたXMLを解析する
次のようなXML Schemaで定義されたXML文書を解析するサンプル。
XML Schemaにしてみたものの、先日のDTDと同じ構成のものにしたつもり。
でも、間違えているところがあるかも・・・
<?xml version="1.0"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:org="sample" targetNamespace="http://www.sample.com/myoriginal"> <element name="sample"> <complexType> <sequence> <element ref="org:elementA" minOccurs='0' maxOccurs='unbounded'/> <element ref="org:elementB" minOccurs='0' maxOccurs='unbounded'/> </sequence> </complexType> </element> <element name="elementA"> <complexType> <element ref="org:name" minOccurs='1' maxOccurs='1'/> </complexType> </element> <element name="elementB"> <complexType> <element ref="org:someTag" minOccurs='1' maxOccurs='1'/> </complexType> <attribute name="someAttr" type="string" use="required"/> </element> <element name="name" type="string"/> <element name="someTag"> <complexType> <attribute name="value" type="string" use="required"/> </complexType> </element> </schema>
上記XML Schemaで定義されるXMLは以下のようになる。
<?xml version="1.0" encoding="UTF-8"?> <org:sample xmlns:org="sample" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="sample.xsd"> <org:elementA> <org:name>ElementA_Name</org:name> </org:elementA> <org:elementB someAttr="B"> <org:someTag value="someValue"/> </org:elementB> </org:sample>
Javaのサンプルは以下の通り。
import org.w3c.dom.Document; import org.apache.xerces.parsers.DOMParser; import org.xml.sax.SAXException; import java.io.IOException; public class MySimpleParseWithNS { public static void main(String[]args){ try { DOMParser parser = new DOMParser(); // 妥当性検証を実行するようにParserに指示する parser.setFeature("http://xml.org/sax/features/validation", true); // 名前空間を使用するようにParserに指示する parser.setFeature("http://xml.org/sax/features/namespaces", true); parser.parse(args[0]); Document doc = parser.getDocument(); System.out.println(args[0] + " is a valid xml."); } catch( SAXException e ){ System.err.println("Parser error found: " + e.getMessage()); System.exit(1); } catch( IOException e ){ System.err.println("IO error found: " + e.getMessage()); System.exit(1); } } }
上記Javaサンプルで、上記XML Schemaのサンプルを解析したらエラーが出るわ出るわ・・・
一つずつ、何が原因かを探りながら直していこう。