Что такое xsi: schemaLocation?

Я вижу, что мы имеем множественный url как значение этого атрибута, как в spring:

<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">

Почему это необходимо и для чего оно используется? Выполняет ли Spring URL-адрес и проверяет? в чем разница между xmlns и xsi: schemaLocation?

Ответ 1

Парсер Java XML, который использует spring, будет читать значения schemaLocation и попытаться загрузить их из Интернета, чтобы проверить XML файл. Spring, в свою очередь, перехватывает эти запросы нагрузки и обслуживает версии из собственных файлов JAR.

Если вы опустите schemaLocation, тогда синтаксический анализатор XML не будет знать, где получить схему для проверки конфигурации.

Ответ 2

An xmlns является уникальным идентификатором внутри документа - он не обязательно должен быть URI для схемы:

пространства имен XML предоставляют простой метод для определения имен элементов и атрибутов, используемых в документах расширяемого языка разметки, путем связывания их с пространствами имен, идентифицированными ссылками URI.

xsi:schemaLocation должен давать подсказку относительно фактического местоположения схемы:

может использоваться в документе, чтобы давать подсказки относительно физического расположения документов схемы, которые могут использоваться для оценки.

Ответ 3

В соответствии с спецификацией для размещения схем

может быть или не быть схема, доступная через имя пространства имен... Пользовательское сообщество и/или соглашения между потребителем/поставщиком могут устанавливать обстоятельства, при которых [попытка извлечь xsd из URL-адреса пространства имен] является разумной стратегией по умолчанию

(спасибо за то, что вы не однозначны, spec!)

и

если автор документа (человек или нет) создал документ с определенной схемой, и гарантирует, что какой-то или весь документ соответствует этой схеме, предоставляются схема schemaLocation и noNamespaceSchemaLocation [attributes].

Таким образом, в основном с указанием только пространства имен, ваш XML "может" быть попытан для проверки на xsd в этом месте (даже если ему не хватает атрибута schemaLocation), в зависимости от вашего "сообщества". Если вы укажете конкретный schemaLocation, то в основном это означает, что документ xml "должен" соответствовать указанному xsd, поэтому "пожалуйста, подтвердите его" (как я его прочитал). Я предполагаю, что если вы не используете атрибут schemaLocation или noNamespaceSchemaLocation, он просто "не проверяется" большую часть времени (на основе других ответов появляется java делает это таким образом).

Еще одна морщина заключается в том, что обычно с проверкой xsd в java-библиотеках [ex: spring config xml files], если ваши XML файлы указывают конкретный URL-адрес schemaLocation xsd в XML файле, например xsi:schemaLocation="http://somewhere http://somewhere/something.xsd", как правило, внутри одна из ваших банок зависимости будет содержать копию этого xsd файла в разделе ресурсов, а spring имеет возможность "сопоставления", говорящую о том, чтобы рассматривать этот файл xsd так, как если бы он сопоставлялся с URL-адресом http://somewhere/something.xsd (так что вы никогда в конечном итоге, перейдя в Интернет и загрузив файл, он просто существует локально). См. Также fooobar.com/questions/30097/... для получения дополнительной информации.

Ответ 4

Если вы войдете в любое из этих мест, вы найдете то, что определено в этой схеме. Например, он сообщает вам, каков тип данных значения ключевых слов ini-метода.