fbpx
维基百科

XML Schema

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: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有:

  • 元素声明(Element declaration), 定义了元素的性质。包括:元素名字、目标命名空间;一个非常重要的性质是元素的类型,它限制了元素包含哪些属性与子元素。在XSD 1.1标准中,可以根据属性的值来有条件定义元素类型。一个元素可以属于一个替换群(substitution group),如果元素E在元素H的替换群中,那么schema许可H出现的地方E都可以出现。元素可以有完整性(integrity)约束:唯一性(uniqueness)约束确定特定值在该元素为根的子树中是独一无二的;引用(referential)约束确定值必须匹配一些其它元素的标识符。元素声明可以是全局的或局部的,允许同一个名字被用于一个实例文档的不同部分的不相关的元素。
  • 属性声明(Attribute declaration),定义了属性的性质。包括:属性名字、目标命名空间,属性类型限制了属性可以取哪些值,也可以指出属性的缺省值或固定值(fixed value,即属性只能取这个值)。
  • 简单与复杂数据类型(Simple and complex type).详见下节
  • 模型群(model group)与属性群(attribute group)定义。这实际上是宏(macro):被命名的元素的群与属性的群,可在许多数据类型定义中被重用。
  • 属性使用(attribute use)表示复杂数据类型与属性声明的关系,指出属性是必需的还是可选的,在什么时候使用这种数据类型。
  • 元素粒子(element particle)类似于表示复杂类型与元素的关系,指出元素在上下文中出现的最大与最小次数。类似于元素粒子,内容模型可以包括模型群粒子,在语法上相当于非终结符:定义了允许的元素序列的选择与重复的单位。此外,通配符粒子表示了一套元素或元素序列。

其它更专门的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).

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

  • restriction (减少值集的范围),
  • list (允许一个值的序列),
  • union (允许从几个数据类型中选择值).

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

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

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

  • 只有元素的内容(element-only content), 不允许有文本(但可以有空白符或者子元素可以有文本);
  • 简单内容(simple content), 允许有文本,不允许有子元素;
  • 空内容(empty content), 文本与子元素都不被允许;
  • 混合内容(mixed content), 文本与子元素都可以有.

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

  • restriction方法,不允许基类型允许的一些元素、属性或者值
  • extension方法,允许额外的属性或元素出现。

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]

一般问题:

  • 推荐标准数百页,语句非常技术化,对于非专业的用户来说过于复杂难读。很多人发现W3Cs XML Schema Primer (页面存档备份,存于互联网档案馆)更易于理解.
  • XSD缺少形式化数学规范,这使得关于schema的自动推理很困难,例如证明一个修改过的schema是向后兼容的。
  • 语言中有很多例外,如元素的限制(restriction)不同于属性的限制。

表达能力的实践限制:

  • XSD对无序内容提供了极少支持
  • XSD不能要求提供root element (因而要求额外的信息来验证即使最简单的文档).
  • 在描述mixed content, 没有任何方式约束字符内容(甚至没办法指定一个有效字符集).
  • 内容与属性声明不能依赖于元素或属性上下文 (这也是DTD的一个大问题).
  • 不是100%自描述 (上一点就是个例子), 即使有这样的初始设计需求.
  • 默认不能被独立于声明被指定(这使其不能给出一族schema尽在默认值上不同);元素默认只能是字符数据(不包含markup).

技术问题:

  • 虽然从技术上遵从命名空间,但看起来并不追随命名空间的精神原则。(例如 "unqualified locals").
  • XSD 1.0不提供机制,使得一个属性的值或者存在依赖于另一个属性的值或存在(被称为co-occurrence constraints). XSD 1.1解决了这个问题.
  • XSD数据类型的范围非常随意.[5]
  • 验证与扩增(augmentation,增加类型信息与默认值)应该保持分离。

示范 编辑

一个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> 

參見 编辑

  • RELAX NG - 另一種XML綱要語言(ISO國際標準)通常用在XML Schema資料型別上
  • XML信息集

