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