Spring DI applicationContext.xml, как именно используется xsi :schemaLocation?

Примечание :тестовый проект, о котором я упоминаю, можно загрузить с помощью:

git-клонhttps://github.com/mperdikeas/so-spring-di-appcontext-schemalocation.git

.. и бежать с 'муравейник'.

Я «понимаю», что имена пространств имен XML просто используются как непрозрачные идентификаторы и не предназначены для использования в качестве URI (. википедия). Я также «понимаю», что расположение XML-схемы предназначено для предоставления подсказок относительно фактического местоположения документов схемы и, будучи подсказками, на практике не используется (. w3.org). Имея это в виду, я экспериментировал с простым приложением Spring DI (, используемым в простой настройке J2SE ), изменяя applicationContext.xml. Вот начальная версия:

                    

                                                                       
                                

                          

Когда я сделал «sudo ifconfig eth0 down», проект работал отлично, что согласуется с тем, что среда выполнения не удосужилась получить что-либо из schemaLocations. Однако, когда я исказил schemaLocations, добавив простое подчеркивание ко второму URL-адресу в каждой паре, я получил следующую жалобу:

 [java] org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 10 in XML document from class path resource [META-INF/spring/applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 10; columnNumber: 100; cvc-elt.1: Cannot find the declaration of element 'beans'.
 [java]     at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:194)
 [java]     at org.apache.tools.ant.taskdefs.Java.run(Java.java:771)
 [java]     at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:221)
 [java]     at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:135)
 [java]     at org.apache.tools.ant.taskdefs.Java.execute(Java.java:108)
 [java]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
 [java]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 [java]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
 [java]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 [java]     at java.lang.reflect.Method.invoke(Method.java:601)
 [java]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
 [java]     at org.apache.tools.ant.Task.perform(Task.java:348)
 [java]     at org.apache.tools.ant.Target.execute(Target.java:390)
 [java]     at org.apache.tools.ant.Target.performTasks(Target.java:411)
 [java]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
 [java]     at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
 [java]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
 [java]     at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
 [java]     at org.apache.tools.ant.Main.runBuild(Main.java:809)
 [java]     at org.apache.tools.ant.Main.startAnt(Main.java:217)
 [java]     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
 [java]     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

Что, по-видимому, предполагает, что среда выполнения Spring DI использует второй URL-адрес в каждой паре в xsi :schemaLocation как своего рода идентификатор (, жестко запрограммированный в его логике, поскольку нет доступа к сети ).Таким образом, я предполагаю, что среда выполнения Spring DI использует два типа идентификаторов для каждого пространства имен :идентификатор xmlns для уникальной идентификации пространства имен (, используемого в качестве непрозрачной строки )и . ] schemaLocation идентификатор для уникальной идентификации версии схемы для этого пространства имен (, снова используемый как непрозрачная строка ). т.е. schemaLocation фактически используется (в искаженном виде? поскольку это, похоже, не намерение документов w3c )версионировать пространство имен. Более того, в таком случае, почему среда выполнения Spring DI не жалуется на отсутствие schemaLocation для пространства имен «p ». Верна ли моя ментальная модель?

9
задан Marcus Junius Brutus 26 May 2012 в 18:45
поделиться