4.2 Установление типов по расширению

Для того чтобы создать конструкции нашего адреса, мы начнем как обычно с создания сложного типа, который назовем  Address (см. address.xsd). Тип Address содержит базовые элементы адреса: имя, улица и город. (Такое определение адреса не будет корректно во всех странах, но для объяснений целей нашего примера оно достаточно.) Из этой начальной точки мы получим два новых сложных типа, которые содержат все элементы первоначального типа плюс дополнительные элементы, которые являются специфичными для адресов в США и Великобритании. Методика, которую мы используем здесь для получения новых (сложных) типов адреса, посредством расширения существующего типа - та же самая, что мы использовали в Разделе 2.5.1, за исключением того, что здесь наш базовый тип - сложный тип, тогда как нашим базовым типом в предыдущем разделе был простой тип.

Мы определяем два новых сложных типа, USAddress и UKAddress, используя элемент complexType. Применение элемента complexContent позволяет нам указать, что модели содержания новых типов сложные, то есть содержат элементы, а также расширить исходный тип Address значением атрибута base  в элементе extension.

Когда сложный тип получен расширением, его результирующая модель содержания является совокупностью моделей содержания исходного типа и   образованного типа. Кроме того, две модели содержания трактуются как две дочерние в той же самой группе. В случае UKAddress, модель содержания UKAddress является моделью содержания Address плюс объявления для элемента postcode и атрибута exportCode. Это напоминает на самое начальное определение UKAddress:

Пример

<complexType name=”UKAddress”> <sequence> <!-- content model of Address --> <element name=”name” type=”string”/> <element name=”street” type=”string”/> <element name=”city” type=”string”/> <!-- appended element declaration --> <element name=”postcode” type=”ipo:UKPostcode”/> </sequence> <!-- appended attribute declaration --> <attribute name=”exportCode” type=”positiveInteger” fixed=”1”/> </complexType>

 

Группа Prata Vetra.
Используются технологии uCoz