像全部XML Schema 语言同样,XSD用来描述一组规则──一个XML文件必须遵照这些规则,才能根据该schema‘合法(Valid)’。php
然而,与其余XML Schema 语言不一样,XSD意图设计为在确认一个文档的有效性时,将会产生知足特定数据类型的一个信息集合。这种后验证的XML信息集可用来开发XML文件处理软件。正则表达式
由于有其余XML schema 语言存在,故在引用这W3C建议的语言时,使用XML Schema或W3C XML Schema,Schema永远前缀大写。编程
“XML Schema”在2001年5月成为W3C推荐标准。因为“XML Schema”做为一种W3C的推荐标准的名字与广义的XML Schema 语言存在名称上的混淆,用户社区的一部分人采用了“WXS”来称呼它, 用户社区的另外一部分人采用“XSD”(XML Schema Definition首字母缩略字)来称呼它。W3C发布的1.1标准采用了“XSD”做为官方称呼。app
在官方文档的参考附录里,XSD标准认可受到[文件类型描述|DTD]]和其余早期XML schema 语言的影响,如DDML、SOX、XML-Data、以及XDR。XSD从中吸取了一些特性,然而也在这些特性中有所折衷。这些早期schema 语言中的XDR与SOX在XML Schema发布后仍继续使用了一段时间。很多微软的产品支持XDR直到2006年十二月MSXML 6.0的发布(MSXML 6.0抛弃了XDR改用XSD)[1] 。Commerce One, Inc支持它本身的SOX schema 语言直到该公司于2004年底破产。2004年十二月,Novell, Inc.购买了该公司,包括那些与SOX相关的专利,据报导是尽力防止被某些不相关的、以打专利相关官司为生的公司剥削图利[2] 。ide
著名的XSD建议的内容但在XML本身的DTD中不可用的特性是名字空间感知(namespace awareness)与数据类型。spa
2012年4月, XSD 1.1成为W3C推荐标准。April 2012设计
技术上说schema是元数据的一个抽象集合,包含一套schema component: 主要是元素与属性的声明、复杂与简单数据类型的定义。这些schema component一般是在处理一批schema document时被建立。schema文档包含着schema component的源语言定义。在平常使用中,一个schema文档常被称做一个schema。rest
Schema文档经过名字空间组织起来:全部的被命名的schema component属于一个目标名字空间;这个目标名字空间是schema文档做为总体的一个属性。schema文档能够包含进来(include)使用同一名字空间的其它schema文档,也能够导入(import)使用不一样名字空间的schema文档。code
当一个实例文档针对一个schema来验证有效性时(这一过程称为assessment),用来验证有效性的schema能够做为参数提供给验证器,也能够在实例文档中做为两种特殊属性之一直接提供:component
xsi:schemaLocation
xsi:noNamespaceSchemaLocation
.这种机制要求客户启动验证以充分相信这个文档,知道文档对正确的schema是有效的。"xsi"是名字空间"http://www.w3.org/2001/XMLSchema-instance"的传统前缀。
XML Schema Documents一般有文件扩展名".xsd". XSD尚未专门的互联网媒体类型,所以按照 RFC 3023使用"application/xml"或"text/xml" .
主要的schema component有:
其它更专门的schema component包括annotations, assertions, notations, 以及包含了schema总体信息的schema component.
简单数据类型(simple type)包含了能够出如今元素或属性的文本值。这是XSD与DTD的最大区别。
XSD提供了一套19个基本数据类型:
anyURI
base64Binary
boolean
date
dateTime
decimal
double
duration
float
hexBinary
gDay
gMonth
gMonthDay
gYear
gYearMonth
NOTATION
QName
string
time
).能够从这些基本数据类型经过三种机制构建三种数据类型:
XSD规范定义了25个导出数据类型。用户能够在schema中进一步定义本身的导出类型。
Restriction机制包括指出最大最小值、正则表达式、限制字符串的长度、限制十进制数的位数等。XSD 1.1又增长了assertions, 即经过一个[XPath 2.0]]表达式给出任意约束的能力。
复杂数据类型描述了一个元素的许可内容。包括这个元素、属性、子元素的许可内容。复杂类型定义由一套属性使用与一个内容模型组成。内容模型能够是:
复杂数据类型能够从别的复杂类型导出:
XSD 1.1又增长了assertion方法来约束复杂类型, 即经过一个[XPath 2.0]]表达式必须求值为真
基于 Schema 的验证完成后,能够按照 Schema 所隐含的数据模型来表达文档的结构与内容。XML Schema 数据模型包括:
这些信息的集合即为 Schema 既验信息集(Post-Schema-Validation Infoset (PSVI))。对于有效的 XML,PSVI 给它赋以特定的“类型”,从而便于以对象方式来处理整个文档,并应用面向对象程序设计(OOP)范式。
XML Schema的主要用途是形式描述XML文档,然而最终的schema除了简单验证文档外还有许多其余用途。
Schema可用于生成代码,这称做{[tsl|en|XML Data Binding}}。这些代码容许XML文档的内容做为编程环境中的对象。
Schema可用于产生人可读的文档来描述一个XML文件的结构。这在做者利用了标记元素(annotation element)时很是有用。
虽然XML Schema获取了普遍的成功应用,但也受到了大量严厉的批评,远超出其余W3C推荐标准。下述研究者很好地总结了这些批评:James Clark,[1] Anders Møller与Michael Schwartzbach,[2] Rick Jelliffe[3],David Webber.[4]
通常问题:
表达能力的实践限制:
技术问题:
一个Schema的简易示例,描述某个指定的国家,是这样的:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="country" type="Country"> <xs:complexType name="Country"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="population" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
一份听从这个视图的XML文件:
<country xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="country.xsd"> <name>France</name> <population>59.7</population> </country>