Zgodnie ze specyfikacją dotyczącą lokalizacji schematów
schemat może być odzyskany przez nazwę przestrzeni nazw lub nie ... Umowy społeczności użytkowników i / lub konsumenci / dostawcy mogą ustalić okoliczności, w których [próba pobrania xsd z adresu url przestrzeni nazw] jest rozsądną strategią domyślną
(dzięki za jednoznaczność, spec!)
i
w przypadku, gdy autor dokumentu (człowiek lub nie) utworzył dokument z określonym schematem w widoku i gwarantuje, że część lub całość dokumentu jest zgodna z tym schematem, podawane są atrybuty schemaLocation i noNamespaceSchemaLocation [atrybuty].
Zasadniczo, określając tylko przestrzeń nazw, "może" zostać podjęta próba walidacji twojego XML względem xsd w tej lokalizacji (nawet jeśli nie ma schemaLocation
atrybutu), w zależności od twojej "społeczności". Jeśli określisz konkretny schemaLocation
, to w zasadzie oznacza to, że dokument xml „powinien” być zgodny ze wspomnianym xsd, więc „proszę go zweryfikować” (tak jak go czytam). Domyślam się, że jeśli nie wykonasz atrybutu schemaLocation
lub, przez noNamespaceSchemaLocation
większość czasu "nie jest sprawdzony" (na podstawie innych odpowiedzi wydaje się, że java robi to w ten sposób).
Innym problemem jest to, że zazwyczaj przy sprawdzaniu poprawności xsd w bibliotekach java [np. Pliki XML konfiguracyjne wiosny], jeśli twoje pliki XML określają konkretny schemaLocation
adres URL xsd w pliku XML, tak jak xsi:schemaLocation="http://somewhere http://somewhere/something.xsd"
zwykle w jednym z plików słoików zależności, będzie on zawierał kopię ten plik xsd w sekcji zasobów i spring ma możliwość "mapowania" mówiącą, że traktuje ten plik xsd tak, jakby był mapowany na adres URL http://somewhere/something.xsd
(więc nigdy nie udajesz się do sieci i nie pobierasz pliku, po prostu istnieje lokalnie). Zobacz też https://stackoverflow.com/a/41225329/32453, aby uzyskać nieco więcej informacji.