XML Schema

title: XSD名称的来源.
content: 因为有其他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”作为官方称呼。
title: 历史.
content: 在官方文档的参考附录里,XSD标准承认受到[文件类型描述|DTD]]和其他早期XML schema 语言的影响,如DDML、Schema for Object-Oriented XML、XML-Data、以及XML data reduced。XSD从中吸收了一些特性,然而也在这些特性中有所折衷。这些早期schema 语言中的XDR与SOX在XML Schema发布后仍继续使用了一段时间。不少微软的产品支援XDR直到2006年十二月MSXML 6.0的发布(MSXML 6.0抛弃了XDR改用XSD) 。英语:Commerce One, Inc支援它自己的SOX schema 语言直到该公司于2004年末破产。2004年十二月,Novell, Inc.购买了该公司,包括那些与SOX相关的专利,据报导是尽力防止被某些不相关的、以打专利相关官司为生的公司剥削图利 。  著名的XSD建议的内容但在XML自己的DTD中不可用的特性是命名空间感知(namespace awareness)与数据类型。  2012年4月, XSD 1.1成为W3C推荐标准。April 2012
title: Schema与schema文档.
content: 技术上说schema是元数据的一个抽象集合,包含一套schema component: 主要是元素与属性的声明、复杂与简单数据类型的定义。这些schema component通常是在处理一批schema document时被创建。schema文档包含着schema component的源语言定义。在日常使用中,一个schema文档常被称作一个schema。  Schema文档通过命名空间组织起来:所有的被命名的schema component属于一个目标命名空间;这个目标命名空间是schema文档作为整体的一个属性。schema文档可以包含进来(include)使用同一命名空间的其它schema文档,也可以导入(import)使用不同命名空间的schema文档。  当一个实例文档针对一个schema来验证有效性时(这一过程称为"assessment"),用来验证有效性的schema可以作为参数提供给验证器,也可以在实例文档中作为两种特殊属性之一直接提供: "xsi"是命名空间"http://www.w3.org/2001/XMLSchema-instance"的传统前缀。  XML Schema Documents通常有文件扩展名".xsd". XSD还没有专门的互联网媒体类型,因此按照 RFC 3023使用"application/xml"或"text/xml".
title: Schema component.
content: 主要的schema component有:  其它更专门的schema component包括annotations, assertions, notations, 以及包含了schema整体信息的schema component.
title: 数据类型.
content: 简单数据类型(simple type)包含了可以出现在元素或属性的文本值。这是XSD与DTD的最大区别。  XSD提供了一套19个基本数据类型:  可以从这些基本数据类型通过三种机制构建三种数据类型:  XSD规范定义了25个导出数据类型。用户可以在schema中进一步定义自己的导出类型。  Restriction机制包括指出最大最小值、正则表达式、限制字符串的长度、限制十进制数的位数等。XSD 1.1又增加了assertions, 即通过一个[XPath 2.0]]表达式给出任意约束的能力。  复杂数据类型描述了一个元素的许可内容。包括这个元素、属性、子元素的许可内容。复杂类型定义由一套属性使用与一个内容模型组成。内容模型可以是:  复杂数据类型可以从别的复杂类型导出: XSD 1.1又增加了assertion方法来约束复杂类型, 即通过一个[XPath 2.0]]表达式必须求值为真
title: Schema 既验信息集(Post-Schema-Validation Infoset).
content: 基于 Schema 的验证完成后,可以按照 Schema 所隐含的数据模型来表达文档的结构与内容。XML Schema 数据模型包括:  这些信息的集合即为 Schema 既验信息集(Post-Schema-Validation Infoset (PSVI))。对于有效的 XML,PSVI 给它赋以特定的“类型”,从而便于以对象方式来处理整个文档,并应用面向对象程序设计(OOP)范式。
title: XML Schema的次要用途.
content: XML Schema的主要用途是形式描述XML文档,然而最终的schema除了简单验证文档外还有许多其他用途。
title: 代码生成.
content: Schema可用于生成代码,这称作{[tsl|en|XML Data Binding}}。这些代码允许XML文档的内容作为编程环境中的对象。
title: XML文件结构文档的生成.
content: Schema可用于产生人可读的文档来描述一个XML文件的结构。这在作者利用了标记元素(annotation element)时非常有用。
title: 批评.
content: 虽然XML Schema取得了广泛的成功应用,但也受到了大量严厉的批评,远超出其他W3C推荐标准。下述研究者很好地总结了这些批评:James Clark, Anders Møller与Michael Schwartzbach, Rick Jelliffe,David Webber.  一般问题:  表达能力的实践限制:  技术问题:
title: 示范.
content: 一个Schema的简易示例,描述某个指定的国家,是这样的:  一份遵从这个视图的XML文件:

Summary: XSD (XML Schema Definition)是W3C于2001年5月发布的推荐标准,指出如何形式描述XML文档的元素。XSD是许多XML Schema 语言中的一支。XSD是首先分离于XML本身的schema语言,故取得W3C的推荐地位。

XML Schema: XML Schema je jedno z "XML schémat", jazyků pro popis XML. Tento jazyk vznikl jako W3C doporučení v roce 2001. Protože se název jazyka shoduje s obecným označením jazyků pro popis dokumentů XML, vznikla tak označení "XML schema" jako XSD (iniciativa pro definici XML schématu, "XML Schema Definition") nebo WXS (iniciativa pro "W3C XML Schema"). Dnes se používá spíše zkratka XSD (tak se také budeme odkazovat na "XML Schema" v tomto článku).