- - PR -
SAXの妥当性検証について
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2004-03-09 00:53
SAXの妥当性検証について質問が御座います。
SAXにおいて妥当性検証が行なわれるタイミングについて 調べております。 下記のようなXML文書とスキーマを用意し 調べてみました。プログラムでは、タグやテキストが読みこまれる毎 に内容を表示させるようにしております。また、妥当性検証で XML文書がスキーマと一致しなかった場合も、エラーを表示する ようにしております。 質問したい事は、下記でcustomer.xmlはXMLSchemaの文法と一致しているのに 何故、 cvc-elt.1: Cannot find the declaration of element 'customer'. と表示されるのでしょうか? どなたかご存知の方がいらっしゃいましたらご教授お願い 致します。 ----customer.xml--------- <?xml version="1.0"?> <customer id="111111"> <name>Take</name> <address>Tokyo</address> </customer> ------customer.xsd--------- <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="customer"> <xsd:complexType> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="address" type="xsd:string" /> </xsd:sequence> <xsd:attribute name="id" type="xsd:string"/> </xsd:complexType> </xsd:element> </xsd:schema> -----コンソールに表示された内容------------ startDocument エラー: 2行目 cvc-elt.1: Cannot find the declaration of element 'customer'. startElement: customer characters: startElement: name characters: Take endElement: name characters: startElement: address characters: Tokyo endElement: address characters: endElement: customer endDocument ----SAXParseSample.java------------- import org.xml.sax.*; import org.xml.sax.helpers.*; import javax.xml.parsers.*; class SAXParseSample { public static void main(String[] args) { try { // SAXパーサのファクトリーの生成 SAXParserFactory factory = SAXParserFactory.newInstance(); // フィーチャーの設定 factory.setValidating(true); factory.setNamespaceAware(true); factory.setFeature("http://apache.org/xml/features/validation/schema",true); // SAXパーサの生成 SAXParser parser = factory.newSAXParser(); // ハンドラの生成 DefaultHandler handler = new SAXHandler(); // 解析 parser.parse(args[0],handler); } catch (Exception e) { e.printStackTrace(); } } } -----SAXHandler.java----------------- import org.xml.sax.*; import org.xml.sax.helpers.*; public class SAXHandler extends DefaultHandler implements ErrorHandler { public void startDocument() { System.out.println("startDocument"); } public void endDocument() { System.out.println("endDocument"); } public void startElement( String namespaceURI, String localName, String qName, Attributes atts) { System.out.println("startElement: " + qName); } public void endElement( String namespaceURI, String localName, String qName) { System.out.println("endElement: " + qName); } public void characters(char[] ch, int start, int length) { System.out.print("characters: "); for (int i = 0; i < length; i++) { System.out.print(ch[start + i]); } System.out.println(); } public void warning(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 fatalError(SAXParseException e) { System.out.println("深刻なエラー: " + e.getLineNumber() + "行目"); System.out.println(e.getMessage()); } } |
|
投稿日時: 2004-03-09 14:57
初めて投稿します。
ちょっとXML&Javaをかじってたので、参考書片手に読み返してみると・・ どうもcustomer.xmlにはスキーマ文書との関連付けがなされてないようです。 これがエラーの原因では?? 関連付けはルート要素に書き込むようですが・・ <?xml version="1.0"?> <customer xsi:xmlns="〜" xsi.shcemaLocation="〜">ってかんじ? まちがってたならすいまそん |
1
