XSD中complexType用于定义含子元素、属性或二者的XML元素结构,支持sequence/all/choice内容模型、mixed内容、属性声明及命名复用。

在XSD中定义一个复杂类型(complexType),是为了描述包含子元素、属性或两者兼有的XML元素结构。复杂类型不能仅由文本构成,它允许你构建具有层级结构的数据模型。
1. 基本语法结构
使用 <xs:complexType> 元素来定义一个复杂类型,通常嵌套在 <xs:element> 内部或作为命名类型被引用。
示例:
<xs:element name="person"><xs:complexType>
<xs:sequence>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="lastName" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
2. 复杂类型可包含的组成部分
一个 complexType 可以包含以下内容:
- 元素内容(Element-only content):只包含子元素,例如上面的 person 包含 firstName 和 lastName。
- 混合内容(Mixed content):允许文本和子元素混合出现,通过设置 mixed="true" 实现。
- 仅文本内容 + 属性:可以包含简单文本内容并附加属性。
- 空元素 + 属性:元素本身无内容,但可以有属性。
3. 内容模型(Content Model)
使用不同的模型来组织子元素:
- <xs:sequence>:子元素必须按指定顺序出现。
- <xs:all>:子元素可以以任意顺序出现,但每个最多出现一次。
- <xs:choice>:从多个子元素中选择一个出现。
还可以为元素设置出现次数,如 minOccurs 和 maxOccurs:
<xs:element name="phone" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>4. 添加属性(Attributes)
在 complexType 中使用 <xs:attribute> 定义属性:
<xs:complexType><xs:sequence>
<xs:element name="email" type="xs:string"/>
</xs:sequence>
<xs:attribute name="id" type="xs:int" use="required"/>
</xs:complexType>
其中 use="required" 表示该属性必须存在,也可设为 "optional" 或省略(默认为 optional)。
5. 命名复杂类型(Reusable Complex Type)
如果多个元素需要使用相同结构,可以给 complexType 起名字,便于复用:
<xs:complexType name="PersonType"><xs:sequence>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="lastName" type="xs:string"/>
</xs:sequence>
<xs:attribute name="age" type="xs:int"/>
</xs:complexType>
<xs:element name="author" type="PersonType"/>
<xs:element name="editor" type="PersonType"/> 基本上就这些。根据实际需求组合使用这些特性,就能定义出灵活且结构清晰的复杂类型。









