2012-11-30 16 views

Antwort

4

Viele (die meisten) Implementierungen werden, obwohl technisch gesehen, wenn ich mich richtig erinnere, der Standort als URI interpretiert werden, nicht als URL.

Wenn Sie sicherstellen möchten, dass es lokal aufgelöst wird, sehen Sie sich die Schnittstelle EntityResolver an.

+0

Also, wo würde es die dtd vor dem Internet finden? Ich meine, der Doctype-Verweis ist eine http-URL; Gibt es eine Logik, um dies in eine Klassenpfad-Suche umzuwandeln? Ich habe bemerkt, dass die Struts Gläser haben alle die dtds in ihnen. – chad

+0

Nun, DTDs existierten nicht vor dem Internet :-) Wie auch immer, der Doctype-Verweis sieht aus wie eine http-URL, aber das ist nur Konvention - es ist wirklich ein URI (es gibt einen Unterschied) und muss nicht unbedingt einer gültigen URL zugeordnet werden . Ich habe Struts seit vielen Jahren nicht mehr verwendet, aber ich vermute, dass es die DTDs enthält und einen EntityResolver verwendet, um sie lokal zu lösen. – GreyBeardedGeek

2

Basierend auf der Xerces documentation, der Parser möglicherweise versuchen, die Datei aus dem Internet herunterladen, wenn Validierung ist eingeschaltet. Aber ich denke wirklich, dass sich dies von Parser zu Parser ändern kann, weil die Bibliothek sich dafür entscheidet, einen lokalen Cache, einen Proxy-Server oder was auch immer zu verwenden.

+0

Ich sah das. Ich konnte keine näheren Angaben dazu finden, wo sonst und in welcher Reihenfolge versucht würde, die dtd zu finden. Dateisystem? Klassenpfad? – chad

+1

Ich denke, da dies eine Implementierungsdetails ist, gibt es keine bessere Dokumentation als der Quellcode und ein Debugger – Raffaele