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