以下为一个表示学校的xml文件,学校内有若干学生,每个学生都有基本信息,电脑信息,选课信息
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 表示一个学校的xml --> <school
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com school.xsd"> <!-- 表示学校学生,可以有一个或者多个 -->
<students>
<!-- 每个学生都有学号、姓名、年龄,
每个学生都有选课,有些选多门功课
有些学生有电脑 -->
<student>
<id address="北京">101</id>
<name>张三</name><!-- 姓名不能为空 -->
<age>20</age><!--年龄要求必须是20-30之间 -->
<class>语文</class>
</student>
<student>
<id address="上海">201</id>
<name>张三</name><!-- 姓名不能为空 -->
<age>20</age><!--年龄要求必须是20-30之间 -->
<computer>IBM</computer>
<class>语文</class>
<class>语文</class>
</student>
</students>
</school>
xml引入school.xsd文件作文校验,目前主要的xsd写法有两种:
1、使用元素为基本对象,基于首先对所有元素和属性的定义,然后再使用 ref 属性来引用它们。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified"> <xs:element name="id">
<xs:complexType ><!--定义学号为数字型,且只能为3位数字-->
<xs:simpleContent>
<xs:extension base="xs:integer" >
<xs:attribute name="address" type="xs:string"></xs:attribute><!--定义属性-->
</xs:extension>
</xs:simpleContent>
</xs:complexType >
</xs:element>
<xs:element name="name">
<xs:simpleType><!--定义姓名-->
<xs:restriction base="xs:string" />
</xs:simpleType>
</xs:element>
<xs:element name="sex">
<xs:simpleType ><!--定义性别,只能为男或者女-->
<xs:restriction base="xs:string" >
<xs:pattern value="男|女"></xs:pattern>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="age">
<xs:simpleType><!--定义年龄,只能为20-30的整数-->
<xs:restriction base="xs:integer" >
<xs:minInclusive value="20" />
<xs:maxInclusive value="30" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="computer">
<xs:simpleType ><!--定义电脑,只能包含字母-->
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]+"></xs:pattern>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="class">
<xs:simpleType><!--定义课程,只能为选定值-->
<xs:restriction base="xs:string">
<xs:enumeration value="语文" />
<xs:enumeration value="数学" />
<xs:enumeration value="政治" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:group name="studentGroup">
<xs:sequence><!--表明元素可以按任意属性出现,且只能出现一次-->
<xs:element ref="id" />
<xs:element ref="name" />
<xs:element ref="age" />
<xs:element ref="sex"/>
</xs:sequence>
</xs:group>
<xs:element name="student">
<xs:complexType>
<xs:sequence>
<xs:group ref="studentGroup"></xs:group><!--引用学生基本属性-->
<xs:element name="computer" type="computerType"></xs:element><!--学生拥有电脑-->
<xs:any></xs:any><!--其他属性-->
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="students">
<xs:complexType>
<xs:sequence>
<xs:element ref="student" minOccurs="1" maxOccurs="10">
</xs:element>
</xs:sequence>
<xs:attribute name="address" type="xs:string"></xs:attribute><!--定义属性-->
</xs:complexType>
</xs:element> <xs:element name="school">
<xs:complexType>
<xs:sequence>
<xs:element ref="students" />
</xs:sequence>
</xs:complexType>
</xs:element> </xs:schema>
2、使用类型为基本对象,定义了类或者类型,这样使我们有能力重复使用元素的定义。具体的方式是:首先对简易元素和复合元素进行命名,然后通过元素的 type 属性来指向它们
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified"> <xs:simpleType name="addressType"><!--地址属性-->
<xs:restriction base="xs:string">
</xs:restriction>
</xs:simpleType> <xs:complexType name="idType"><!--定义学号为数字型,且只能为3位数字-->
<xs:simpleContent>
<xs:extension base="xs:integer" >
<xs:attribute name="address" type="addressType"></xs:attribute><!--定义属性-->
</xs:extension>
</xs:simpleContent>
</xs:complexType >
<xs:simpleType name="nameType"><!--定义姓名-->
<xs:restriction base="xs:string" />
</xs:simpleType>
<xs:simpleType name="sexType"><!--定义性别,只能为男或者女-->
<xs:restriction base="xs:string" >
<xs:pattern value="男|女"></xs:pattern>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ageType"><!--定义年龄,只能为20-30的整数-->
<xs:restriction base="xs:integer" >
<xs:minInclusive value="20" />
<xs:maxInclusive value="30" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="computerType"><!--定义电脑,只能包含字母-->
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]+"></xs:pattern>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="classType"><!--定义课程,只能为选定值-->
<xs:restriction base="xs:string">
<xs:enumeration value="语文" />
<xs:enumeration value="数学" />
<xs:enumeration value="政治" />
</xs:restriction>
</xs:simpleType>
<xs:group name="studentGroup">
<xs:sequence><!--表明元素可以按任意属性出现,且只能出现一次-->
<xs:element name="id" type="idType" />
<xs:element name="name" type="nameType" />
<xs:element name="age" type="ageType" />
<xs:element name="sex" type="sexType" />
</xs:sequence>
</xs:group>
<xs:complexType name="studentType">
<xs:sequence>
<xs:group ref="studentGroup"></xs:group><!--引用学生基本属性-->
<xs:element name="computer" type="computerType"></xs:element><!--学生拥有电脑-->
<xs:any></xs:any><!--其他属性-->
</xs:sequence>
</xs:complexType> <xs:complexType name="studentsType">
<xs:sequence>
<xs:element name="student" type="studentType" minOccurs="1" maxOccurs="10">
</xs:element>
</xs:sequence>
<xs:attribute name="address" type="addressType"></xs:attribute><!--定义属性-->
</xs:complexType> <xs:complexType name="schoolType">
<xs:sequence>
<xs:element name="students" type="studentsType"/>
</xs:sequence>
</xs:complexType> <xs:element name="school" type="schoolType">
</xs:element> </xs:schema>
当然针对简单的xml文件,还可以使用直接嵌套方式进行定义,但开发中不常用,这里不做叙述。