Ich versuche, ein ziemlich kompliziertes XML-Schema in ein Schema-Objekt in Java zu parsen, damit ich XML-Nachrichten validieren kann.Schema in Java parsen Mit Importen und Includes?
Mein Code sieht ähnlich wie:
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new StreamSource(new File("schema/schema.xsd")));
Mein Schema hat einige Importe:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="base_1">
<xs:import namespace="base_1" schemaLocation="common/MessageBase.xsd"/>
</xs:schema>
... etc. Wenn ich versuche, das Schema zu laden, erhalte ich viele Fehler. Basierend auf einer anderen Frage, die damit zusammenhängt, scheint es, dass ich einen Ressourcen-Resolver angeben muss, aber sollte das nicht standardmäßig behandelt werden?
Wenn ja, gibt es ein bestimmtes Verzeichnis, in dem ich das Schema relativ zum Speicherort der Anwendung, die ich schreibe, oder relativ zur Basisschemadatei einfügen muss?
Schließlich, wenn ich das Schema mit XMLSpy oder ähnlichem laden, funktioniert es gut und ich kann XML-Instanzen ohne Problem validieren.
dies versucht und immer noch die folgende Fehlermeldung erhalten: src-resolve: ‚: StatusWithError_optional Basis‘ zu einem (n) ‚Attributgruppe‘ Komponente kann den Namen nicht auflösen. – magneticMonster
Das ist ein anderes Thema. Es deutet darauf hin, dass Ihr Schema nicht vollständig und in sich abgeschlossen ist. Haben Sie eine Attributgruppe namens StatusWithError_optional? Ist es im richtigen Namensraum? – bmargulies
Ja, es ist in einer separaten Datei auf der gleichen Ebene wie die Basis-Schemadatei definiert. Gleicher Namespace. Soll die SystemID der Pfad zur Root-XSD-Datei oder zum Root-Verzeichnis für das Schema sein? Was ist mit dem anderen Argument des 2-Arg-Konstruktors? – magneticMonster