2012-12-14 19 views
9

Ho seguito this tutorial per la convalida dei file XML. Ma sto ricevendo eccezione durante la convalida del file XML. Cosa sto facendo di sbagliato? I miei codici:
schema XML:Convalida schema XML Java: prefisso non associato

<?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> 

di file XML per convalidare:

<?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> 

sorgente di Java per la convalida:

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()); 
     } 
    } 
} 

eccezione che sto ricevendo:

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)... 

risposta

11

Il file dello schema XML deve essere un documento XML valido. Manca l'elemento dello schema esterno e la dichiarazione dello spazio dei nomi per il prefisso xs.

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

Aggiungere questa riga al vostro schema, appena sotto la prima riga:

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

... e un tag di chiusura come l'ultima riga nello schema:

</xs:schema> 
Problemi correlati