例:note.XSD
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" //显示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs:
targetNamespace="http://www.w3school.com.cn" //显示被此 schema 定义的元素来自命名空间: "http://www.w3school.com.cn"。
xmlns="http://www.w3school.com.cn" //指出默认的命名空间是 "http://www.w3school.com.cn"。
elementFormDefault="qualified"> //指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。
<xs:element name="note">
<xs:complexType> 复合型
<xs:sequence> 指示器
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
例:note.XML
<?xml version="1.0"?>
<note xmlns="http://www.w3school.com.cn" //规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于 "http://www.w3school.com.cn" 这个命名空间。
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" // XML Schema 实例命名空间
xsi:schemaLocation="http://www.w3school.com.cn note.xsd"> //schemaLocation 属性,此属性有两个值:第一个值是需要使用的命名空间,第二个值是供命名空间使用的 XML schema 的位置。
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
一、定义元素
name为元素名,type为元素类型
<color>red</color> xml元素
<xs:element name="color" type="xs:string" default="red"/> default为默认值
<xs:element name="color" type="xs:string" fixed="red"/> fixed为固定值
二、定义属性
<lastname lang="EN">Smith</lastname> xml元素属性
<xs:attribute name="lang" type="xs:string"/> name定义属性名,type定义属性类型
<xs:attribute name="lang" type="xs:string" default="EN"/> default为默认属性值
<xs:attribute name="lang" type="xs:string" fixed="EN"/>
fixed为固定属性值
<xs:attribute name="lang" type="xs:string" use="required"/> use设置属性为必选属性
三、对值的限定
1.对一个值的限定
下面的例子定义了带有一个限定且名为 "age" 的元素。age 的值不能低于 0 或者高于 120:
<age>110</age> xml元素
<xs:element name="age"> 定义了名为age的元素
<xs:simpleType>
<xs:restriction base="xs:integer"> 定义了类型为integer
<xs:minInclusive value="0"/> 定义了最小值为0
<xs:maxInclusive value="120"/> 定义了最大值为120
</xs:restriction>
</xs:simpleType>
</xs:element>
2.对一组固定值的限定
下面的例子定义了带有一个限定的名为 "car" 的元素。可接受的值只有:Audi, Golf, BMW
<car>BMW</car> xml元素
注释:在这种情况下,类型 "carType" 可被其他元素使用,因为它不是 "car" 元素的组成部分。
<xs:element name="car"> 定义了一个名为car的元素 <xs:element name="car" type="carType"/> 定义type为carType
<xs:simpleType>
<xs:simpleType name="carType"> 定义name与上面type做联系
<xs:restriction base="xs:string"> 定义了类型为String
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/> 定义了car元素的值可以为 Audi
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
或 Golf
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
或 BMW
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:restriction>
</xs:simpleType>
</xs:simpleType>
</xs:element>
3.对一系列值的限定 注:外层语法不变,只修改内层语法(<xs:restriction base="xs:string">这里就是内层</xs:restriction>)
a.下面的例子定义了带有一个限定的名为 "letter" 的元素。可接受的值只有小写字母 a - z 其中的一个:
<xs:pattern value="[a-z]"/>
b.下一个例子定义了带有一个限定的名为 "initials" 的元素。可接受的值是大写字母 A - Z 其中的三个:
<xs:pattern value="[A-Z][A-Z][A-Z]"/>
c.下一个例子也定义了带有一个限定的名为 "initials" 的元素。可接受的值是大写或小写字母 a - z 其中的三个:
<xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
d.下面的例子定义了带有一个限定的名为 "gender" 的元素。可接受的值是 male 或者 female:
<xs:pattern value="male|female"/>
4.对空白字符限定 注:外层语法不变,只修改内层语法(<xs:restriction base="xs:string">这里就是内层</xs:restriction>)
a.这个 whiteSpace 限定被设置为 "preserve",XML 处理器不会移除任何空白字符:
<xs:whiteSpace value="preserve"/>
b.这个 whiteSpace 限定被设置为 "replace",XML 处理器将移除所有空白字符(换行、回车、空格以及制表符)
<xs:whiteSpace value="replace"/>
5.长度限定
<xs:length value="8"/> 最多8字符