XML Schema只是XMLSchema语言当中的一种。因为容易与XML相混淆,有些人叫WXS(W3C XML Schema),有些人叫XSD(XMLSchema Definition)。
XML Schema就是写一套规则来约束一个XML文档必须遵循的规范。但与其它Schema不同的是,XSD还会验证数据类型(datatypes)。验证后的这些反馈信息集对于XML文件处理软件来说非常有用,不过因为要进行数据类型验证也招来了批评,因为不是所有XML文件内容需要进行数据类型验证。
XML Schema文件的后缀是xsd,MIME是application/xml或text/xml。当一个XML文件需要通过xsd验证时,可以把这个schema作为参数传给validationengine,或者通过xsi:schemaLocation和xsi:noNamespaceSchemaLocation来告诉验证引擎去哪找。
· 元素声明:包括元素名和目标命名空间。
· 属性声明(attributedeclaration):同样包含属性的名字和目标命名空间,属性的值可以有默认值,也可能是固定值。
· 简单和复杂类(simpleand complex types)
· 模型组(modelgroup)和属性组(attribute group):本质上是宏指令(macros):被命名的元素组和属性组可以在其它不同类型的定义中重用。
· 元素使用(attributeuse):指的是一个复杂类与一个属性声明的关系,指示某个attribute是强制的还是可选的。
· 基本粒子(elementparticle):代表一个复杂类与一个元素声明的关系,比如指示某个元素在内容中出现的最小和最大次数。可以使用通配符(wildcard,一般是*)。
XSD提供了19种基本数据类型:anyURI,base64Binary, Boolean, date, dateTime, decimal, double, float, duration,hexBinary, gDay, gMonth, gYear, gMonthDay, gYearMonth, NOTATION, QName, String,time。
另外还提供了三种机制来构造新的数据类型:
· 限制(restriction):指示只允许某些数据类型;
· 列表(list):允许一列值;
· 并集(union):允许不同类型的值;
通过这三个机制,XSD又衍生出了25种新的数据类型,这些新的数据类型也在XSD中,这些就是复杂类型。
在做完XSD验证后,就可以用一些数据模型来表达一个XML文件的结构和内容了。XML的数据模型包括:
· 词表(元素和属性名)
· 内容模型(关系和结构)
· 数据类型
这些信息的集合就叫Post-Schema-ValidationInfoset(PSVI)。
SampleAddress.xsd:
<?xml version="1.0" encoding="utf-8"?> <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Address"> <xs:complexType> <xs:sequence> <xs:element name="Recipient" type="xs:string" /> <xs:element name="House" type="xs:string" /> <xs:element name="Street" type="xs:string" /> <xs:element name="Town" type="xs:string" /> <xs:element name="County" type="xs:string" minOccurs="0" /> <xs:element name="PostCode" type="xs:string" /> <xs:element name="Country" minOccurs="0"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="IN" /> <xs:enumeration value="DE" /> <xs:enumeration value="ES" /> <xs:enumeration value="UK" /> <xs:enumeration value="US" /> </xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>一些开发工具就可以用图形化的方式把这个Schema表示出来:
一个遵循该XSD的XML文档:
<?xml version="1.0" encoding="utf-8"?>
<Address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="SimpleAddress.xsd">
<Recipient>Mr. Walter C. Brown</Recipient>
<House>49</House>
<Street>Featherstone Street</Street>
<Town>LONDON</Town>
<PostCode>EC1Y 8SY</PostCode>
<Country>UK</Country>
</Address>