这是在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>
答案 0 :(得分:1)
复杂类型可能包含简单或复杂的内容。你会使用&lt; simpleContent&gt;如果您使用简单内容定义复杂类型。您必须使用&lt; complexContent&gt;限制或扩展另一个复杂类型时的元素(因为您在&lt; complexContent&gt;元素中将基类型指定为属性)。如果您只是创建一个复杂类型(具有复杂内容),您可以使用(但不要求使用)&lt; complexContent&gt;元件。
您的枚举看起来正确。
答案 1 :(得分:1)
元素类型可以在XML Schema中分为两类
此外,包含标记(组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>
在您的结构中,类型为“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>