这是将枚举属性添加到complexType的正确方法吗?

时间:2011-07-01 14:52:06

标签: xsd

这是在complexType AvailStatusMessageType上设置具有枚举值的属性的正确方法吗?我看到很多例子在complexType声明的正下方声明了一个complexContent部分?这个复杂的内容是什么?这是必要的吗?

<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 个答案:

答案 0 :(得分:1)

复杂类型可能包含简单或复杂的内容。你会使用&lt; simpleContent&gt;如果您使用简单内容定义复杂类型。您必须使用&lt; complexContent&gt;限制或扩展另一个复杂类型时的元素(因为您在&lt; complexContent&gt;元素中将基类型指定为属性)。如果您只是创建一个复杂类型(具有复杂内容),您可以使用(但不要求使用)&lt; complexContent&gt;元件。

您的枚举看起来正确。

答案 1 :(得分:1)

元素类型可以在XML Schema中分为两类

  1. 可包含结构标记(属性或子元素)的元素
  2. 仅包含文字标记的元素
  3. 此外,包含标记(组1)的元素可以再次分为两组

    1. 允许拥有子元素的元素
    2. 不允许包含子元素的元素
    3. 第一个分区将(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>
      

      在您的结构中,类型为“AvailStatusMessageType”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>