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