Widzę, że mamy wiele adresów URL jako wartość tego atrybutu, jak na wiosnę:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
Dlaczego jest potrzebny i do czego służy? Czy Spring przechodzi do adresu URL i sprawdza poprawność? Jaka jest różnica między xmlns i xsi: schemaLocation?
xmlns
Jest unikalnym identyfikatorem w dokumencie - nie trzeba być URI do schematu:xsi:schemaLocation
ma dać wskazówkę co do faktycznej lokalizacji schematu:źródło
Zgodnie ze specyfikacją dotyczącą lokalizacji schematów
(dzięki za jednoznaczność, spec!)
i
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 konkretnyschemaLocation
, 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 atrybutuschemaLocation
lub, przeznoNamespaceSchemaLocation
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 jakxsi: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 URLhttp://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.źródło
Jeśli wejdziesz do którejkolwiek z tych lokalizacji, znajdziesz to, co jest zdefiniowane w tym schemacie. Na przykład informuje, jaki jest typ danych wartości słów kluczowych metody ini.
źródło