DTD和XML Schema的优点/缺点是什么(我甚至不确定后者的官方名称是什么!)?哪个更好?为什么我们需要两种方法来做同样的事情?
编辑:我在一篇正在阅读的文章中找到了这个,这促使我提出这个问题:
为什么选择W3C XML Schema语言?
W3C XML Schema Language不是唯一的模式语言.事实上,XML规范将文档类型定义(DTD)描述为表达模式的方式.此外,JAXB参考实现的预发布版本仅适用于DTD - 也就是说,不适用于使用XML Schema Language编写的模式.但是,XML Schema Language比DTD更丰富.例如,用XML Schema Language编写的模式可以描述在DTD中无法表达(或不能轻易表达)的结构关系和数据类型.有一些工具可用于将DTD转换为W3C XML模式语言,因此如果您使用的是早期版本的JAXB参考实现中使用的基于DTD的模式,则可以使用这些工具将模式转换为XML模式语言.http://java.sun.com/developer/technicalArticles/WebServices/jaxb/#binsch
我想我想举例说明为什么XML-Schema更好(如果确实如此).
Rob*_*vey 21
来自http://weblogs.asp.net/rchartier/archive/2006/03/21/440782.aspx
DTD不支持名称空间.
DTD具有
#define,#include和#ifdef- 或者更少,面向C,定义速记缩写,外部内容和一些条件解析的能力.DTD描述了整个XML文档(即使它留下了"漏洞"); 模式可以定义部分.
XSD有一个类型系统.
XSD有更丰富的语言来描述"看起来像什么元素或属性".这与类型系统有关.
您可以将DTD内联到XML文档中,但不能使用XSD执行此操作.这意味着DTD更安全(您只需要保护一个字节流 - xml/dtd - 而不是
多个)."有效XML"的官方定义需要DTD.由于这可能是不切实际的,如果不是不可能的话,你经常需要满足模式有效,这是不完全相同的.
就我而言,如果你有一个XSD,为一些XML编写验证器非常简单.虽然我确信它存在但我还没有看到DTD.
小智 10
几年前,有理由将DTD用于XML Schema(XML工具更常见或更好地支持).但是,今天,我认为没有理由不使用XML Schema而不是DTD:XML Schema功能更强大.
然而,XML Schema远非完美(只是尝试阅读关于XML Schema的规范或书籍......)并且从那时起已经开发了许多替代方案(Schematron,Examplotron,RelaxNG).这些可能比XML Schema具有技术优势,但是XML Schema在今天更加普遍,我发现很少有一种替代方案有意义.
小智 5
XML Schema可以执行更复杂的验证.例如,如果DTD可以检查XML元素的数据类型是整数还是字符串.而XML模式可以执行更复杂的验证,例如xml元素是以大写字母或正整数开头的字符串.最后,XML模式使用XML语法,它是开发Web服务的自然选择.