zoukankan      html  css  js  c++  java
  • 【杂项】XML Schema和DTD的区别

     

    XML Schema和DTD的区别(2009-10-22 11:15:08)

    XML Schema和DTD都是用于文档验证,但二者还是有一定的区别,其中前者更为精确和灵活:

     

    DTD

       DTD不遵守XML语法

       DTD不可扩展

       DTD不支持命名空间的应用

       DTD没有提供强大的数据类型支持,只能表示很简单的数据类型

     

    Schema

       Schema完全基于XML语法

       能用处理XML文档的工具处理

       大大扩充了数据类型

       支持原型,也就是元素的继承

       支持属性组

       开放性,可以多个Schema运用于一个XML文档

     

    1、XML的合法性验证

    应用XML技术的一个主要目标是为了方便信息交换。很显然,只有XML文档的格式或是结构得到交互各方的一致认可,这个目标才有可能实现。XML Schema(大纲)和DTD就是描述信息结构的模型,可以用来对XML文档内容的合法性进行验证。 

    Schema和DTD规定了在文档中能够使用的元素和属性,以及这些对象与文本内容的可能组合形式。作为对文档验证的标准,Schema和DTD不仅应该能被人们理解,对应用程序来说也应当是易于理解的。对文档合法性的验证包括两个方面:一方面是语法结构的验证,即元素类型、元素嵌套格式、属性类型、属性值数据类型、属性值是否可选等相关文档对象单元本身及其结构的合法性;另一方面是语义的验证,只有真正理解了XML文档的含义才能算是实现了信息交互,否则仅是结构上正确但意义模糊的信息,对于接收方来说一样是无用的,有时甚至会产生误解,起到相反的作用。

    对XML文档的验证有如下几个步骤:

    1.定义一份XML Schema或DTD: Schema或DTD为同一类型的所有文档定义了结构标准,比如有关书籍信息的文档可共享一份标准。

    2.应用Schema或DTD:一般由文档的作者指定Schema,这样接收方可以很快地根据说明对文档进行验证。但在C/S(客户机/服务器)环境中,由于服务器无法判断XML在客户端是否已经验证过,所以为了能够确保验证过程,也为了避免可能的重复验证,对文档应用Schema或DTD的操作由服务器完成。

    3.运行解析器进行验证:解析器在装载文档的同时扫描结构,遇到任何错误都会终止装载过程,并做出适当的响应。

    2、Schema和DTD的区别

    虽然,XML Schema和DTD都是用于文档验证,但二者还是有一定的区别,其中前者更为精确和灵活:

    ● XML Schema是一种内容“开放”的模型,可扩展、功能强,而DTD是内容“封闭”的模型,可扩展性差;

    ● XML Schema支持丰富的数据类型,完全能够满足网络应用特别是电子商务的需求,而DTD不支持元素的数据类型,对于属性的类型定义也很有限;

    ● XML Schema支持名称空间机制,DTD不支持;

    ● XML Schema可以针对不同情况分别对整个XML文档或者是文档局部进行验证,而DTD缺乏这种灵活性;

    ● XML Schema的语法完全遵循XML规范,可以和DOM技术结合使用,功能强大,而DTD语法自成一体,比较难以学习。

    所以,Schema很有可能取代DTD成为验证XML文档合法性的新标准。

     

     

    3、Schema的基本元素

    Schema共有8种元素:<Schema>、<ElementType>、<element>、<group>、<AttributeType>、<attribute>、<datatype>和<description>。这些元素对XML中允许的语法和结构进行了定义。注意:必须在使用Schema前对这些元素进行定义。

    1.<Schema>元素

    Schema文件与其他的XML文档结构非常相似,根元素为<Schema>,表明文档类型:

    <?xml version=“1.0”?>

    <Schema name=“mySchema”

    xmlns=“urn:schemas-microsoft-com:xml-data”

    xmlns:dt=“urn:schemas-microsoft-com:datatypes”>

    </Schema>

    其中属性name指定Schema名称,xmlns指定所属名称空间。第一个xmlns指定全文的缺省名称空间,第二个定义了文档中可使用的数据类型的名称空间。

    在XML中引用Schema的方法是在XML文档的根元素中使用名称空间指明Schema文件的URL地址,在URL前要加上“x-schema”前缀:

    <?xml version=“1.0”?>

    <myElement xmlns=“x-schema:http://mysite.com/myschema.xml”>

    </myElement>

    如果是在XML文档中的某一个元素中使用xmlns引用Schema,就是对文档进行局部合法性验证。

    2.<ElementType>元素

    <ElementType>元素用来声明XML文档中使用的新元素:

    <ElementType 

    name = “element tag name”

    content = “empty”|“textOnly”|“eltOnly”|“mixed”

    model = “open” | “closed” 

    order = “one” | “seq” | “many”

    dt:type = “XML data type” >

    </ElementType>

    Content属性规定声明的元素是否为空,是否包含文本或子元素,还是两者都有;order指定子元素的排列顺序; model规定了元素中是否可以包含未在Schema中定义的元素或属性; dt: type则指定了元素的数据类型。

    3.<element>元素

    <element>元素是对<ElementType>声明的元素的内容进行定义,说明在指定的元素类型中允许使用哪些子元素:

    <element

  • 相关阅读:
    类的静态成员
    QT上的Mysql编程
    将博客搬至CSDN
    ARM开发板系统移植-----rootfs的制作
    ARM开发板系统移植-----kernel的编译
    ARM开发板系统移植-----u-boot的编译
    Linux 消息队列编程
    Linux 共享内存编程
    Linux 信号量同步编程
    Linux 信号量互斥编程
  • 原文地址:https://www.cnblogs.com/dracohan/p/1614473.html
Copyright © 2011-2022 走看看