2012-12-14 20 views
9

XMLファイルの検証にはthis tutorialを続けました。しかし、私はXMLファイルの検証時に例外を受け取ります。私が間違っていることは何ですか?マイコード:
XMLスキーマ:Java XMLスキーマの検証:プレフィックスがバインドされていない

<?xml version="1.0" encoding="utf-8" ?> 

<!-- definition of simple elements --> 
<xs:element name="first_name" type="xs:string" /> 
<xs:element name="last_name" type="xs:string" /> 
<xs:element name="phone" type="xs:string" /> 

<!-- definition of attributes --> 
<xs:attribute name="type" type="xs:string" use="required"/> 
<xs:attribute name="date" type="xs:date" use="required"/> 

<!-- definition of complex elements --> 

<xs:element name="reporter"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="first_name" /> 
      <xs:element ref="last_name" /> 
      <xs:element ref="phone" /> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="report"> 
    <xs:complexType> 
     <xs:attribute ref="type"/> 
     <xs:attribute ref="date" /> 
     <xs:sequence> 
      <xs:element ref="reporter" /> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

検証するXMLファイル:検証するための

<?xml version="1.0" encoding="utf-8" ?> 
<report type="5" date="2012-12-14"> 
    <reporter> 
     <first_name>FirstName</firstname> 
     <last_name>Lastname</lastname> 
     <phone>+xxxxxxxxxxxx</phone> 
    </reporter> 
</report> 

Javaソース:

import javax.xml.XMLConstants; 
import javax.xml.transform.Source; 
import javax.xml.transform.stream.StreamSource; 
import javax.xml.validation.*; 
import org.xml.sax.SAXException; 
import java.io.*; 

public class ProtocolValidator 
{ 
    public static void main(String [] args) throws Exception 
    { 
     Source schemaFile = new StreamSource(new File("schema.xsd")); 
     Source xmlFile = new StreamSource(new File("test_xml.xml")); 

     SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
     Schema schema = schemaFactory.newSchema(schemaFile); 
     Validator validator = schema.newValidator(); 

     try{ 
      validator.validate(xmlFile); 
      System.out.println(xmlFile.getSystemId() + " is valid"); 
     } 
     catch (SAXException e) 
     { 
      System.out.println(xmlFile.getSystemId() + " is NOT valid"); 
      System.out.println("Reason: " + e.getLocalizedMessage()); 
     } 
    } 
} 

例外を私は受けています:

Exception in thread "main" org.xml.sax.SAXParseException; systemId: file:/root/test/schema.xsd; lineNumber: 4; columnNumber: 50; The prefix "xs" for element "xs:element" is not bound. 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)... 

答えて

11

XMLスキーマファイル自体が有効なXMLドキュメントである必要があります。接頭辞xsの外部スキーマ要素と名前空間宣言がありません。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <!-- schema elements here --> 
</xs:schema> 
2

ちょうど最初の行の下に、自分のスキーマに次の行を追加します。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

...と、スキーマ内の最後の行として、終了タグ:

</xs:schema> 
関連する問題