XML Schema(简称xsd)是用来定义XML文档结构、内容和数据类型的规范,通过它可以明确XML中允许出现的元素、元素的顺序、数据类型以及约束条件,避免XML文档出现格式错误。在XML Schema中,元素是最核心的组成部分,所有XML文档的内容都需要通过元素定义来约束。

XML Schema元素定义的基本语法
在XML Schema中,定义元素需要使用<xs:element>标签,基本语法结构如下:
<xs:element name="元素名称" type="数据类型" />
其中name属性是必填项,用来指定元素的名称,type属性用来指定元素的数据类型,XML Schema内置了很多常用数据类型,比如xs:string表示字符串,xs:integer表示整数,xs:boolean表示布尔值等。
简单元素的定义
简单元素是指只包含文本内容,不包含其他子元素和属性的元素,定义方式如下:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- 定义一个名为username的字符串类型简单元素 -->
<xs:element name="username" type="xs:string" />
<!-- 定义一个名为age的整数类型简单元素 -->
<xs:element name="age" type="xs:integer" />
<!-- 定义一个名为is_student的布尔类型简单元素 -->
<xs:element name="is_student" type="xs:boolean" />
</xs:schema>
上述定义对应的合法XML元素示例如下:
<username>张三</username> <age>20</age> <is_student>true</is_student>
复杂元素的定义
复杂元素是指包含其他子元素或者包含属性的元素,定义复杂元素需要先定义元素的结构,再关联到元素上。常见的复杂元素有两种类型,一种是只包含子元素的,另一种是包含属性和子元素的。
只包含子元素的复杂元素
这类元素内部只有其他子元素,没有属性,定义方式如下:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- 定义user元素的结构 -->
<xs:element name="user" type="userType" />
<xs:complexType name="userType">
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="age" type="xs:integer" />
<xs:element name="email" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
这里<xs:sequence>标签表示子元素必须按照定义的顺序出现,对应的合法XML示例如下:
<user>
<name>李四</name>
<age>22</age>
<email>lisi@ipipp.com</email>
</user>
包含属性的复杂元素
如果元素需要包含属性,需要在<xs:complexType>内部使用<xs:attribute>标签定义属性:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="book" type="bookType" />
<xs:complexType name="bookType">
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author" type="xs:string" />
</xs:sequence>
<!-- 定义id属性,use="required"表示属性必填 -->
<xs:attribute name="id" type="xs:integer" use="required" />
<!-- 定义category属性,默认为文学 -->
<xs:attribute name="category" type="xs:string" default="文学" />
</xs:complexType>
</xs:schema>
对应的合法XML示例如下:
<book id="1" category="科技">
<title>XML入门教程</title>
<author>王五</author>
</book>
元素的常用约束属性
在定义元素时,还可以通过一些属性来设置元素的出现次数、默认值等约束:
- minOccurs:指定元素最少出现的次数,默认值为1,设置为0表示元素可选
- maxOccurs:指定元素最多出现的次数,默认值为1,设置为
unbounded表示不限制次数 - default:指定元素的默认值,当元素没有内容时会自动使用默认值
- fixed:指定元素的固定值,元素内容必须等于该固定值
以下是使用这些属性的示例:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="students" type="studentsType" />
<xs:complexType name="studentsType">
<xs:sequence>
<!-- student元素最少0次,最多不限制次数 -->
<xs:element name="student" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
<!-- class元素默认值为一年级 -->
<xs:element name="class" type="xs:string" default="一年级" />
<!-- school元素固定值为阳光小学 -->
<xs:element name="school" type="xs:string" fixed="阳光小学" />
</xs:sequence>
</xs:complexType>
</xs:schema>
元素定义的注意事项
在定义XML Schema元素时,需要注意以下几点:
元素名称必须符合XML命名规范,不能以数字或下划线开头,不能包含空格和特殊字符。
同一个XML Schema中,元素名称不能重复,除非它们处于不同的命名空间。
复杂元素的定义需要先定义复杂类型,再通过将元素类型关联到复杂类型来实现,不能直接在<xs:element>标签内部嵌套<xs:complexType>之外的子元素定义。
如果需要在元素内部直接定义复杂类型,也可以采用内联的方式:
<xs:element name="address">
<xs:complexType>
<xs:sequence>
<xs:element name="city" type="xs:string" />
<xs:element name="street" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
这种内联定义的方式适合只使用一次的复杂类型,不需要单独定义复杂类型名称,代码会更简洁。
XML_Schema元素定义XML约束xsd修改时间:2026-07-17 13:15:37