externes XML-Schema mit JDOM validieren

lubu

Mitglied
Hi,

ich habe das Problem, dass es mir nicht gelingt eine XML-Datei gegen eine Schemadatei, die sich im Web befindet zu validieren. In XML-Spy klappt das alles. Somit bin ich mir sicher, dass in der Syntax keine Fehler gemacht wurden.

(Das validieren gegen ein lokale Schema-Datei funktioniert mit JDOM auch)

Ich verwende den SAX-Parsers mit Hilfe von JDOM.

Hier ist mein Beispiel:

PI aus der XML-Datei mit XML-Schema im Web:

xsi:schemaLocation="http://www.osci.de/xmeld131 http://www.osci.de/xmeld131/xmeld-nachrichten.xsd" (funktioniert nicht)

PI aus der XML-Datei mit XML-Schema lokal:

xsi:schemaLocation="http://www.osci.de/xmeld131 c:/xmeld-nachrichten.xsd" (funktioniert)


Java-Code zur Verarbeitung:

SAXBuilder saxBuilder = new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);
saxBuilder.setFeature("http://apache.org/xml/features/validation/schema", true);

// mit dieser Zeile habe ich gehofft die externe Schemaquelle zu beschreiben, funktioniert aber nicht. saxBuilder.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation", "http://www.osci.de/xmeld131 http://www.osci.de/xmeld131/xmeld-nachrichten.xsd" );

docXml = saxBuilder.build(inFile);

Exception wird ausgelöst, wenn da die externe Schemadatei nicht gefunden wird.

(org.jdom.input.JDOMParseException: Error on line 2 of document file:/C:/test.xml: cvc-elt.1: Cannot find the declaration of element )

Ich habe mit Ethereal geschaut, ob HTTP-Requests stattfinden. Das passiert nur bei XML-Spy. Wenn ich das ganze unter Java laufen lasse, geht kein Request ins Web. Ich habe die Proxy-Einstellungen der entsprechenden Java-Runtime überprüft und die scheinen zu stimmen. (Proxy-Einstellungen des Internet Explorers sind maßgeblich. Das erwartet auch XML-Spy, obwohl ich sonst mit Firefox arbeite.)

Hat jemand eine Idee, wo das Problem zu suchen ist?

Danke Lutz
 
ich habe selber noch weiter gesucht. Unter
http://www.saxproject.org/apidoc/org/xml/sax/package-summary.html#package_description

werden die Features und Properties für den SAXParser in der Javadoc aufgelistet. Es findet sich aber auch hier kein weiterer Hinweis.

Die von mir benutzte Property "http://apache.org/xml/properties/schema/external-schemaLocation" wird in der Doku gar nicht erwähnt und somit kann es auch nicht zur Lösung des Problems nicht beitragen.
 
ich habe das Problem jetzt lokalisiert.

der Parser funktioniert. Ich habe das ganze an einem Rechner mit direkter Internetverbindung getestet und es funktioniert.

Beim Test im Netz mit zentralem Proxy läuft zwar der XML-Spy, der verwendet die Proxy-Einstellungen des IE, aber nicht die Java-Runtime-Umgebung. Mit einem Netzwerkanalysator (Ethereal) konnte das auch nachvollzogen werden.

In der verwendeten Java-Runtime habe ich über den Proxy aber eingestellt. Es gibt hier die Möglichkeiten die Browser-Einstellungen zu übernehmen oder einen Proxy einzutragen. Ich habe beide Variante getestet und beides läuft nicht.

Wie kann man den Proxy einer Java-Runtime sonst noch mitteilen?

Für Antworten wäre ich dankbar.

Tschau
 
Hi Lutz,

mich würde brennend interessieren, wie du die saxBuilder.setProperty()-Methode für die lokale Benutzung von XML-Schema-Dateien konfiguriert hast, denn darüber finde ich im Netz keine Informationen. Denn mit "http://apache.org/xml/properties/schema/external-schemaLocation" komme ich ja nicht weiter, oder ?

Viele Grüße

Jan




Viele
 
Hi Lutz,

ich habe es eben gerade selbst rausgefunden:

builder.setProperty("http://apache.org/xml/properties/schema/external- schemaLocation", "c:\\note.xsd");

Das war doch richtig, wie ich es gemacht hatte. Mein Problem war der fehlende Hinweis in der XML-Datei:

<?xml version="1.0"?>
<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com c:/note.xsd">


Ich Idiot :-(
 
Hallole
sagt mal, kann man eigetnlich XML-Dateien auch validieren wenn kein Validierungshinweis in der zu validierenden XML-Datei steht?
würde mich brennend interessieren.

Takidoso
 
Hi,

ja man kann ein xml-Dokument gegen ein Schema validieren, obwohl kein Hinweis in dem XMl-Dokument steht. Dafür kannst Du hierfür ein Beispiel sehen:

http://www.jdom.org/pipermail/jdom-interest/2002-June/009953.html

Dort setzt man das Property direkt mit dem dazugehörigen Schema:

builder.setProperty(
"http://apache.org/xml/properties/schema"
+ "/external-noNamespaceSchemaLocation",
xsdFile.toURL().toString() );



Dumm ist nur, daß man dann selbst wissen sollte, welches Schema man benutzen muß.
 
Zurück