2017-02-20 3 views
0

ich unten Schnipsel bin mit einem Schema-Objekt in statischem Block zu machen:Werden XSD-Importe beim Laden von Ressourcen automatisch geladen?

URL url = getClass().getClassLoader().getResource("test.xsd"); 

und Test.xsd wird drei andere XSD-Datei importieren,

Meine Frage ist, werden ihnen die Importe zur Verfügung, wenn Referenz wird gemacht (wie bei der Validierung), oder muss ich die Importe speziell durch URL-Objekt laden.

Antwort

0

Nein, Sie müssen die importierten XSDs explizit laden, da getResource() keine XSD-Semantik kennt - sie arbeitet auf der Ressourcen-/Dateiebene, nicht auf der XSD-Ebene.

+0

ist es nicht ganz richtig. 1. 'getResource()' lädt nichts. Es gibt nur URL zur Ressource. 'getResourceAsStream()' tut das. Aber ... für irgendwelche XSD-Prozessoren (d. H. Validator) haben alle von Klassenlader-Ressourcen geladenen Ressourcen keine Bedeutung. Es wird versuchen, "Importe" zu laden, indem Sie den in XSD definierten Schema-Speicherort öffnen. – Vadim

+0

Ich nehme an, Sie haben Recht, dass meine Antwort für 'getResourceAsStream()' passender wäre. – kjhughes

+0

Ja. Ich bin immer mit ihnen beschäftigt. :-) 'getResource()' ist kein logischer Name, um nur URL zu erhalten. Zuerst aber ist es, dass es eine Ressource sich selbst gibt ... – Vadim

0

Da, wenn Sie getClass().getClassLoader().getResource("test.xsd"); verwenden, laden Sie nicht wirklich test.xsd, aber URL nur dazu erhalten Sie nichts anderes tun müssen.

XSD import hat eine Bedeutung nur für entsprechende Tools. Als Beispiel Validator.

Wenn Sie den Schema-Speicherort an den Validator übergeben, kann es also absoluter Pfad, relativer Pfad zum aktuellen Arbeitsverzeichnis oder URL sein. Dann

wenn Validator Prozesse XSD versucht es imports gleiche Art und Weise zu bekommen - absoluten Pfad relativ zur test.xsd Schemaposition oder URL, wie es in test.xsd definiert.

Verwandte Themen