W3C XML Schema 与文档类型定义
许多开发者都期待着 XML 模式能够很快取代 DTD 用于指定 XML 文档类型。尽管 David Mertz 相信 XML 模式在开发者宝库中是一种无价工具,但他对该模式将替代 DTD 持怀疑态度。“XML 问题”专栏的这一部分逐步尝试对模式和 DTD 进行比较,并阐明在 XML 模式世界中发生的事件。

虽然 W3C XML Schema在许多场合中胜过 DTD,但仍然还有一些 DTD更胜一筹的领域。开发者要不断地进行艰难的选择(这在 XML世界中是司空见惯的事)。让我们开始对其中一些选项进行区分。

目前形势

将 XML用作数据表示格式的主要原因是有可能指定文档的结构化需求:确定究竟什么类型的内容和子元素可以出现在元素中的一些规则(以及以什么顺序和基数性 等)。在传统SGML 派系中,文档规则的表示曾经是 DTD ?D?D W3C XML 1.0建议书的正式规范确实明确提供了 DTD.不过,有一些 DTD无法实现的相当常见的约束;DTD的主要限制在于它们缺乏数据类型的表达(可以指定一个元素必须包含PCDATA,但无法指定它必须包含例如 nonNegativeInteger )。 还有一个次要问题,即 DTD无法简化子元素基数性的规范(可以简洁地指定“一个或多个”子元素,但即使可能,指定“七到十二之间”也会过分冗长,甚至完全曲解)。

为了对付 DTD的各种限制,一些 XML用户曾呼吁一些指定文档规则的替代方法。总是有可能从编程上检查 XML文档中的条件,但从本质上说,往往更需要施加更严格的标准,即“一个不满足一组正式规则的文档就是 无效文档”。W3C XML Schema是满足这些要求的一个主要答案(但不是这里唯一可供选择的模式)。StevenHolzner 在 XML 内幕中将 XML模式归纳为具有以下特征,值得在这里重申:

随着时间的推移,许多人都向 W3C 抱怨 DTD太复杂,并要求使用一些更简单的方法。W3C听取并指定了一个委员会来解决这一问题,然后拿出了一个比以往任何 DTD都复杂得多的解决方案 (p.199)。 Holzner 继续道 ?D?D 几乎所有XML 程序员都同意(包括我自己)?D?D 如果不考虑其复杂性,W3C XML Schema还是提供了许多重要能力,并值得用于许多确认规则类。

至少有两个基本的和概念性的缺陷存在于所有“到处模式”的目标中。第一个问题是刚刚于2000 年 12 月 15 日结束其复审阶段的 W3C XML Schema CandidateRecommendation,不包含任何实体;通过扩展,它可以包括参数实体。第二个问题是,尽管存在增强的表达方式,仍然有许多文 档规则不能用XML 模式表示(一些建议提议利用 XSLT来增强确认表达,但也可能存在和使用其它方法)。换句话说,模式无法执行DTD长期以来能够执行的所有操作,而从另一方面来讲,模式也无法表达人 们希望对文档施加的进一步规则的完整集合。从更实际的角度来说,用于XML 模式的工具不如用于 DTD的工具来得成熟(特别在确认方面,这是核心问题)。

XML文档确认规则整体上仍处于混乱状态。不幸的是,我无法预言每件事的最终结果将会怎样。(有关何时使用 DTD 可能比较有意义的摘要,请参阅侧栏“ 何时使用DTD.”)同时,让我们看看 DTD 和 XML模式能够表达哪些内容的一些具体细节。

丰富的类型

W3C XML Schema真正出色的地方是在表达属性值和元素内容的类型约束上。而这恰恰是 DTD最薄弱的地方。除了提供非常丰富的一组内置 simpleType 以外,XML 模式还允许您使用类似规则表达式的语法派生出新的 simpleType 。内置类型包括您在使用编程语言时遇到 的: string 、 int 、 float 、 unsignedLong 、 byte 等等;但它们还包括大多数编程语言生来不具备的一些类 型: timeInstant (即日期/时间)、 recurringDate (年中的天)、 uriReference 、 language 、 nonNegativeInteger 。

