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