XML的验证模式DTD与XSD的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML的验证模式DTD与XSD的区别相关的知识,希望对你有一定的参考价值。

参考技术A xml文件的正确性是由xml的验证模式来保证的,比较常见的验证模式有两种:DTD和XSD。

DTD(Document Type Definition)即文档类型定义,是一种xml约束模式语言,是xml文件的验证机制,属于xml文件组成的一部分。DTD是一种保证xml文档格式正确的有效方法,可以 通过比较xml文档和DTD文档来查看文档是否符合规范,元素和标签使用是否正确。一个DTD文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则。
以下是 spring-beans-2.0.dtd 的部分内容:

XSD(XML Schemas Definition)即xml结构定义文档。xsd描述了xml文档的结构,可以用一个指定的xml schema来验证某个xml文档,以检查该xml是否符合其要求。文档设计者可以通过xml schema指定一个xml文档所允许的结构和内容,并可据此检查一个xml文档是否是有效的。
下面是spring-beans-3.1.xsd的部分内容:

3.主要区别:
DTD需要在xml文件的头部声明,例如

而XSD通过xmlns名称空间的方式验证的,例如

dtd与xsd去区别

  先说一下xml吧,xml(eXtensible Markup Language)可拓展标记语言,是一种简单的数据存储语言,应用简单的标记描述数据。而dtd和xsd可以说是xml的规范,xml根据规范进行编写。

     dtd(Document Type Definition)即文档类型定义,是一种xml模式的约束语言,属于xml的组成部分一个。dtd文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则。

test.dtd

<?xml version="1.0" encoding="utf-8"?>

<!ELEMENT pome (author,title,content)>

<!ELEMENT author (#PCDATA)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT content (#PCDATA)>



     xsd(xml Schemas Definition),描述了xml文档结构。xsd本身是一个XML文档,它符合XML语法结构。可以用通用的XML解析器解析它。xsd文件中会定义:文档中出现的元素、文档中出现的属性、子元素、子元素的数量、子元素的顺序、元素是否为空、元素和属性的数据类型、元素或属性的默认和固定值。

test.xsd(借用http://www.cnblogs.com/chenqingwei/archive/2010/05/10/1731743.html)

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema id="原子类型" targetNamespace="http://student.com" elementFormDefault="qualified"
    xmlns
="http://student.com" xmlns:mstns="http://student.com" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    
<xs:element name="student">
      
<xs:complexType>
        
<xs:sequence>
          
<xs:element name="name" type="nameType"/>  
          
<xs:element ref="age"/>
          
<xs:element ref="sex"/>
          
<xs:element ref="phone"/>
        
</xs:sequence>
      
</xs:complexType>
    
</xs:element>
    
    
<xs:simpleType name="nameType">
      
<xs:restriction base="xs:string">
        
<xs:minLength value="4"/>
        
<xs:maxLength value="8"/>
      
</xs:restriction>
    
</xs:simpleType>
    
    
<xs:element name="age">
      
<xs:simpleType>
        
<xs:restriction base="xs:int">
          
<xs:minInclusive value="1"/>
          
<xs:maxInclusive value="100"/>
        
</xs:restriction>
      
</xs:simpleType>
    
</xs:element>
    
      
<xs:element name="sex">
      
<xs:simpleType>
        
<xs:restriction base="xs:string">
          
<xs:enumeration value="男"/>
          
<xs:enumeration value="女"/>
        
</xs:restriction>
      
</xs:simpleType>
    
</xs:element>
    
    
<xs:element name="phone">
      
<xs:simpleType>
        
<xs:restriction base="xs:string">
          
<xs:pattern value="\d{3}-\d{8}"/>
        
</xs:restriction>
      
</xs:simpleType>
    
</xs:element>
</xs:schema>

     dtd与xsd的区别:

     1)dtd 是使用非 XML 语法编写的。

     2)dtd不可扩展,不支持命名空间,只提供非常有限的数据类型 。

     3)xsd支持数据类型,支持命名空间


以上是关于XML的验证模式DTD与XSD的区别的主要内容,如果未能解决你的问题,请参考以下文章

Schema 和 DTD 之间的区别

XML模式文件中xs和xsd的区别?

基础-XML常用的两种验证模式

自定义 XML 文档的验证模式

Maven 中的 XML DTD/Schema 验证

XML XSD XSL区别与联系