Это правильный способ добавить перечисляемые атрибуты в complexType? - PullRequest
1 голос
/ 01 июля 2011

Это правильный способ установки атрибута с перечисляемыми значениями для complexType AvailStatusMessageType. Я вижу много примеров, которые объявляют раздел complexContent прямо под объявлением complexType? Для чего нужен этот комплексный контент и нужен ли он здесь?

<xs:complexType name="AvailStatusMessageType">
    <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:complexType>

Ответы [ 2 ]

1 голос
/ 08 июля 2011

Типы элементов в XML-схемах можно разделить на две категории

  1. Элементы, которые могут содержать структурную разметку (атрибуты или дочерние элементы)
  2. Элементы, содержащие только текстовую разметку

Далее, элементы, содержащие разметку (группа 1), можно снова разделить на две группы

  1. Элементы, которым разрешено иметь дочерние элементы
  2. Элементы, которым не разрешено иметь дочерние элементы

Первое деление разделяет (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>
1 голос
/ 07 июля 2011

Сложный тип может иметь простое или сложное содержимое.Вы бы использовали , если бы вы определяли сложный тип с простым контентом.Элемент необходимо использовать, когда вы ограничиваете или расширяете другой сложный тип (поскольку базовый тип указывается в качестве атрибута в элементе ).Если вы просто создаете сложный тип (со сложным содержимым), как вы это делаете, вы можете использовать (но не обязаны использовать) элемент .

Ваше перечисление выглядит правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...