XSD复杂指示符

指示符控制元素在XML文档中的组织方式。 有七种类型的指标,分为三大类。

顺序指示符

  • all - 子元素可以按任何顺序出现。
  • choice - 只能选择一个子元素。
  • sequence - 子元素只能按指定顺序出现。

出现指示符

  • maxOccurs - 子元素只能出现maxOccurs次数。
  • minOccurs - 子元素必须出现minOccurs次数。

分组指示符

  • group - 定义相关的元素集。
  • attributeGroup - 定义相关的属性集。

1. 顺序指示符

使用<all>student元素可以在XML文档中以任何顺序使用:firstnamelastnamenicknamemarks这些子元素。如下所示 -

<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文档中的:firstnamelastnamenicknamemarks子元素之一。如下所示 -

<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文档中以指定的顺序使用firstnamelastnamenicknamemarks子元素。

<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>

上一篇: XSD复杂类型 下一篇: XSD字符串