в чому полягає використання xsi: schemaLocation?


131

Я бачу, що у нас є кілька URL-адрес як значення цього атрибуту, як навесні:

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

Для чого він потрібен і для чого він використовується? Чи йде Весна до URL-адреси та підтверджується? Яка різниця між xmlns та xsi: schemaLocation?

Відповіді:


87

Java-аналізатор XML, який використовує весна, прочитає schemaLocationзначення та спробує завантажити їх з Інтернету, щоб перевірити файл XML. Spring, у свою чергу, перехоплює ці запити на завантаження та обслуговує версії всередині власних файлів JAR.

Якщо ви пропустите цей schemaLocation, XML-аналізатор не буде знати, де взяти схему, щоб перевірити конфігурацію.


Чи не би XML-аналізатор шукав шлях до класу?
HDave

1
@skaffman, Чи означає це, що коли я запускаю Maven build весняного projhect з -o (офлайн) прапором, збірка буде провалюватися, незважаючи на те, що всі залежності доступні в моєму локальному сховищі?
aviad

@HDave Але що б шукав XML-аналізатор, схема може мати будь-яку назву
Krzysztof Krasoń,

Технічно аналізатор XML спершу спробує завантажити схему з Інтернету, якщо її не знайдено або доступ до Інтернету недоступний, він шукатиме * .xsd файл локально з шляху до класу, якщо його все ще не знайдено, він буде опущений.
Френк Чжан

Для отримання додаткової інформації про перехоплює шар ярого см stackoverflow.com/a/10768972/32453
rogerdpack

68

xmlnsУнікальний ідентифікатор в документі - він не повинен бути URI до схеми:

Простіри імен XML надають простий метод для визначення імен елементів та атрибутів, які використовуються в документах з мови розширюваної розмітки, пов'язуючи їх з просторами імен, визначеними посиланнями URI.

xsi:schemaLocation повинен дати підказку щодо фактичного розташування схеми:

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


22

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

може бути, а може і не бути схеми, яку можна отримати через ім'я простору імен ... Спільнота користувачів та / або угоди споживача / постачальника можуть встановити обставини, в яких [спроба отримати xsd з URL-адреси простору імен] є розумною стратегією за замовчуванням

(дякую за те, що ви були однозначними, спец!)

і

у випадку, якщо автор документа (людина чи ні) створив документ із певною схемою для перегляду та гарантує, що деякі або всі документи відповідають цій схемі, надаються schemaLocation та noNamespaceSchemaLocation [атрибути].

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

Ще одна зморшка тут полягає в тому, що, як правило, з валідацією xsd в бібліотеках Java [коли: файли XML весна config], якщо ваші XML-файли вказують певний schemaLocationURL-адрес xsd у XML-файлі, як xsi:schemaLocation="http://somewhere http://somewhere/something.xsd"правило, в одному з ваших залежностей залежностей, він буде містити копію цей файл xsd у розділі ресурсів та весна має можливість "картографування", що говорить про те, що цей xsd файл трактується так, ніби він відображає URL-адресу http://somewhere/something.xsd(тому ви ніколи не переходите до Інтернету та завантажуєте файл, він просто існує локально). Дивіться також https://stackoverflow.com/a/41225329/32453 для отримання додаткової інформації.


0

Якщо ви зайшли в будь-яке з цих місць, ви знайдете те, що визначено в цій схемі. Наприклад, він розповідає про тип даних значення ключових слів ini-методу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.