DTD或XML模式。哪一个更好?

时间:2009-09-29 04:34:08

标签: xsd dtd xml

DTD和XML Schema的优点/缺点是什么(我甚至不确定后者的官方名称是什么!)?哪个更好?为什么我们需要两种方法来做同样的事情?

编辑:我在一篇正在阅读的文章中找到了这个,这促使我提出这个问题:

  

为什么选择W3C XML Schema语言?

     

W3C XML Schema Language不是   只有模式语言。实际上,XML   规范描述了文档类型   定义(DTD)作为方法   表达架构。此外,   JAXB的预发布版本   参考实施仅起作用   使用DTD - 也就是说,不使用模式   用XML Schema Language编写。   但是,XML Schema Language是   比DTD更丰富。例如,   用XML Schema编写的模式   语言可以描述结构   关系和数据类型   无法表达(或不能轻易表达)   表达)在DTD中。有工具   可用于将DTD转换为W3C   XML Schema Language,如果有的话   您使用的基于DTD的模式   早期版本的JAXB   参考实现,你可以使用   这些工具将模式转换为   XML模式语言。 http://java.sun.com/developer/technicalArticles/WebServices/jaxb/#binsch

我想我想举例说明为什么XML-Schema更好(如果确实如此)。

4 个答案:

答案 0 :(得分: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,虽然我确定它存在。

答案 1 :(得分:10)

几年前,有理由将DTD用于XML Schema(XML工具更常见或更好地支持)。但是,今天,我认为没有理由不使用XML Schema而不是DTD:XML Schema功能更强大。

然而,XML Schema远非完美(只是尝试阅读关于XML Schema的规范或书籍......)并且从那时起已经开发了许多替代方案(Schematron,Examplotron,RelaxNG)。这些可能比XML Schema具有技术优势,但XML Schema今天更加普遍,我看到很少有一种替代方案有意义的情况。

答案 2 :(得分:5)

XML Schema可以执行更复杂的验证。例如,如果DTD可以检查XML元素的数据类型是整数还是字符串。 而XML模式可以执行更复杂的验证,例如xml元素是以大写字母或正整数开头的字符串。 最后,XML模式使用XML语法,它是开发Web服务的自然选择。

答案 3 :(得分:4)

还有Relax NG - 另一种用于验证XML文档的强大语言,以及来自DSDL的Schematron和其他技术。放松NG非常简单,具有人类可读形式 - Relax NG Compact,允许方案编写类似于BNF方案。