Давайте сначала решим, как
объявить элемент, который имеет атрибут и содержит простое значение. В экземпляре
документа такой элемент можно представить как:
<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, объявленный таким способом, сможет появиться в экземпляр
документа, как показано в начале данного раздела.