请问 schema 和DTD 我应该选择用哪个?有什么不同?好处是什么/

skylen 2003-10-17 11:05:16
请问 schema 和DTD 我应该选择用哪个?有什么不同?好处是什么/
...全文
266 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
skylen 2003-10-17
  • 打赏
  • 举报
回复
哪里有讲schema的书?
速马 2003-10-17
  • 打赏
  • 举报
回复
学Schema就可以了
DTD已经越来越少人用了
pp4u 2003-10-17
  • 打赏
  • 举报
回复
说起来,DTD源于SGML规范,同时也是XML1.0规范的重要组成部分,它可是描述XML文档结构的“正根儿”。但不可否认的是,它也有一些缺点,比如,它采用了非XML的语法规则、不支持多种多样的数据类型、扩展性较差等等。这些缺点最终使它面临四面楚歌的境地,以微软为首的众多公司提出了XML Schema,在保留并扩充了DTD原有的文档结构说明能力的同时,以期解决DTD与生俱来的种种问题。

事实上,Schema也是XML的一种应用,它是将DTD重新使用XML语言规范来定义。这从某种意义上讲,不正充分体现了我们前面所提到的XML自描述性的优点吗?可别小看了这个利用DTD把DTD改写成的Schema,它可具有许多“青出于蓝而胜于蓝”的优势。

一致性
学习DTD时,大家一定已经在抱怨DTD的书写结构和XML文件的结构仿佛有着天壤之别,后者清晰直观,前者复杂晦涩。Schema建立在XML之上,它的样子和一般的XML文件完全相同,使得XML达到了从内到外的完美统一。现在,读者不必再为了搞懂DTD而去重新学习,节省了宝贵的时间;另一方面,因为Schema本身也是一种XML,可以被现有的XML编辑制作工具所编辑、被XML语法分析器所解析、被XML应用系统所利用,既有投资得到了最大程度的保护。
扩展性
如果你只是一个文档编辑人员,平常只进行一些文档的操作或Web页面的设计,那么你可能对数据类型不太敏感。但是,如果你是一位程序员,每天都要和成堆的公式和程序打交道,那么如果有一天领导告诉你,改用一种没有定义数据类型的程序设计语言去开发一套应用系统,我想你很可能会跳起来:什么?没有定义数据类型!这么一来,什么整型、实型、布尔型、日期型统统混为一谈,所有的用户输入数据以及从数据库中取得的数据都要另外编写程序进行类型转换,还有错误检测……。天啊,还有比这更糟的吗?
的确,没有数据类型,无形之中大大增加了程序员的开发难度和工作量。虽然DTD中也定义了一些数据类型,但那都是针对属性类型而定义的,而且类型非常有限。何况现在电子商务应用日趋火爆,交易过程中不可避免地会出现大量的数据转换,整型、实型、布尔型、日期型的数据层出不穷,DTD显然招架不住。好在Schema对DTD进行了扩充,引入了数据类型,很好地解决了这一问题。
易用性
XML Schema取代DTD的另一个原因要归结于DOM和SAX(关于DOM和SAX的概念将在后面章节中详细论述)。如果你了解DOM和SAX,那你肯定知道,作为一种XML API,DOM和SAX只是对XML实例文档有效,对于DTD则无能为力,你不可能期望通过DOM或SAX来判定一个元素的属性类型或者某个元素的子元素允许出现的次数(当然,这都是XML分析器的本职工作)。但是,一旦有了Schema,这个问题便不复存在,因为此时对于XML文档结构的描述已变成为Schema--一种“形式良好的”XML文档,用DOM和SAX去访问当然不在话下啦。
规范性
同DTD一样,Schema也提供了一套完整的机制以约束XML文档中置标的使用,但相比之下,后者基于XML,更具有规范性。Schema利用元素的内容和属性来定义XML文档的整体结构,如哪些元素可以出现在文档中、元素间的关系是什么、每个元素有哪些内容和属性、以及元素出现的顺序和次数等等,一目了然。
互换性
正如每个人都可定义自己的DTD一样,读者也可根据需要设计适合自己应用的Schema,并且可以同其他人交换彼此的Schema。利用Schema,我们能够书写XML文档,验证文档的合法性。另外,通过映射机制,还可以将不同的Schema进行转换,以实现更高层次的数据交换。例如微软的BizTalk Server,对此就有很好的支持。
skylen 2003-10-17
  • 打赏
  • 举报
回复
哪里有讲schema的书?schema现在的被支持的情况怎么样/
pp4u 2003-10-17
  • 打赏
  • 举报
回复
Schema和DTD的作用异曲同工,而现在的趋势是:DTD正逐渐被Schema所取代!

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