Согласно спецификации для размещения схем
может быть, а может и не быть схема, извлекаемая через имя пространства имен ... Сообщество пользователей и / или соглашения с потребителем / поставщиком могут устанавливать обстоятельства, при которых [попытка получить xsd из URL-адреса пространства имен] является разумной стратегией по умолчанию
(спасибо за недвусмысленность, спец!)
и
в случае, если автор документа (человек или нет) создал документ с определенной схемой в представлении и гарантирует, что часть или весь документ соответствует этой схеме, предоставляются schemaLocation и noNamespaceSchemaLocation [атрибуты].
Таким образом, в основном с указанием только пространства имен, ваш XML «может» быть попытаться проверить на xsd в этом месте (даже если у него нет schemaLocation
атрибута), в зависимости от вашего «сообщества». Если вы указываете конкретное schemaLocation
, то в основном это означает, что XML-документ «должен» соответствовать указанному xsd, поэтому «пожалуйста, подтвердите его» (как я его читал). Я предполагаю, что если вы не выполняете атрибут schemaLocation
или noNamespaceSchemaLocation
атрибут, он просто «не проверяется» большую часть времени (судя по другим ответам, Java делает это таким образом).
Еще одна проблема заключается в том, что обычно при проверке xsd в java-библиотеках [например, XML-файлы конфигурации Spring], если ваши XML-файлы указывают конкретный schemaLocation
URL-адрес xsd в XML-файле, как xsi:schemaLocation="http://somewhere http://somewhere/something.xsd"
обычно в одном из ваших jar-файлов зависимостей, он будет содержать копию этот xsd-файл в разделе ресурсов, а spring имеет возможность «сопоставления», говоря, что этот xsd-файл обрабатывается так, как если бы он сопоставлялся с URL-адресом http://somewhere/something.xsd
(так что вы никогда не заходите в Интернет и не загружаете файл, он просто существует локально). См. Также https://stackoverflow.com/a/41225329/32453 для получения дополнительной информации.