Давайте теперь предположим, что
мы хотим в элементе internationalPrice вместо содержания элемента и значения атрибута
использовать только значения атрибутов, которые бы отображали как единицу
валюты, так цену. Например:
<internationalPrice currency="EUR" value="423.46"/>
Такой элемент вообще не имеет никакого содержания. Его модель содержания пустая. Для того чтобы задать тип элемента с пустым содержанием, мы должны сначала определить тип, который позволял бы в его содержании использовать элементы. Однако, фактически, мы не будем объявлять никаких элементов и, поэтому, модель содержания такого типа пустая:
<xsd:element name=”internationalPrice”> <xsd:complexType> <xsd:complexContent> <xsd:restriction base=”xsd:anyType”> <xsd:attribute name=”currency” type=”xsd:string”/> <xsd:attribute name=”value” type=”xsd:decimal”/> </xsd:restriction> </xsd:complexContent> </xsd:complexType> </xsd:element>
В представленном примере, мы определяем
(анонимный) тип complexContent, предназначенный для описания элементов. Элемент complexContent показывает, что мы намереваемся ограничить или расширить модель
содержания сложного типа, а в restriction
базирующемся на типе anyType объявляется
два атрибута и не вводится никакого описания содержания элемента (дополнительные детали относительно
ограничения представлены в Разделе 4.4). Элемент internationalPrice, объявленный таким же способом, может
законно появиться в примере, как показано выше.
Представленный синтаксис для
элемента с пустым содержанием является достаточно подробным. Элемент internationalPrice можно объявить более компактно:
<xsd:element name=”internationalPrice”> <xsd:complexType> <xsd:attribute name=”currency” type=”xsd:string”/> <xsd:attribute name=”value” type=”xsd:decimal”/> </xsd:complexType> </xsd:element>
Компактный синтаксис работает, потому что сложный тип, определенный без simpleContent или complexContent, интерпретируется как краткая запись сложного содержания с ограничением, базирующемся на типе anyType.