指示符控制元素在XML文档中的组织方式。 有七种类型的指标,分为三大类。
顺序指示符
all
- 子元素可以按任何顺序出现。choice
- 只能选择一个子元素。sequence
- 子元素只能按指定顺序出现。
出现指示符
maxOccurs
- 子元素只能出现maxOccurs
次数。minOccurs
- 子元素必须出现minOccurs
次数。
分组指示符
group
- 定义相关的元素集。attributeGroup
- 定义相关的属性集。
1. 顺序指示符
使用<all>
,student
元素可以在XML文档中以任何顺序使用:firstname
,lastname
,nickname
和marks
这些子元素。如下所示 -
<xs:complexType name = "StudentType" mixed = "true">
<xs:all>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "nickname" type = "xs:string"/>
<xs:element name = "marks" type = "xs:positiveInteger"/>
</xs:all>
<xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>
<xs:element name = 'student' type = 'StudentType' />
使用<choice>
,student
元素只能包含XML文档中的:firstname
,lastname
,nickname
和marks
子元素之一。如下所示 -
<xs:complexType name = "StudentType" mixed = "true">
<xs:choice>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "nickname" type = "xs:string"/>
<xs:element name = "marks" type = "xs:positiveInteger"/>
</xs:choice>
<xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>
<xs:element name = 'student' type = 'StudentType' />
使用<sequence>
,student
元素只能在XML文档中以指定的顺序使用firstname
,lastname
,nickname
和marks
子元素。
<xs:complexType name = "StudentType" mixed = "true">
<xs:sequence>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "nickname" type = "xs:string"/>
<xs:element name = "marks" type = "xs:positiveInteger"/>
</xs:sequence>
<xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>
<xs:element name = 'student' type = 'StudentType' />
出现指示符
使用<maxOccurs>
,student
元素在XML文档中最多可以有两个nickname
,如下代码 -
<xs:complexType name = "StudentType" mixed = "true">
<xs:all>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "nickname" type = "xs:string" maxOccurs="2"/>
<xs:element name = "marks" type = "xs:positiveInteger"/>
</xs:all>
<xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>
<xs:element name = 'student' type = 'StudentType' />
使用<minOccurs>
,student
元素在XML文档中至少要有两个nickname
。如下代码 -
<xs:complexType name = "StudentType" mixed = "true">
<xs:all>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "nickname" type = "xs:string" minOccurs="2"/>
<xs:element name = "marks" type = "xs:positiveInteger"/>
</xs:all>
<xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>
<xs:element name = 'student' type = 'StudentType' />
分组指标符
<group>
用于对一组相关元素进行分组。 在这里,创建了一组name
,然后使用该组来定义student
元素。
<xs:group name = "infogroup">
<xs:sequence>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "birthdate" type = "xs:date"/>
</xs:sequence>
</xs:group>
<xs:element name = "student" type = "studentType"/>
<xs:complexType name = "studentType">
<xs:sequence>
<xs:group ref = "infogroup"/>
<xs:element name = "marks" type = "xs:integer"/>
</xs:sequence>
</xs:complexType>
<attributeGroup>
用于对相关的属性集进行分组。 在这里,我们创建了一组name
,然后使用该组来定义student
元素的属性。
<xs:attributeGroup name = "infogroup">
<xs:sequence>
<xs:attribute name = "firstname" type = "xs:string"/>
<xs:attribute name = "lastname" type = "xs:string"/>
<xs:attribute name = "birthdate" type = "xs:date"/>
</xs:sequence>
</xs:attributeGroup>
<xs:element name = "student" type = "studentType"/>
<xs:complexType name = "studentType">
<xs:sequence>
<xs:attributeGroup ref = "infogroup"/>
<xs:element name = "marks" type = "xs:integer"/>
</xs:sequence>
</xs:complexType>