例如,使用 DTD时,将有类似于清单 1 中的声明:
清单 1:DTD "item" 元素定义

使用 W3C XML Schema时,声明可以更具体(对 W3C Schema 的最初规定稍有修改):

清单 2:XML 模式 "item"元素定义

<!-- Stock Keeping Unit, a code for identifying products --&gt

何时使用DTD

遇到以下情况时,DTD 仍然是您的首选:

文档规则的简洁表示很重要。

希望下游用户能够通过内部参数集覆盖并将类型专门化。

您的文档规则主要考虑元素的嵌套而不是内容的语义约束(如同使用散文标记)。

惯常使用的工具支持 DTD 胜于支持模式。

从表面上看,这些元素定义中有两个显著特性。首先是模式本身是格式完整的 XML 实例,其标记使用 xsd 名称空间(实际上,DTD也是这样,但它只有处理指令,而没有这样的内容);其次(根据第一点的结论)是模式远比DTD 繁琐。

除了语义方面的准确性以外,还可以看到模式示例能够执行一些DTD 不可能完成的操作。 prodName 类型在定义之间基本上是相同的,但模式中的 USPrice 和 shipDate 规范分别是 decimal 和 date 类型。 作为文本文件,具有这些元素的 XML实例在元素内部包含一些 ASCII(或Unicode)字符;不过,具有模式意识的确认器可以在 decimal 和 date 元素内部要求更具体的字符格式(其它类型也是一样)。 更有趣的是属性 partNum ,它属于派生的专门类型。类型 SKU 不是内置类型,而是跟在 "SKU"声明中给定模式后的一系列字符(具体来说,它必须有三位:一个连线和两个大写字母,按这样的顺序)。也有可能将 SKU 用于元素类型;它在这种情况下定义属性只是一种巧合。

在元素定义的 DTD版本中,所有这些有趣的(如果是专门的,也可能相当复杂)类型一定简单地称之为 PCDATA ,至于字符数据是什么样没有更多说明(在属性情况中是 CDATA )。

在类型丰富的元素/属性值中,模式巧妙地从描述 XML实例的语法渐变到描述其语义。语法分析纯化论者可能会就我的描述提出异议:“内置模式类型是从语法上定义的,因此构建在这些内置类型上的模式在形式 上也是符合语法的。”但在实际情况中,当声明一个给定的元素必须是 date 时,您实际上希望的是让元素包含一个日期。当然,表达语义信息不是件坏事,但有人会争论说最好同样将它限制在应用程序级别,而不是格式声明。毕竟有一些语 义特性 ?D?D 即使是简单的特性 ?D?D避开了模式,但在应用程序中和模式所表达的内容一样重要。 例如,当然"stock-keeping unit" 必须类似于"999-AA";但可能您还提供在十三以内的小装置。 integer 被13 整除性不能使用 XML 模式表达(因此您仍然无法在这一级别上为 widgetquantity提供所需的约束)。这里的重点是说,即使有模式(胜过DTD)的额外能力,仍可能需要在应用程序级别上执行后确认来确定 XML文档是否 在功能上有效。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-131495/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/374079/viewspace-131495/

