Зачем квалифицировать глобальные элементы в экземпляре документа?

При проверке xml-документа с использованием xml-Schema и пространств имен экземпляр документа должен иметь префикс своего глобального элемента с пространством имен, чтобы квалифицировать его, помимо объявления самого пространства имен.

Можно было бы подумать, что в этом случае для определения элемента будет достаточно пространства имен по умолчанию, но, очевидно, xml-схема имеет другое мнение.

Это почему? Что это за пространства имен по умолчанию, с которыми просто не справляется xml-схема?

1 ответ

Я считаю, что это сделано специально для поддержки пространства имен Chameleon и для предотвращения конфликтов имен компонентов Chameleon. Я имею в виду, что, не предоставляя namsepace, мы по умолчанию используем дизайн Chameleon. Однако, если вы не укажете targetNamspace как пространство имен по умолчанию, вы получите проблему и ошибку.

Примечание. Некоторое содержимое взято с XFront.com.

Совокупно разработанный набор руководств по разработке схем

Вот ваши правила в целом: за исключением схем без пространства имен, каждая XML-схема использует как минимум два пространства имен - targetNamespace и пространство имен XML Schema. Существует три способа разработки ваших схем в отношении работы с этими двумя пространствами имен:

  1. Сделайте XML Schema пространством имен по умолчанию и явно определите все ссылки на компоненты в targetNamespace.

  2. И наоборот - сделайте targetNamespace пространством имен по умолчанию и явно квалифицируйте все компоненты из пространства имен XML Schema.

  3. Не используйте пространство имен по умолчанию - явно квалифицируйте ссылки на компоненты в targetNamespace и явно квалифицируйте все компоненты из пространства имен XML Schema.

На самом деле не существует наилучшей практики в отношении того, какой подход является правильным. В первую очередь все зависит от дизайнера.

Хотя в своем исследовании я обнаружил: - Квалификация компонентов, которые используются для построения схемы (схема, элемент, complexType, последовательность и т. Д.), Как правило, не является источником путаницы, поскольку квалификатор всегда одинаков. То есть люди привыкли видеть xsd:schema, xsd:element и т. Д.

  • С другой стороны, targetNamespaces может широко варьироваться в разных схемах. Следовательно, префиксы пространства имен, которые можно генерировать, могут широко варьироваться. Например, lib:Book, boston:subway. Эта изменчивость часто является источником путаницы.

Надеюсь, это ответит на ваш вопрос.

Другие вопросы по тегам