Schema和DTD的区别(转)

《一》Schema是对XML文档结构的定义和描述,其主要的作用是用来约束XML文件,并验证XML文件有效性。DTD的作用是定义XML的合法构建模块,它使用一系列的合法元素来定义文档结构。它们之间的区别有下面几点:

       1、Schema本身也是XML文档,DTD定义跟XML没有什么关系,Schema在理解和实际应用有很多的好处。

       2、DTD文档的结构是“平铺型”的,如果定义复杂的XML文档,很难把握各元素之间的嵌套关系;Schema文档结构性强,各元素之间的嵌套关系非常直观。

      3、DTD只能指定元素含有文本,不能定义元素文本的具体类型,如字符型、整型、日期型、自定义类型等。Schema在这方面比DTD强大。

      4、Schema支持元素节点顺序的描述,DTD没有提供无序情况的描述,要定义无序必需穷举排列的所有情况。Schema可以利用xs:all来表示无序的情况。

     5、对命名空间的支持。DTD无法利用XML的命名空间,Schema很好满足命名空间。并且,Schema还提供了include和import两种引用命名空间的方法。

DTD和Schema是用于定义 XML文档结构的工具。它们一方面用于定义XML文档的结构,另一方面用于验证XML文档是否满足指定的结构

 

《二》  DTD,即Document Type Define,中文称文档类型定义。它是标准通知标记语言(SGML)DTD的一个子集。一个XML DTD定义了XML文档的元素架构、元素标记和属性。建立XML文档时通常需要按照DTD规范来进行,反过来可以通过对文档进行DTD验证,检验XML文档建立的正确性。DTD不能定义一些必要的限制条件,如元素出现的次数、数据类型等,因此DTD更适于以文档为中心的XML内容。

           Schema,中文称模式。与DTD不同,它本身也是基于XML。XML Schema同时还支持名称空间,能够定义比DTD更复杂的数据类型和结构。XML Schema内置支持一系列的简单数据类型,如字符串、小数和整数等,还可以定义元素出现的次数。因此XML Schema更适合以数据为中心的文档。

目前,越来越多的应用中偏向于采用XML Schema来定义和验证XML文档。

 《三》  standalone  用来表示该文件是否呼叫其它外部的文件。若值是 ”yes” 表示没有呼叫外部文件,若值是 ”no” 则表示有呼叫外部文件。默认值是 “yes”。

这里所指的外部文件其实就是查检XML是不是有效的约束文件,或是DTD或是Schema,那这两者又有什么区别呢?

            尽管XML1.0提供了一种机制,即文档类型定义(DTD)来规范XML的格式规则。但是它天生存在一些缺点,比如,它采用了非XML的语法规则、不支持更多的数据类型、扩展性差等,为了克服这些缺点,XML Schema 出现了。W3C推荐在XML中使用XML Schema来代替DTD。

            XML Schema(模式) 跟DTD一样,也用于定义 XML 文档的约束。但它与DTD明显不同的是,XML Schema遵循XML语法规则,更好地支持数据类型以及命名空间。W3C称:XML Schema is an XML based alternative to DTD。模式在单独的文件中定义,通常扩展名为 .xsd。每个模式定义都有一个根元素 schema,该元素属于名称空间http://www.w3.org/2001/XMLSchema。schema 元素可以包含可选的属性。比如:

<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema
    elementFormDefault="qualified" attributeFormDefault="unqualified">

这表示模式中使用的元素来自http://www.w3.org/2001/XMLSchema名称空间。

XML 文件使用 schema 名称空间中的 schemaLocation 属性链接到对应的模式。使用schemaLocation 属性必须定义 schema 名称空间。所有这些定义都出现在 XML 文档的根元素中。语法如下:
<root_element  schema_namespace_definition  schema_location_definition>

下面是一个例子:
<Books  xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
 xs:schemaLocation="http://www.example.com Books.xsd">
先来看看一个XML文件示例(message.xml),分别用DTD和XML Schema 描述这个文件,看看它们之间的区别:

1、使用DTD:
<?xml version="1.0" standalone="yes"?>
  <!DOCTYPE message[
    <!ELEMENT message (to,from,body)>
    <!ELEMENT to      (#PCDATA)>
    <!ELEMENT from    (#PCDATA)>
    <!ELEMENT body    (#PCDATA)>
  ]>
<message>
    <to>rose</to>
    <from>alex</from>
    <body>Hi,My Girl!</body>
</message>

2、使用XML Schema :

message.xml:

<?xml version="1.0" standalone="no"? >
  <message xmlns=http://www.example.com
      xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
    xsi:schemaLocation="http://www.example.com message.xsd">
    <to>Rose</to>
    <from>Alex</from>
   <body>Hi,My Girl!</body>
</message>

message.xsd:

<?xml version="1.0"?>
<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema
  targetNamespace=http://www.example.com
  xmlns="http://www.example.com" elementFormDefault="qualified">
   <xs:element name="message">
      <xs:complexType>
      <xs:sequence>
      <xs:element name="to" type="xs:string"/>
      <xs:element name="from" type="xs:string"/>
      <xs:element name="body" type="xs:string"/>
      </xs:sequence>
      </xs:complexType>
   </xs:element>
</xs:schema>

(ps:网络转载)

posted @ 2015-10-15 10:32  JiangXiaoKun  阅读(445)  评论(0)    收藏  举报