[转载]W3C XML Schema 与文档类型定义相关推荐

  1. XML之文档类型定义和合法性(转)

    来至:liang--liang博客:http://www.cnblogs.com/liang--liang/archive/2008/01/15/1039277.html 好牛 XML被作为一种元标记 ...

  2. XML——文档类型定义(DTD-Document Type Definition)

    [0]README 0.1)本文文字描述转自 core java volume 2 , 旨在理解 XML--文档类型定义(DTD-Document Type Definition) 的基础知识: 0. ...

  3. 文档类型定义和合法性(2)

    8.5.3 子元素列表 由于SEASON元素被声明为可以接受任何元素作为子元素,因而可以接受各种各样的元素.当遇到那些多多少少有些非结构化的文本,如杂志文章时,这种情况就很有用.这时段落.副栏.项目列 ...

  4. DOCTYPE html PUBLIC 指定了 HTML 文档遵循的文档类型定义

    DOCTYPE html PUBLIC 指定了 HTML 文档遵循的文档类型定义 今天看到一篇CSS应用的一个友好搜索,我按网页上的代码复制.粘贴后预览时总达不到效果,而直接拷贝他的实例却能达到效果, ...

  5. 前端:HTML5/36/HTML5简介,文档类型定义,网页字符集,页面结构标记,文章相关的标记,其它标记,音频标记,视频标记,表单中新增的属性,表单input元素type属性的值

    HTML5简介 HTML5是新一代的HTML: HTML5目前主要应用在手机端,在PC端最新浏览器已经开始支持了,但还不全面: HTML5是由W3C和WHATWG合作的结果: W3C是万维网联盟,主要 ...

  6. 文档声明Doctype和Doctype html区别 文档类型定义(DTD)

    文档类型定义(DTD)可定义合法的XML文档构建模块.它使用一系列合法的元素来定义文档的结构. DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. 文档声明的作用: 文档声明是为了告诉浏 ...

  7. DTD(文档类型定义)概述

    DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块.DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. DTD 简介 文档类型定义(DTD)可定义合法的XML文档构建模块.它 ...

  8. XML文档类型定义DTD

    DTD概述 DTD用来定义XML文档的结构,它包含一系列规则说明,以确保XML文档的一致性和有效性 DTD定义了XML文档可用的词汇(元素和属性的名称)和结构: 元素名称,包括根元素 元素的属性及属性 ...

  9. XML--- XML文档类型定义(DTD)

    **定义:**DTD定义了文档的逻辑结构,规定了文档中所使用的元素.实体.元素的属性.元素与实体之间的关系.其作用主要表现在以下几个方面. (1) 使用DTD可以提供一种统一的格式.XML的可扩展性为 ...

  10. 离线配置xml的文档类型定义文件(xml语法规则) dtd

    step1)将jar文件解压,并找到对应的 dtd文件: step2)不带引号复制 dtd uri: http://mybatis.org/dtd/mybatis-3-config.dtd step3 ...

最新文章

  1. 国内首个手机AR实景驾驶导航上线,还能识别车辆行人,搜狗地图出品
  2. 跟我一起写udev规则
  3. 用excel打造报表查询系统
  4. 1030 完美数列 (25 分)(c语言)
  5. leetcode 62 不同路径
  6. cbrt c语音_isgraph - [ C语言中文开发手册 ] - 在线原生手册 - php中文网
  7. wordpress 根据文章ID获取分类ID和标签ID
  8. Exchange Server 2003 部署手册
  9. QuickSort 快速排序
  10. 模型堆叠(Stacking)和模型融合的原理与实现以及一个库heamy的介绍
  11. hdu 5755 Gambler Bo 高斯消元
  12. 试用版的和正式版的软件有什么区别
  13. Wordpress昼夜切换导航主题模板 NDNAV主题
  14. 安装罗斯蒙特HART475协议中文版手操器的系统卡和电池
  15. 英文标题首字母大写规则
  16. 长春理工大学第八届电子设计大赛 之 开关电源(2)
  17. 微信小程序开发后台篇(四)AWS EC2实例云部署---Windows环境通过PuTTY连接EC2实例
  18. Android下Device Tree简介
  19. python(x,y)安装和使用
  20. java+英尺英寸,以英尺和英寸显示英尺的小数点(javascript)

热门文章

  1. ReportingService报表入门
  2. 电脑计算机安全模式在哪,电脑怎么进入安全模式? 进入安全模式详细教程
  3. 沁恒三模键盘方案测试体验
  4. gimp 抠图_【GIMP学习】抠图方法二则
  5. springboot vue uniapp公交路线查询系统源码
  6. odoo rest api 服务接口
  7. python画地图模拟迁徙_python爬取百度地图迁徙-迁入地来源和迁出目的地
  8. Windows10系统下如何将chm文件转换成txt文件?
  9. 测试用例编写方法——场景法
  10. 约翰霍普金斯大学计算机专业,美国约翰霍普金斯大学计算机科学专业有哪些介绍...