XSD复杂类型元素中限制元素的顺序以及出现的次数

在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行,在第五行填上空格字符来限制。

转载于:https://my.oschina.net/lichao100/blog/392833

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值