在XML Schema中,有3类共7种指示器(Indicator):
一、定义元素如何出现:包括all,sequence,choice 这三个。
1、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>
2、sequence:子元素在XML文件中按照XML Schema定义的顺序出现。前面已经提过。
3、choice:两个子元素中仅出现一个。例如:
<xs:element name="gender">
<xs:complexType>
<xs:choice>
<xs:element name="male" type="male"/>
<xs:element name="female" type="female"/>
</xs:choice>
</xs:complexType>
</xs:element>
二、次数限定类,包括minOccurs和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" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
如果元素出现的最大次数无限制,可以使用maxOccurs="unbounded"。
三、组限定:包括Group和attributeGroup,用来定义一组相关的元素。比如:
<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: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>
补充:<any>和<anyAttribute> ,在XML Schema中使用这两个元素可以放宽Schema对XML文件内容的限制。容许我们在XML文件中使用没有在Schema中定义的元素和属性。
元素属性substitutionGroup可以让元素b替换元素a在XML文件中出现。比如:
<xs:element name="cn_name" type="xs:string"/>
<xs:element name="en_name" substitutionGroup="cn_name"/>
这种情形类似choice:
<xs:choice>
<xs:element name="cn_name" type="xs:string"/>
<xs:element name="en_name" type="xs:string"/>
</xs:choice>
这是利用指示器,但是在excel中建立好映射之后,将对应element脱到对应格子上之后,格子还是可扩展的,最后没有找到更好的解决办法。只能通过在对应格子下面加上一个空格符填充的归并后的cell来限制继续往下写。例如,想限制住a type,在xml中a 只能出现4行。那就将excel中的映射框拖到4行,在第五行填上空格字符来限制。