Что такое 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-метода.