# XML Dokument mit DTD validieren



## nobody_two (15. Nov 2004)

Hallo Leute,

ich möchte gerne ein XML - Dokument nach den Regeln einer DTD validieren.
Ich habe die DTD - Datei mit derm folgenden Tag im XML - File angegeben:

<!DOCTYPE const SYSTEM "const.dtd">

Nun möchte ich die datei in java mit den folgenden Befehlen validieren:

FileReader reader = new FileReader(file);

DOMParser parser = new DOMParser();

parser.setValidationMode(DOMParser.DTD_VALIDATION);
parser.showWarnings(true);

parser.parse(reader);

Dazu erzeuge ich erst einen FileReader aus einem File. Danach erzeuge ich einen neuen Parser und setze die Einstellungen. Im letzten Schritt übergebe ich dem Parser den Reader!

Als Ergebnis komme ich folgende Fehlermeldung:

java.net.MalformedURLException: no protocol: const.dtd


Hat dazu irgendjemand ne Idee? Nach meiner Meinung müsste so eigentlich alles korrekt sein!

MFG kristin


----------



## Bleiglanz (15. Nov 2004)

probiers mal mit 

file:/// und dem absoluten Pfad zur DTD

Frage: welcher Parser ist das?


----------



## nobody_two (15. Nov 2004)

Hallo,

ich verwende den DOMParser!

Den absoluten Pfad habe ich nicht verwendet, da sich die DTD und das XML - File in einem Ordner befinden!

MFG nobody_two


----------



## Bleiglanz (15. Nov 2004)

> ich verwende den DOMParser!


du sollst nicht direkt org.apache.xerces.parsers.DOMParser verwenden  

sondern über das JAXP darauf zugreifen

und setValidating(true) auf dem Parser aufrufen

ansonsten schau in die Xerces Doku


----------



## nobody_two (15. Nov 2004)

Hallo,

danke erstmal für deine Tips. Ich benutze nicht diesen DOMParser sondern diesen hier:

oracle.xml.parser.v2.DOMParser

Habe jetzt den Pfad mal komplett reingeschrieben! Da ist der Fehler weg, aber ich bräuchte den Pfad trotzdem als indirekten Pfad, sprich ("const.dtd"). Gibt es da irgendeinen Trick oder sowas? Es ist wirklich ziemlich wichtig!

In der Doku habe ich dazu leider nichts gefunden!

MFG nobody_two


----------



## Bleiglanz (15. Nov 2004)

gehts mit ./ (Punkt Backslash als Indikator für das aktuelle Verzeichnis)

müsste doch irgendwo in der Doku zu finden sein?


----------



## Bleiglanz (15. Nov 2004)

http://www.cs.umb.edu/cs634/ora9idocs/appdev.920/a96621/adx04paj.htm


----------



## nobody_two (15. Nov 2004)

Also das mit .\ hat schon mal nicht funktioniert! Die Doku werde ich mir dann morgen mal anschauen!


----------



## nobody_two (16. Nov 2004)

Einen schönen guten Morgen,

also ich habe mir jetzt die Doku mal angeschaut und habe das einbinden der DTD genauso probiert wie es dort drin stand! Aber es kommt immer noch der gleiche Fehler!

Ich habe auch versucht die DTD direkt in das XML - File reinzuschreiben! Das funktioniert auch soweit ganz gut! Habe ich aber was an dem XML - File geändert und es danach abgespeichert sind die Informationen der DTD weg!

Hat irgendjemand ne Idee was ich falsch mache! Ich weiß mir langsam wirklich keinen Rat mehr, muss es aber irgendwie hinkriegen...

MFG nobody_two


----------



## nobody_two (16. Nov 2004)

Hallo Bleiglanz,

vielen Dank für Deinen Tip! Die Doku hat mir tatsächlich weitergeholfen! Manchmal steht halt einfach einer auf der Leitung!

Ich habe in meinem Beispiel den Reader geparst! Deshalb hatte er nicht den Pfad um die DTD zu finden! In der Doku habe ich den entscheidenden Tip gefunden eine Basis - URL zu setzen! Mit Hilfe dieser URL findet er dann auch die DTD!

MFG nobody_two


----------

