XMLSchema参考手册Schema教程XMLSchema是基于XML的DTD替代者。XMLSchema描述XML文档的结构。XMLSchema语言也称作XMLSchema定义(XMLSchemaDefinition,XSD)。在此教程中,你将学习如何在应用程序中读取和创建XMLSchema语言,XMLSchema为何比DTD更加强大,以及如何在您的应用程序中使用XMLSchema。开始学习XMLSchema!XMLSchema参考手册在W3School,我们提供完整的有效的XMLSchema元素。XMLSchema参考手册XMLSchema简介XMLSchema是基于XML的DTD替代者。XMLSchema可描述XML文档的结构。XMLSchema语言也可作为XSD(XMLSchemaDefinition)来引用。您应当具备的基础知识在继续学习之前,您需要对下面的知识有基本的了解:•HTML/XHTML•XML以及XML命名空间•对DTD的基本了解如果您希望首先学习这些项目,请在首页访问这些教程。什么是XMLSchema?XMLSchema的作用是定义XML文档的合法构建模块,类似DTD。XMLSchema:•定义可出现在文档中的元素•定义可出现在文档中的属性•定义哪个元素是子元素•定义子元素的次序•定义子元素的数目•定义元素是否为空,或者是否可包含文本•定义元素和属性的数据类型•定义元素和属性的默认值以及固定值XMLSchema是DTD的继任者我们认为XMLSchema很快会在大部分网络应用程序中取代DTD。理由如下:•XMLSchema可针对未来的需求进行扩展•XMLSchema更完善,功能更强大•XMLSchema基于XML编写•XMLSchema支持数据类型•XMLSchema支持命名空间XMLSchema是W3C标准XMLSchema在2001年5月2日成为W3C标准。您可以在我们的《W3C教程》中获得更多有关XMLSchema标准的信息。XSD元素元素解释all规定子元素能够以任意顺序出现,每个子元素可出现零次或一次。annotationannotation元素是一个顶层元素,规定schema的注释。any使创作者可以通过未被schema规定的元素来扩展XML文档。anyAttribute使创作者可以通过未被schema规定的属性来扩展XML文档。appInfo规定annotation元素中应用程序要使用的信息。attribute定义一个属性。attributeGroup定义在复杂类型定义中使用的属性组。choice仅允许在choice声明中包含一个元素出现在包含元素中。complexContent定义对复杂类型(包含混合内容或仅包含元素)的扩展或限制。complexType定义复杂类型。documentation定义schema中的文本注释。element定义元素。extension扩展已有的simpleType或complexType元素。field规定XPath表达式,该表达式规定用于定义标识约束的值。group定义在复杂类型定义中使用的元素组。import向一个文档添加带有不同目标命名空间的多个schema。include向一个文档添加带有相同目标命名空间的多个schema。key指定属性或元素值(或一组值)必须是指定范围内的键。keyref规定属性或元素值(或一组值)对应指定的key或unique元素的值。list把简单类型定义为指定数据类型的值的一个列表。notation描述XML文档中非XML数据的格式。redefine重新定义从外部架构文件中获取的简单和复杂类型、组和属性组。restriction定义对simpleType、simpleContent或complexContent的约束。schema定义schema的根元素。selector指定XPath表达式,该表达式为标识约束选择一组元素。sequence要求子元素必须按顺序出现。每个子元素可出现0到任意次数。simpleContent包含对complexType元素的扩展或限制且不包含任何元素。simpleType定义一个简单类型,规定约束以及关于属性或仅含文本的元素的值的信息。union定义多个simpleType定义的集合。unique指定属性或元素值(或者属性或元素值的组合)在指定范围内必须是唯一的。XSDRestrictions/FacetsforDatatypes参阅XSD限定/Facets限定描述enumeration定义可接受值的一个列表fractionDigits定义所允许的昀大的小数位数。必须大于等于0。length定义所允许的字符或者列表项目的精确数目。必须大于或等于0。maxExclusive定义数值的上限。所允许的值必须小于此值。maxInclusive定义数值的上限。所允许的值必须小于或等于此值。maxLength定义所允许的字符或者列表项目的昀大数目。必须大于或等于0。minExclusive定义数值的下限。所允许的值必需大于此值。minInclusive定义数值的下限。所允许的值必需大于或等于此值。minLength定义所允许的字符或者列表项目的昀小数目。必须大于或等于0。pattern定义可接受的字符的精确序列。totalDigits定义所允许的阿拉伯数字的精确位数。必须大于0。whiteSpace定义空白字符(换行、回车、空格以及制表符)的处理方式。为什么要使用XMLSchema?••XMLSchema比DTD更强大。XMLSchema支持数据类型XMLSchema昀重要的能力之一就是对数据类型的支持。通过对数据类型的支持:•可更容易地描述允许的文档内容•可更容易地验证数据的正确性•可更容易地与来自数据库的数据一并工作•可更容易地定义数据约束(datafacets)•可更容易地定义数据模型(或称数据格式)•可更容易地在不同的数据类型间转换数据编者注:数据约束,或称facets,是XMLSchema原型中的一个术语,中文可译为“面”,用来约束数据类型的容许值。XMLSchema使用XML语法另一个关于XMLSchema的重要特性是,它们由XML编写。由XML编写XMLSchema有很多好处:•不必学习新的语言•可使用XML编辑器来编辑Schema文件•可使用XML解析器来解析Schema文件•可通过XMLDOM来处理Schema•可通过XSLT来转换SchemaXMLSchema可保护数据通信当数据从发送方被发送到接受方时,其要点是双方应有关于内容的相同的“期望值”。通过XMLSchema,发送方可以用一种接受方能够明白的方式来描述数据。一种数据,比如03-11-2004,在某些国家被解释为11月3日,而在另一些国家为当作3月11日。但是一个带有数据类型的XML元素,比如:datetype=date2004-03-11/date,可确保对内容一致的理解,这是因为XML的数据类型date要求的格式是YYYY-MM-DD。XMLSchema可扩展XMLSchema是可扩展的,因为它们由XML编写。通过可扩展的Schema定义,您可以:•在其他Schema中重复使用您的Schema•创建由标准类型衍生而来的您自己的数据类型•在相同的文档中引用多重的Schema形式良好是不够的我们把符合XML语法的文档称为形式良好的XML文档,比如:•它必须以XML声明开头•它必须拥有唯一的根元素•开始标签必须与结束标签相匹配•元素对大小写敏感•所有的元素都必须关闭•所有的元素都必须正确地嵌套•必须对特殊字符使用实体即使文档的形式良好,仍然不能保证它们不会包含错误,并且这些错误可能会产生严重的后果。请考虑下面的情况:您订购的了5打激光打印机,而不是5台。通过XMLSchema,大部分这样的错误会被您的验证软件捕获到。•如何使用XSD?XML文档可对DTD或XMLSchema进行引用。一个简单的XML文档:请看这个名为note.xml的XML文档:?xmlversion=1.0?notetoGeorge/tofromJohn/fromheadingReminder/headingbodyDon'tforgetthemeeting!/body/noteDTD文件下面这个例子是名为note.dtd的DTD文件,它对上面那个XML文档的元素进行了定义:!ELEMENTnote(to,from,heading,body)!ELEMENTto(#PCDATA)!ELEMENTfrom(#PCDATA)!ELEMENTheading(#PCDATA)!ELEMENTbody(#PCDATA)第1行定义note元素有四个子元素:to,from,heading,body。第2-5行定义了to,from,heading,body元素的类型是#PCDATA。XMLSchema下面这个例子是一个名为note.xsd的XMLSchema文件,它定义了上面那个XML文档的元素:?xmlversion=1.0?xs:schemaxmlns:xs====qualifiedxs:elementname=notexs:complexTypexs:sequencexs:elementname=totype=xs:string/xs:elementname=fromtype=xs:string/xs:elementname=headingtype=xs:string/xs:elementname=bodytype=xs:string//xs:sequence/xs:complexType/xs:element/xs:schemanote元素是一个复合类型,因为它包含其他的子元素。其他元素(to,from,heading,body)是简易类型,因为它们没有包含其他元素。您将在下面的章节学习更多有关复合类型和简易类型的知识。对DTD的引用此文件包含对DTD的引用:?xmlversion=1.0?!DOCTYPEnoteSYSTEM!/body/note对XMLSchema的引用此文件包含对XMLSchema的引用:?xmlversion=1.0?notexmlns==:schemaLocation=!/body/noteXSD-schema元素••schema元素是每一个XMLSchema的根元素。schema元素schema元素是每一个XMLSchema的根元素:?xmlversion=1.0?xs:schema....../xs:schemaschema元素可包含属性。一个schema声明往往看上去类似这样:?xmlversion=1.0?xs:schemaxmlns:xs