ubuntuusers.de

(Java) Validierung gegen Schema mittels DOM

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

schlachtrufe

Anmeldungsdatum:
13. März 2007

Beiträge: 461

Hallo,

ich würde gern die Korrektheit einer XML-Datei mittels einer Schema-Datei prüfen. Zum Einlesen der XML-Datei benutze ich DOM.

Meine XML Datei:

<?xml version="1.0" encoding="UTF-8"?>
<Beschreibung
    xmlns="http://www.person.de"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.person.de mySchema.xsd">
  <Vater name="Peter" alter="40">
    <Kind name="Ralf" alter="10"/>
    <Kind name="Markus" alter="15"/>
  </Vater>
</Beschreibung>

Die Schema-Datei:

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.person.de"
xmlns="http://www.person.de">

<xs:element name="Beschreibung">
  <xs:complexType>
   <xs:sequence>
     <xs:element ref="Vater" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="Vater">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="Kind" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
  <xs:attribute name="name" type="xs:string" use="required" />
  <xs:attribute name="alter" type="xs:string" use="required" />
  </xs:complexType>
</xs:element>

<xs:element name="Kind">
  <xs:complexType>
    <xs:attribute name="name" type="xs:string" use="required" />
    <xs:attribute name="alter" type="xs:string" use="required" />
  </xs:complexType>
</xs:element>

</xs:schema>

Die Programme "XML-Spy" und "XML Copy Editor" sagen beide, dass die XML Datei valide ist, nur mein Programm scheint das nicht zu merken.

Fehlerausgabe beim Öffnen der XML Datei in meinem Java-Programm:
"org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'Beschreibung'."

Mein Java-Code zum Einlesen und Überprüfen einer XML-Datei:

try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(file);

//Validierung gegen Schema
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
File schemata = new File("mySchema.xsd");
Schema f = sf.newSchema(schemata);
Validator v = f.newValidator();
v.validate(new DOMSource(doc.getDocumentElement()));
}
catch (SAXParseException e) {
e.printStackTrace();
} 

Ich hab keine Ahnung wo mein Fehler liegt...hoffe mir kann wer helfen.

Ich möchte auch bei DOM bleiben und nicht auf SAX oder JDOM etc. umschwenken.
Anscheinend wird ja versucht zu validieren, nur halt nicht richtig.

Antworten |