作用:
通过指示器,我们可以控制在文档中使用元素的方式
指示器种类
Order 指示器:
-
All
-
Choice
-
Sequence
Occurrence 指示器:
-
maxOccurs
-
minOccurs
Group 指示器:
-
Group name
-
attributeGroup name
Order指示器
作用:
定义元素的顺序
All指示器
作用:
-
规定子元素可以按照任意顺序出现
-
且每个子元素必须只出现一次
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
(使用 <all> 指示器时,你可以把 <minOccurs> 设置为 0 或者 1,而只能把 <maxOccurs> 指示器设置为 1)
Choice指示器
<choice> 指示器规定可出现某个子元素或者可出现另外一个子元素(非此即彼)
(choice本身为 n.选择)
<xs:element name="person">
<xs:complexType>
<xs:choice>
<!--下面的子元素就是二选一的格局-->
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>
Sequence指示器
<sequence> 规定子元素必须按照特定的顺序出现
(枚举出现)
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<!--下面的子元素必须按顺序出现-->
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Occurrence指示器
作用:
定义某个元素出现的频率
注意:
所有的 "Order" 和 "Group" 指示器(any、all、choice、sequence、group name 以及 group reference),其中的 maxOccurs 以及 minOccurs 的默认值均为 1
maxOccurs指示器
规定某元素可出现的最大次数
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string" maxOccurs="10"/>
</xs:sequence>
</xs:complexType>
</xs:element>
minOccurs指示器
规定某元素可出现的最小次数
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
maxOccurs="10" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
如需使某个元素的出现次数不受限制,请使用 maxOccurs="unbounded" 这个声明
实际的XML转XSD运用指示器的例子
根据以上条件转XSD
Group指示器
作用:
定义相关的数批元素
元素组:
通过 group 声明进行定义
<xs:group name="groupname">
...
</xs:group>
必须在 group 声明内部定义一个 all、choice 或者 sequence 元素
实例:
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
把 group 定义完毕以后,就可以在另一个定义中引用它
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
属性组
作用:
通过 attributeGroup 声明来进行定义
<xs:attributeGroup name="groupname">
...
</xs:attributeGroup>
实例:
定义了名为 "personattrgroup" 的一个属性组
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
定义完毕属性组之后,就可以在另一个定义中引用它
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
<xs:element name="person">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
<!--ref="内容"说明这个内容要在之前定义-->
</xs:complexType>
</xs:element>