Теперь мы опишем, как определять
новые сложные типы (например, PurchaseOrderType
), объявлять элементы (например, purchaseOrder
) и объявлять атрибуты (например, orderDate
). Обычно эти действие представляют собой
процесс присвоения имен, и, следовательно, встает вопрос: “что случиться, если
мы дадим дважды одинаковое имя?” Ответ зависит от того, чьи имена совпадут, хотя,
в общем случае, вероятность конфликта возрастает при совпадении имен подобных
объектов.
Рассмотрим ряд примеров, чтобы
проиллюстрировать ситуации, когда совпадение имен вызывает проблемы. Если два объекта,
и оба являются типами, один сложный тип с именем USStates, а другой простой тип и тоже с именем USStates, то это конфликт. Если два объекта,
которые мы определяем и один из них тип, другой элемент или атрибут, например
сложный тип с именем USAddress и элемент с тем же именем USAddress, то конфликта нет. Если два объекта элементы,
входящие в разные типы (т.е. не глобальные элементы), например, мы объявляем
один элемент с именем name, как часть типа USAddress, а другой элемент с тем же именем, как часть типа Item, то конфликта не будет. (Про такие
объявления иногда говорят, что это локальные объявления элементов.) Наконец, если
есть два объекта и оба типы, и вы
определили один, а в XML Schema определен другой, допустим, вы определили
простой тип с именем decimal, то конфликта не будет. Причина этого на первый взгляд противоречия
заключается в том, два типа в последнем примере принадлежат разным
пространствам имен. Мы объясним использование пространств имен в схеме в
последующих разделах.