Зачем квалифицировать глобальные элементы в экземпляре документа?
При проверке xml-документа с использованием xml-Schema и пространств имен экземпляр документа должен иметь префикс своего глобального элемента с пространством имен, чтобы квалифицировать его, помимо объявления самого пространства имен.
Можно было бы подумать, что в этом случае для определения элемента будет достаточно пространства имен по умолчанию, но, очевидно, xml-схема имеет другое мнение.
Это почему? Что это за пространства имен по умолчанию, с которыми просто не справляется xml-схема?
1 ответ
Я считаю, что это сделано специально для поддержки пространства имен Chameleon и для предотвращения конфликтов имен компонентов Chameleon. Я имею в виду, что, не предоставляя namsepace, мы по умолчанию используем дизайн Chameleon. Однако, если вы не укажете targetNamspace как пространство имен по умолчанию, вы получите проблему и ошибку.
Примечание. Некоторое содержимое взято с XFront.com.
Совокупно разработанный набор руководств по разработке схем
Вот ваши правила в целом: за исключением схем без пространства имен, каждая XML-схема использует как минимум два пространства имен - targetNamespace и пространство имен XML Schema. Существует три способа разработки ваших схем в отношении работы с этими двумя пространствами имен:
Сделайте XML Schema пространством имен по умолчанию и явно определите все ссылки на компоненты в targetNamespace.
И наоборот - сделайте targetNamespace пространством имен по умолчанию и явно квалифицируйте все компоненты из пространства имен XML Schema.
Не используйте пространство имен по умолчанию - явно квалифицируйте ссылки на компоненты в targetNamespace и явно квалифицируйте все компоненты из пространства имен XML Schema.
На самом деле не существует наилучшей практики в отношении того, какой подход является правильным. В первую очередь все зависит от дизайнера.
Хотя в своем исследовании я обнаружил: - Квалификация компонентов, которые используются для построения схемы (схема, элемент, complexType, последовательность и т. Д.), Как правило, не является источником путаницы, поскольку квалификатор всегда одинаков. То есть люди привыкли видеть xsd:schema, xsd:element и т. Д.
- С другой стороны, targetNamespaces может широко варьироваться в разных схемах. Следовательно, префиксы пространства имен, которые можно генерировать, могут широко варьироваться. Например, lib:Book, boston:subway. Эта изменчивость часто является источником путаницы.
Надеюсь, это ответит на ваш вопрос.