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来告诉验证引擎去哪找。
Schema成份(components)
·元素声明:包括元素名和目标命名空间。
·属性声明(attributedeclaration):同样包含属性的名字和目标命名空间,属性的值可以有默认值,也可能是固定值。
·简单和复杂类(simpleand complex types)
·模型组(modelgroup)和属性组(attribute group):本质上是宏指令(macros):被命名的元素组和属性组可以在其它不同类型的定义中重用。
·元素使用(attributeuse):指的是一个复杂类与一个属性声明的关系,指示某个attribute是强制的还是可选的。
·基本粒子(elementparticle):代表一个复杂类与一个元素声明的关系,比如指示某个元素在内容中出现的最小和最大次数。可以使用通配符(wildcard,一般是*)。
类型(types)
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中,这些就是复杂类型。
验证信息集(post-schema-validationinfoset)
在做完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>