XML Schema中的复杂数据类型complexType 的分析
先来对比:
simpleType:定义了一个简单类型它决定了元素和属性值的约束和相关信息(一个type不但要定义元素的类型还要定义这个元素的属性的值的类型和约束的)
complexType:定义了一个复合类型决定了一组元素和属性值的约束和相关信息
已经知道complexType 里面可以放
attruibute
attruibuteGroup
group
sequence
simpleContent
complexContent
choice
simpleContent
1.应用于complexType 对complexType的内容进行约束和扩展
注意主要是对内容进行约束和扩展
对于属性的定义虽然放在simpleContent里面但其实跟simpleContent没什么关系的该怎么写还是怎么写的
2.用了simpleContent 是限定了元素中间的内容的值既然是限定具体内容的
那么子元素自然是不会有了
所以simpleContect里面是没有子元素的但是一定有属性的不然就是个simpleType了但是属性还是可以有的因为属性不受约束
3以前用simpleType 就是没有子元素没有属性
用complexType 可以实现没有子元素没属性。
但是complexType对于有属性没有子元素的这种情况值的内容没有办法做约束所以就有了simpleContect
看例子:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="/2001/XMLSchema"elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="carType">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="B MW 530"/>
<xs:enumeration value="B MW 740"/>
<xs:enumeration value="B MW 318i"/>
<xs:enumeration value="B MW M118"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
所以为了能够让complexType也用上内置数据类型
我们用<xs:extension base="xs:string"></xs:extension>
-->
choice
choice 允许唯一的一个元素从一个组中被选出
具有属性:minOccurs / maxOccurs 表示的是这个choice组整体出现的次数
看例子:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="/2001/XMLSchema"elementFormDefault="qualified"attribute FormDefault="unqualified">
<xs:element name="car">
<xs:complexType>
<xs:choice maxOccurs="2"minOccurs="1">
<xs:element name="BMW"type="xs:string"></xs:element>
<xs:element name="VW">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="santana"/>
<xs:enumeration value="jetta"/>
<xs:enumeration value="golf"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:choice>
<xs:attribute name="price"><!--attribute 里面只能是内置类型或者simpleType 不可能是复杂类型的-->
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:enumeration value="350.2"/>
<xs:enumeration value="123.2"/>
<xs:enumeration value="26.2"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>
XML实例:
sequence
属性:minOccurs maxOccurs。