XSD - 複雜指示器



指示器控制元素在 XML 文件中的組織方式。有七種指示器型別,分為三個大類。

順序指示器

  • 全部 − 子元素可以按任意順序出現。

  • 選擇 − 只出現一個子元素。

  • 序列 − 子元素只能按指定順序出現。

出現指示器

  • MaxOccurs − 子元素最多隻能出現 MaxOccurs 次。

  • MinOccurs − 子元素必須出現 MinOccurs 次。

組指示器

  • − 定義相關元素集。

  • 屬性組 − 定義相關屬性集。

順序指示器

使用 <all> 學生元素可以在 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> 學生元素在 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>,學生元素只能在指定的順序中包含 firstname、lastname、nickname 和 marks 的子元素,這一點在 XML 文件中體現。

<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>,學生元素在 XML 文件中最多隻能有兩個暱稱。

<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>,學生元素應該在 XML 文件中有兩個暱稱。

<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> 用於對相關的元素集進行分組。此處我們建立了一個名稱部分組,然後使用此組定義了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> 用於對相關的屬性集進行分組。此處我們建立了一個名稱部分組,然後使用此組為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_complex_types.htm
廣告
© . All rights reserved.