复杂类型用于定义包含子元素或属性的XML元素结构,通过<xs:complexType>标签声明,支持元素内容、混合内容、空内容及带属性的简单内容四种形式;可使用<sequence>、<all>、<choice>定义子元素顺序与出现规则,并通过minOccurs和maxOccurs控制次数;属性通过<xs:attribute>添加,具名类型可复用,匿名类型嵌套于元素内,适用于构建层次化数据模型。

在XML Schema中,复杂类型(Complex Type)用于定义包含子元素、属性或两者兼具的元素结构。它比简单类型更强大,能描述具有层次结构的数据内容。复杂类型不能直接包含文本内容,除非它仅包含简单内容并带有属性。
复杂类型的定义方式
使用<xs:complexType>标签来定义一个复杂类型。该类型可以是匿名的(直接嵌套在元素定义中),也可以是具名的(可被多个元素复用)。
基本语法如下:
<xs:complexType name="TypeName">
<!-- 内容模型定义 -->
</xs:complexType>
内容模型分类
复杂类型的内容可以分为以下几种形式:
- 元素内容(Element-Only Content):只能包含子元素,不能有文本内容。常用于结构化数据。
- 混合内容(Mixed Content):允许文本和子元素混合出现,适用于文档类内容,如段落中包含加粗文字。
- 空内容(Empty Content):元素不包含任何文本或子元素,但可以有属性。
- 带属性的简单内容(Simple Content with Attributes):元素主体是文本,但可以附加属性。
常见结构定义方法
通过<sequence>、<all>或<choice>来组织子元素的出现顺序与规则:
- <sequence>:子元素必须按指定顺序出现。
- <all>:子元素可任意顺序出现,且每个最多出现一次。
- <choice>:从多个子元素中选择一个出现。
还可以使用minOccurs和maxOccurs控制元素出现次数,例如minOccurs="0"表示可选,maxOccurs="unbounded"表示可重复多次。
添加属性的方法
使用<xs:attribute>为复杂类型定义属性。例如:
<xs:complexType name="PersonType">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="age" type="xs:int"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
上面的例子定义了一个名为PersonType的复杂类型,包含两个子元素和一个必需的id属性。
基本上就这些。掌握复杂类型的定义方式,就能灵活构建结构化的XML数据模型。关键是理解内容类型的选择和元素/属性的组织逻辑。