参考文献 编辑

  1. ^ James Clark summary of XML Schema criticisms, and promotion of RELAX NG as an alternative,
  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 (页面存档备份,存于互联网档案馆

外部連結 编辑

schema, definition, 是w3c于2001年5月发布的推荐标准, 指出如何形式描述xml文档的元素, xsd是許多, 语言中的一支, xsd是首先分離於xml本身的schema語言, 故取得w3c的推薦地位, 像所有, 语言一樣, xsd用來描述一組规则, 一个xml文件必須遵守这些規则, 才能根據該schema, 合法, valid, 然而, 与其他, 语言不同, xsd意圖設計为在确认一个文档的有效性时, 将会产生满足特定数据类型的一个信息集合, 这种后验证的xml信息集可用来開發xml文件處理. 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文件處理軟件 目录 1 XSD名称的来源 2 歷史 3 Schema与schema文档 4 Schema component 5 数据类型 6 Schema 既验信息集 Post Schema Validation Infoset 7 XML Schema的次要用途 7 1 代码生成 7 2 XML文件结构文档的生成 8 批评 9 示范 10 參見 11 参考文献 12 外部連結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 英语 DDML SOX 英语 Schema for Object Oriented XML XML 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 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有 元素声明 Element declaration 定义了元素的性质 包括 元素名字 目标命名空间 一个非常重要的性质是元素的类型 它限制了元素包含哪些属性与子元素 在XSD 1 1标准中 可以根据属性的值来有条件定义元素类型 一个元素可以属于一个替换群 substitution group 如果元素E在元素H的替换群中 那么schema许可H出现的地方E都可以出现 元素可以有完整性 integrity 约束 唯一性 uniqueness 约束确定特定值在该元素为根的子树中是独一无二的 引用 referential 约束确定值必须匹配一些其它元素的标识符 元素声明可以是全局的或局部的 允许同一个名字被用于一个实例文档的不同部分的不相关的元素 属性声明 Attribute declaration 定义了属性的性质 包括 属性名字 目标命名空间 属性类型限制了属性可以取哪些值 也可以指出属性的缺省值或固定值 fixed value 即属性只能取这个值 简单与复杂数据类型 Simple and complex type 详见下节 模型群 model group 与属性群 attribute group 定义 这实际上是宏 macro 被命名的元素的群与属性的群 可在许多数据类型定义中被重用 属性使用 attribute use 表示复杂数据类型与属性声明的关系 指出属性是必需的还是可选的 在什么时候使用这种数据类型 元素粒子 element particle 类似于表示复杂类型与元素的关系 指出元素在上下文中出现的最大与最小次数 类似于元素粒子 内容模型可以包括模型群粒子 在语法上相当于非终结符 定义了允许的元素序列的选择与重复的单位 此外 通配符粒子表示了一套元素或元素序列 其它更专门的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 可以从这些基本数据类型通过三种机制构建三种数据类型 restriction 减少值集的范围 list 允许一个值的序列 union 允许从几个数据类型中选择值 XSD规范定义了25个导出数据类型 用户可以在schema中进一步定义自己的导出类型 Restriction机制包括指出最大最小值 正则表达式 限制字符串的长度 限制十进制数的位数等 XSD 1 1又增加了assertions 即通过一个 XPath 2 0 表达式给出任意约束的能力 复杂数据类型描述了一个元素的许可内容 包括这个元素 属性 子元素的许可内容 复杂类型定义由一套属性使用与一个内容模型组成 内容模型可以是 只有元素的内容 element only content 不允许有文本 但可以有空白符或者子元素可以有文本 简单内容 simple content 允许有文本 不允许有子元素 空内容 empty content 文本与子元素都不被允许 混合内容 mixed content 文本与子元素都可以有 复杂数据类型可以从别的复杂类型导出 restriction方法 不允许基类型允许的一些元素 属性或者值 extension方法 允许额外的属性或元素出现 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 Moller与Michael Schwartzbach 2 Rick Jelliffe 3 David Webber 4 一般问题 推荐标准数百页 语句非常技术化 对于非专业的用户来说过于复杂难读 很多人发现W3Cs XML Schema Primer 页面存档备份 存于互联网档案馆 更易于理解 XSD缺少形式化数学规范 这使得关于schema的自动推理很困难 例如证明一个修改过的schema是向后兼容的 语言中有很多例外 如元素的限制 restriction 不同于属性的限制 表达能力的实践限制 XSD对无序内容提供了极少支持 XSD不能要求提供root element 因而要求额外的信息来验证即使最简单的文档 在描述mixed content 没有任何方式约束字符内容 甚至没办法指定一个有效字符集 内容与属性声明不能依赖于元素或属性上下文 这也是DTD的一个大问题 不是100 自描述 上一点就是个例子 即使有这样的初始设计需求 默认不能被独立于声明被指定 这使其不能给出一族schema尽在默认值上不同 元素默认只能是字符数据 不包含markup 技术问题 虽然从技术上遵从命名空间 但看起来并不追随命名空间的精神原则 例如 unqualified locals XSD 1 0不提供机制 使得一个属性的值或者存在依赖于另一个属性的值或存在 被称为co occurrence constraints XSD 1 1解决了这个问题 XSD数据类型的范围非常随意 5 验证与扩增 augmentation 增加类型信息与默认值 应该保持分离 示范 编辑一个Schema的简易示例 描述某个指定的国家 是这样的 lt xs schema xmlns xs http www w3 org 2001 XMLSchema gt lt xs element name country type Country gt lt xs complexType name Country gt lt xs sequence gt lt xs element name name type xs string gt lt xs element name population type xs decimal gt lt xs sequence gt lt xs complexType gt lt xs element gt lt xs schema gt 一份遵从这个视图的XML文件 lt country xmlns xsi http www w3 org 2001 XMLSchema instance xsi noNamespaceSchemaLocation country xsd gt lt name gt France lt name gt lt population gt 59 7 lt population gt lt country gt 參見 编辑RELAX NG 另一種XML綱要語言 ISO國際標準 通常用在XML Schema資料型別上 XML信息集参考文献 编辑 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 Anders Moller and Michael I Schwartzbach presents Problems with XML Schema http cs au dk amoeller XML schemas xmlschema problems html 页面存档备份 存于互联网档案馆 Rick Jelliffe critique in May 2009 http broadcast oreilly com 2009 05 w3c please put xsd 11 on hold html 页面存档备份 存于互联网档案馆 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 页面存档备份 存于互联网档案馆 This point is amplified by Uche Ogbuji More on XML class warfare O Reilly ONLamp Blog 页面存档备份 存于互联网档案馆 外部連結 编辑在Wikibooks有更多關於本條目的內容 XML Schema 繁體中文 W3C香港辦事處的權威翻譯 繁體中文 XML及SGML名詞英漢翻譯表 台灣 英文 W3C XML Schema規格 入門 页面存档备份 存于互联网档案馆 結構 页面存档备份 存于互联网档案馆 資料集 页面存档备份 存于互联网档案馆 and 其他 页面存档备份 存于互联网档案馆 英文 W3Schools XML Schema教學 中文 W3School XML Schema教学 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title XML Schema amp oldid 73130818, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。