Типы элементов в XML-схемах можно разделить на две категории
- Элементы, которые могут содержать структурную разметку (атрибуты или дочерние элементы)
- Элементы, содержащие только текстовую разметку
Далее, элементы, содержащие разметку (группа 1), можно снова разделить на две группы
- Элементы, которым разрешено иметь дочерние элементы
- Элементы, которым не разрешено иметь дочерние элементы
Первое деление разделяет (1) <complexType>
и (2) <simpleType>
. Второй разделяет (1) <complexContent>
и (2) <simpleContent>
.
<xs:complexContent>
обычно не виден, потому что это неявное значение по умолчанию, поэтому вся структура может быть сокращена путем пропуска этого элемента. Это общая структура
<xs:complexType>
... (<xs:sequence> or anything) ...
</xs:complexType>
фактически идентичен
<xs:complexType>
<xs:complexContent>
<xs:restriction base="xs:anyType">
... (<xs:sequence> or anything) ...
</xs:restriction>
</xs:complexContent>
</xs:complexType>
В вашей структуре элемент с типом «InstalStatusMessageType» 1) содержит разметку 2) и имеет дочерние элементы. Таким образом, ваша структура представляет собой сложный тип со сложным содержанием. Ваш пример кажется правильным, даже если вы не использовали элемент <xs:complexContent>
, потому что вы на самом деле используете сокращенную форму. Это идентично этому:
<xs:complexType name="AvailStatusMessageType">
<xs:complexContent>
<xs:restriction base="xs:anyType">
<xs:sequence>
<xs:element name="LengthsOfStay" type="LengthsOfStayType" />
<xs:element name="RestrictionStatus" type="RestrictionStatusType"/>
</xs:sequence>
<xs:attribute name="BookingLimit">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="SetLimit" />
<xs:enumeration value="AdjustLimit"/>
<xs:enumeration value="RemoveLimit"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:restriction>
</xs:complexContent>
</xs:complexType>