当前位置:  开发笔记 > 编程语言 > 正文

XML Schema和DTD有什么区别?

如何解决《XMLSchema和DTD有什么区别?》经验,为你挑选了7个好方法。

我搜索了这个问题,但我不清楚什么是XML模式和DTD(文档类型定义),以及为什么XML模式比DTD更强大.

任何指导都将受到高度赞赏.



1> Pascal Thive..:

从将DTD转换为Schema文章的DTD和Schema部分之间的差异:

DTD和XML Schema之间的关键区别在于XML Schema使用基于XML的语法,而DTD具有从SGML DTD保留的独特语法.虽然DTD经常因为需要学习新语法而受到批评,但语法本身却相当简洁.对于XML Schema来说,情况恰恰相反,XML Schema虽然冗长,但也使用了标签和XML,因此XML的作者应该发现XML Schema的语法不那么令人生畏.

DTD的目标是为可能希望将SGML DTD转换为XML DTD的应用程序保留与SGML的兼容级别.但是,为了与XML的一个目标保持一致,"XML标记中的简洁性至关重要",并没有真正关心保持语法简洁.

[...]

那么当我们转换DTD时,哪些其他差异可能尤为重要?让我们来看看.

打字

DTD和XML Schema之间最重要的区别是能够在Schema中结合元素和属性声明创建和使用数据类型.实际上,XML Schema Recommendation的一半用于数据类型化和XML Schema,这是一个非常重要的区别.我们将在本书的第三部分"XML Schema数据类型"中详细介绍数据类型.

[...]

发生限制

DTD和Schema显着不同的另一个区域是出现约束.如果您回忆我们之前的第2章"模式结构"(或您自己的DTD工作)中的示例,可以使用三个符号来限制元素的出现次数:*,+和?.

[...]

枚举

所以,假设我们有一个元素,我们希望能够为衬衫定义尺寸属性,这允许用户选择尺寸:小,中或大.我们的DTD看起来像这样:




[...]

但是,如果我们想size成为一个元素呢?我们不能用DTD做到这一点.DTD不提供元素文本内容中的枚举.但是,由于使用Schema的数据类型,当我们在前面的示例中声明枚举时,我们实际上创建了一个我们现在可以用于元素的simpleType被调用size_values:


[...]



2> 小智..:

XML模式定义(XSD)和文档类型定义(DTD)之间的差异包括:

XML模式是用XML编写的,而DTD是从SGML语法派生的.

XML模式定义元素和属性的数据类型,而DTD不支持数据类型.

XML模式允许支持名称空间,而DTD则不支持.

XML模式定义子元素的数量和顺序,而DTD则不定义.

XML模式可以使用XML DOM自行操作,但在DTD的情况下是不可能的.

使用XML模式用户不需要学习新语言,但使用DTD对用户来说很困难.

XML模式提供安全的数据通信,即发送方可以以接收方将理解的方式描述数据,但是在DTD数据的情况下,接收方可能会误解数据.

XML模式是可扩展的,而DTD是不可扩展的.

更新时间:2015.08.26

并非所有这些要点都是100%准确,但你得到了要点.

另一方面:

DTD允许您定义要在XML文件中使用的新ENTITY值.

DTD允许您将其本地扩展到单个XML文件.



3> N Randhawa..:

正如许多人之前提到的,XML Schema使用基于XML的语法,DTD具有独特的语法.DTD不支持数据类型,这很重要.

让我们看一个非常简单的例子,其中大学有多个学生,每个学生有两个元素"名字"和"年".请注意,我在代码中使用"// - >"仅用于评论.

在此输入图像描述

现在我将在DTD和XSD中编写此示例.

DTD


 university as root element 
   // --> university has  * = Multiple students
     // --> Student has elements name and year
          // --> name as Parsed character data
          // --> year as Parsed character data
]>


    
        
            John Niel             //---> I can also use an Integer,not good
        
        
            2000                 //---> I can also use a string,not good
        
    

XML架构定义(XSD)




                    //--> complex datatype uniType
 
   //--> has unbounded no.of students
 


                     //--> complex datatype stuType
 
                            //--> has element name
                            //--> has element year
 


       //--> university of type UniType 
          //--> student of type stuType
          //--> name of datatype string
         //--> year of datatype integer






    
        
            John Niel          
        
        
            2000                      //--> only an Integer value is allowed
        
    



4> troelskn..:

DTD早于XML,因此不是有效的XML本身.这可能是XSD发明的最大原因.



5> 小智..:

XSD和DTD之间的相似之处

both specify elements, attributes, nesting, ordering, #occurences

XSD和DTD之间的差异

XSD also has data types, (typed) pointers, namespaces, keys and more.... unlike DTD 

此外,虽然XSD很简单,但它的语法是XML的扩展,使得快速学习变得方便.


DTD比XSD更受限制,只有**#occurences**只有`1`,`0或1`,0或更多`的选择,而XSD可以指定最小和最大数量.

6> JaakkoK..:

一个区别还在于,在DTD中,元素的内容模型完全由其名称决定,与文档中出现的位置无关.所以,说你想有一个name你的子元素person元素本身具有的子元素firstlast.然后,如果你想在同一个文档中有一个name元素的子元素city,那么还需要有子元素firstlast.相比之下,XML Schema允许您在本地声明子元素类型,因此在这种情况下,您可以name为两者personcity单独声明子元素,在这些上下文中为它们提供适当的内容模型.

另一个主要区别是对名称空间的支持.由于DTD是原始XML规范的一部分(并且继承自SGML),因此它们根本不是名称空间感知,因为稍后会指定XML名称空间.您可以将DTD与名称空间结合使用,但它需要一些扭曲,例如被迫在DTD中定义前缀并仅使用这些前缀,而不是能够使用任意前缀.

对我来说,其他差异大多是肤浅的.可以轻松地将数据类型支持添加到DTD,语法只是语法.(我,其中一个,发现XML Schema语法很糟糕,并且永远不想手工维护XML Schema,我不会说DTD或RELAX NG模式;如果我出于某种原因需要XML Schema,我通常会写一个RELAX NG并将其转换为trang.)



7> ACV..:

相似之处

DTD和模式都执行相同的基本功能:

首先,它们都声明元素和属性的清单。

其次,两者都描述了如何在XML中对这些元素进行分组,嵌套或使用。换句话说,它们声明了您允许某人在您的工作流程中创建XML文件的规则,并且

第三,DTD和模式都提供了限制或强制元素类型或格式的方法。例如,在DTD或模式中,您可以强制将日期字段写为01/05/06或1/5/2006。

差异:

DTD对于文本密集型应用程序更好,而模式对于数据密集型工作流具有多个优点。

模式以XML编写,因此遵循相同的规则,而DTD以完全不同的语言编写。

例子:

DTD:


    
         
         
         
         
         

XSD:




     
          
               
          
          
      


      
           
               
          
     

     
          
               
                    
                         
                              
                         
                    
               
               
                    
                         
                              
                         
                    
               
               
                    
                         
                              
                         
                    
               
               
                    
                         
                              
                         
                    
               
               
                    
                         
                              
                         
                    
               
          



推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有