# Mit Sax-Parser validieren



## BRT006 (3. Aug 2005)

Hallo!

Auf welche Art kann ich dem SAX-Parser verklickern, gegen welches Schema bzw. DTD er validieren soll? Das dürfte wohl über die Properties gehen, welches wäre das denn?

THX,
Karsten


----------



## KSG9|sebastian (3. Aug 2005)

f o r e n s u c h e



```
SAXBuilder builder = new SAXBuilder(
	"org.apache.xerces.parsers.SAXParser", true); // Überprüft die Wohlgeformtheit
builder.setFeature("http://apache.org/xml/features/validation/schema", true ); //Aktiviere Schema-Validation
builder.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation",
		 new File("XSD-Datei").getAbsolutePath()); 
try {
    InputStream in = this.getClass().getResourceAsStream("Umfrage.xml");
    InputSource src = new InputSource(in);
    Document doc = builder.build(src);
} catch (JDOMException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
```


----------



## BRT006 (3. Aug 2005)

Bedauerlicherweise kann ich Xerces nicht in das Projekt importieren, muss das also irgendwie anders realisieren, den von dir geposteten Ausschnitt hab ich schon gesehen. Außerdem wäre dann noch die Frage offen nach dem DTD.


----------



## Bleiglanz (3. Aug 2005)

BRT006 hat gesagt.:
			
		

> Bedauerlicherweise kann ich Xerces nicht in das Projekt importieren, muss das also irgendwie anders realisieren, den von dir geposteten Ausschnitt hab ich schon gesehen. Außerdem wäre dann noch die Frage offen nach dem DTD.


JA UND?

Welchen SAX-Parser setzt du ein?
=> Homepage suchen
=> Features durchsehen

Welche JAVA Version?
=> in Java5 SAXParserFactory#setSchema


----------



## BRT006 (3. Aug 2005)

Zugegeben, die Informationen waren recht spärlich. Sorry dafür. Eingesetzt wird Java 1.4 und nach Möglichkeit nichts zusätzliches. Mit Xerces hab ich eine Lösung gefunden, jedoch nicht mit 1.4-Bordmitteln. Und selbst beim Xerces hab ich keine Möglichkeit gefunden, ein DTD anzugeben anhand dessen validiert werden kann.

Ich nehme an dass es da irgendwelche Properties gibt, die ich setzen muss. Jedoch habe ich weder in der API noch bei google gefunden wie die heißen. Die alleine zu kennen würde mir wahrscheinlich schon weiterhelfen.

Wenn ich mit 1.4 einen Parser erzeuge


```
SAXParserFactory.newInstance().newSAXParser()
```

erhalte ich ein Objekt von org.apache.crimson.jaxp.SAXParserImpl

Wie sind hier die Properties für die Location eines DTD und eines Schemas?





So, ich hoffe ich habe das nun etwas treffender beschrieben. Danke schon mal...


----------



## Bleiglanz (3. Aug 2005)

vermute mal, dass der gute alte Crimson, der in der 1.4er dabei war überhaupt noch nicht in der Lage ist, gegen ein Schema zu validieren...

DTDs geht natürlich, aber dazu sollte dein Dokument eine DOCTYPE haben, geht alles automatisch, da brauchts keine Location


----------



## BRT006 (3. Aug 2005)

Irgendwie hatte ich das befürchtet. Kennst du bei Xerces die Property für eine DTD-Location? Ich bekomme XML-Dokument und DTD aus unterschiedlichen Quellen und würde gern auf ein Manipulieren des XML-Dokuments vor dem Parsen verzichten. Der Doctype-Eintrag existiert darin nämlich nicht.


----------



## Bleiglanz (3. Aug 2005)

das ist immer problematisch, war schon mal da hier im forum


----------

