XML SCHEMA简单教程
1 介绍
本教程是笔者学习W3C的《XML Schema Tutorial》的笔记。如果你对原教程感兴趣,可以浏览http://www.w3schools.com/schema/default.asp。
XML Schema是W3C制定的基于XML格式的XML文档结构描述标准。作为一种文档描述语言,通常我们将其简写为XSD(XML Schema Define)。XSD作为DTD(文档类型定义)的替代者,已经广泛地应用到各种商业应用。使用XSD,我们不仅可以描述XML文档的结构以便颁布业务标准,而且可以使用支持XSD的通用化XML解析器对XML文档进行解析并自动地检查其是否满足给定的业务标准。应用XSD校验XML文档的结构后,我们不仅验证了XML文档的有效性(Well-Formed Document),还验证了XML文档的合法性,甚至验证了XML文档各域的值合法性(数据类型与编码值),而且这些验证工作不必我们编写任何代码,只需使用支持XSD的通用化XML文档解析器即可完成。这就给应用软件带来了巨大的灵活性,以前需要借助数据库或配置文件才能完成的参数化管理,现在只需按照新的业务需求发布新的XML Schema即可。
XML:
<?xml version="1.0"?> <note xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com note.xsd"> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
XSD:
<?xml version="1.0"?> (1) <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" (2) targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified"> <xs:element name="note"> (3) <xs:complexType> (4) <xs:sequence> (5) <xs:element name="to" type="xs:string"/> (6) <xs:element name="from" type="xs:string"/> (7) <xs:element name="heading" type="xs:string"/> (8) <xs:element name="body" type="xs:string"/> (9) </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
说明如下:
(1)<?xml version="1.0" ncoding="UTF-8"?>
XML文档定义,描述本文档使用的XML标准版本及文档编码标准。
(2)<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
xs:schema 是所有XSD文档的根元素,其属性描述文档的名空间及文档引用;
xmlns:xs="http://www.w3.org/2001/XMLSchema" 指示使用xs:作前缀的元素、属性、类型等名称是属于http://www.w3.org/2001/XMLSchema名空间的。
targetNamespace="http://www.w3schools.com" 指示本文档定义的元素、属性、类型等名称属于http://www.w3schools.com名空间;
xmlns="http://www.w3schools.com" 指示缺省的名空间是http://www. w3schools.com,即没有前缀的元素、属性、类型等名称是属于该名空间的。
elementFormDefault="qualified" 指示使用本XSD定义的XML文档所使用的元素必须在本文档中定义且使用名空间前缀。
(3)<xs:element name="note">
定义一个元素,该元素的名称是note,即XML中的<note>;
(4)<xs:complexType>
<note>元素的类型是复杂类型,具体格式由子元素定义;
(5)<xs:sequence>
<note>元素的子元素必须按顺序出现。具体的顺序由子元素的定义顺序决定;
(6)<xs:element name="to" type="xs:string"/>
定义一个元素<to>,其类型是string,且其是<note>的第1个子元素;
(7)<xs:element name="from" type="xs:string"/>
定义一个元素<from>,其类型是string,且其是<note>的第2个子元素;
(8)<xs:element name="heading" type="xs:string"/>
定义一个元素<heading>,其类型是string,且其是<note>的第3个子元素;
(9)<xs:element name="body" type="xs:string"/>
定义一个元素<body>,其类型是string,且其是<note>的第4个子元素;
上面的说明可以看出我们描述的XML文档应满足这些要求:根元素是<note>;<note>可以包含四个子元素,分别是<to>、<from>、<heading>、<body>,且必须按<to>、<from>、<heading>、<body>的顺序出现;四个子元素都是string类型的。
2 格式良好文档
满足下列要求的XML文档,称为格式良好的文档(Well-Formed Document):
(1) 使用XML定义打头,如:<?xml version="1.0" encoding="UTF-8"?>;
(2) 文档仅包含一个唯一的根元素;
(3) 起始标记(<xxx>)必须与结束标记(</xxx>)匹配;
(4) 大小写敏感;
(5) 所有元素是闭合的(<必须与>配套);
(6) 所有元素嵌套是正确的;
(7) 所有属性使用""或’’;
(8) 特殊字符必须使用实体;应注意到,满足上述要求的文档只能算是有效的文档,但不能算是合法的文档。例如,业务标准要求文档中必须包含5个<SEG>元素,如果文档中仅包含了4个,它仍是格式良好的文档,但不满足业务标准要求,是一个非法的文档。