2.5.1 Сложные типы от простых типов

Давайте сначала решим, как объявить элемент, который имеет атрибут и содержит простое значение. В экземпляре документа такой элемент можно представить как:

<internationalPrice currency="EUR">423.46</internationalPrice>

В счете на покупку имеется элемент USPrice. Возьмем его за отправную точку:

<xsd:element name=”USPrice” type=”decimal”/>

Как нам добавить атрибут к этому элементу? Ранее мы говорили - простые типы не могут иметь атрибутов, а decimal - это простой тип. Следовательно, мы должны определить сложный тип, чтобы ввести объявление атрибута. Мы также хотим, чтобы его содержание было простым типом decimal. Таким образом, наш первоначальный вопрос примет следующий вид: «Как нам определить сложный тип, который базируется на простом типе decimal? Ответ - получить новый сложный тип от простого типа decimal :

Получение сложного типа от простого типа

<xsd:element name=”internationalPrice”>
 <xsd:complexType>
  <xsd:simpleContent>
   <xsd:extension base=”xsd:decimal”>
    <xsd:attribute name=”currency” type=”xsd:string”/>
   </xsd:extension>
  </xsd:simpleContent>
 </xsd:complexType>
</xsd:element>

Мы используем элемент complexType в начале определения нового (анонимного) типа. Для указания того, что модель содержания нового типа имеет только символьные данные, и в ней нет элементов, мы используем элемент simpleContent. Наконец, мы получаем новый тип, расширяя простой тип decimal. Расширение выполняется посредством добавления атрибута currency, используя стандартное объявление атрибута. (Мы затронули  образование типа, которое подробно рассмотрим в Разделе 4.)  Элемент internationalPrice, объявленный таким способом, сможет появиться в экземпляр документа, как показано в начале данного раздела.

Сайт создан в системе uCoz