Зачем квалифицировать глобальные элементы в экземпляре документа? - PullRequest
2 голосов
/ 10 марта 2010

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

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

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

1 Ответ

1 голос
/ 28 июля 2010

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

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

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

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

  1. Сделать XMLSchema пространством имен по умолчанию и явно указать все ссылки на компоненты в targetNamespace.

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

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

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

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

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

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

...