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

像所有XML Schema 语言一樣,XSD用來描述一組规则──一个XML文件必須遵守这些規则,才能根據該schema『合法(Valid)』。

然而,与其他XML Schema 语言不同,XSD意圖設計为在确认一个文档的有效性时,将会产生满足特定数据类型的一个信息集合。这种后验证的XML信息集可用来開發XML文件處理軟件。

XSD名称的来源

因為有其他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”作为官方称呼。

歷史

在官方文档的參考附錄里,XSD标准承認受到DTD和其他早期XML schema 语言的影响,如DDML英语DDMLSOX英语Schema for Object-Oriented XMLXML-Data英语XML-Data、以及XDR英语XML data reduced。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]页面存档备份,存于互联网档案馆) 。

著名的XSD建议的内容但在XML自己的DTD中不可用的特性是命名空间感知(namespace awareness)与数据类型。

2012年4月, XSD 1.1成为W3C推荐标准。April 2012页面存档备份,存于互联网档案馆

Schema与schema文档

技术上说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" .

Schema component

主要的schema component有:

其它更专门的schema component包括annotations, assertions, notations, 以及包含了schema整体信息的schema component.

数据类型

简单数据类型(simple type)包含了可以出现在元素或属性的文本值。这是XSD与DTD的最大区别。

XSD提供了一套19个基本数据类型:

可以从这些基本数据类型通过三种机制构建三种数据类型:

XSD规范定义了25个导出数据类型。用户可以在schema中进一步定义自己的导出类型。

Restriction机制包括指出最大最小值、正则表达式、限制字符串的长度、限制十进制数的位数等。XSD 1.1又增加了assertions, 即通过一个[XPath 2.0]]表达式给出任意约束的能力。

复杂数据类型描述了一个元素的许可内容。包括这个元素、属性、子元素的许可内容。复杂类型定义由一套属性使用与一个内容模型组成。内容模型可以是:

复杂数据类型可以从别的复杂类型导出:

XSD 1.1又增加了assertion方法来约束复杂类型, 即通过一个[XPath 2.0]]表达式必须求值为真

Schema 既验信息集(Post-Schema-Validation Infoset)

基于 Schema 的验证完成后,可以按照 Schema 所隐含的数据模型来表达文档的结构与内容。XML Schema 数据模型包括:

这些信息的集合即为 Schema 既验信息集(Post-Schema-Validation Infoset (PSVI))。对于有效的 XML,PSVI 给它赋以特定的“类型”,从而便于以对象方式来处理整个文档,并应用面向对象程序设计(OOP)范式。

XML Schema的次要用途

XML Schema的主要用途是形式描述XML文档,然而最终的schema除了简单验证文档外还有许多其他用途。

代码生成

Schema可用于生成代码,这称作{[tsl|en|XML Data Binding))。这些代码允许XML文档的内容作为编程环境中的对象。

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>

參見

参考文献

  1. ^ James Clark summary of XML Schema criticisms, and promotion of RELAX NG as an alternative, https://web.archive.org/web/20150316212413/http://www.imc.org/ietf-xml-use/mail-archive/msg00217.html
  2. ^ Anders Møller and Michael I. Schwartzbach presents "Problems with XML Schema", http://cs.au.dk/~amoeller/XML/schemas/xmlschema-problems.html页面存档备份,存于互联网档案馆
  3. ^ Rick Jelliffe critique in May 2009, http://broadcast.oreilly.com/2009/05/w3c-please-put-xsd-11-on-hold.html页面存档备份,存于互联网档案馆
  4. ^ David Webber OASIS comparison and insights white paper from August 2008, http://www.oasis-open.org/committees/download.php/29164/White%20Paper%20on%20CAM%20and%20XSD.pdf页面存档备份,存于互联网档案馆
  5. ^ This point is amplified by Uche Ogbuji More on XML class warfare - O'Reilly ONLamp Blog页面存档备份,存于互联网档案馆

外部連結