`
xjq2008
  • 浏览: 15900 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

XML-DTD

    博客分类:
  • XML
 
阅读更多

DTD

  文档类型定义

  (Document Type Definition)

  DTD 是一套关于标记符的语法规则。它是XML1.0版规格得一部分,是XML文件的验证机制,属于XML文件组成的一部分。

  DTD 是一种保证XML文档格式正确的有效方法,可以通过比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。一个DTD文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则。

  XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能够成为数据交换的标准,因为不同的公司只需定义好标准的DTD,各公司都能够依照DTD建立XML文件,并且进行验证,如此就可以轻易的建立标准和交换数据,这样满足了网络共享和数据交互。

  DTD文件是一个ASCII的文本文件,后缀名为.dtd。

  =============================================================

 
1、DTD 简介

  文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。

  DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

  内部的 DOCTYPE 声明

  假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:

  *****************************************************************************

  <!DOCTYPE 根元素 [元素声明]>

  *****************************************************************************

  带有 DTD 的 XML 文档实例

  *****************************************************************************

  <?xml version="1.0"?>

  <!DOCTYPE note [

  <!ELEMENT note (to,from,heading,body)>

  <!ELEMENT to (#PCDATA)>

  <!ELEMENT from (#PCDATA)>

  <!ELEMENT heading (#PCDATA)>

  <!ELEMENT body (#PCDATA)>

  ]>

  <note>

  <to>Tove</to>

  <from>Jani</from>

  <heading>Reminder</heading>

  <body>Don't forget me this weekend</body>

  </note>

  *****************************************************************************

  以上 DTD 解释如下:

  !DOCTYPE note (第二行)定义此文档是 note 类型的文档。

  !ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"

  !ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型

  !ELEMENT from (第五行)定义 from 元素为 "#PCDATA" 类型

  !ELEMENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型

  !ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型

  外部文档声明

  假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:

  <!DOCTYPE 根元素 SYSTEM "文件名">

  这个 XML 文档和上面的 XML 文档相同,但是拥有一个外部的 DTD:

  *****************************************************************************

  <?xml version="1.0"?>

  <!DOCTYPE note SYSTEM "note.dtd">

  <note>

  <to>Tove</to>

  <from>Jani</from>

  <heading>Reminder</heading>

  <body>Don't forget me this weekend!</body>

  </note> 这是包含 DTD 的 "note.dtd" 文件:

  <!ELEMENT note (to,from,heading,body)>

  <!ELEMENT to (#PCDATA)>

  <!ELEMENT from (#PCDATA)>

  <!ELEMENT heading (#PCDATA)>

  <!ELEMENT body (#PCDATA)>

  *****************************************************************************

  为什么使用 DTD?

  通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。

  通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。

  而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。

  您还可以使用 DTD 来验证您自身的数据。

2、DTD - XML 构建模块

  XML 以及 HTML 文档的主要构建模块是类似 <body>....</body> 这样的标签。

  XML 文档构建模块

  所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:

  元素

  属性

  实体

  PCDATA

  CDATA

  下面是每个构建模块的简要描述。

  元素

  元素是 XML 以及 HTML 文档的主要构建模块。

  HTML 元素的例子是 "body" 和 "table"。XML 元素的例子是 "note" 和 "message" 。元素可包含文本、其他元素或者是空的。空的 HTML 元素的例子是 "hr"、"br" 以及 "img"。

  实例:

  *********************************************************

  <body>body text in between</body>

  <message>some message in between</message>

  *********************************************************

  属性

  属性可提供有关元素的额外信息。

  属性总是被置于某元素的开始标签中。属性总是以名称/值的形式成对出现的。下面的 "img" 元素拥有关于源文件的额外信息:

  *********************************************************

  <img src="computer.gif" />

  *********************************************************

  元素的名称是 "img"。属性的名称是 "src"。属性的值是 "computer.gif"并且可以用样式来控制大小等显示效果。由于元素本身为空,它被一个 " /" 关闭。

  实体

  实体是用来定义普通文本的变量。实体引用是对实体的引用。

  大多数同学都了解这个 HTML 实体引用:" "。这个“无折行空格”实体在 HTML 中被用于在某个文档中插入一个额外的空格。

  当文档被 XML 解析器解析时,实体就会被展开。

  PCDATA

  PCDATA 的意思是被解析的字符数据(parsed character data)。

  可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。

  PDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。

  文本中的标签会被当作标记来处理,而实体会被展开。

  不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &、&lt; 以及 &gt; 实体来分别替换它们。

  CDATA

  CDATA 的意思是字符数据(character data)。

  CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

3、DTD - 元素

  在一个 DTD 中,元素通过元素声明来进行声明。

  声明一个元素

  在 DTD 中,XML 元素通过元素声明来进行声明。元素声明使用下面的语法:

  <!ELEMENT 元素名称 类别>

  或者

  <!ELEMENT 元素名称 (元素内容)>

  空元素

  空元素通过类别关键词EMPTY进行声明:

  <!ELEMENT 元素名称 EMPTY>

  只有 PCDATA 的元素

  只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明:

  <!ELEMENT 元素名称 (#PCDATA)>

  带有任何内容的元素

  通过类别关键词 ANY 声明的元素,可包含任何可解析数据的组合:

  <!ELEMENT 元素名称 ANY>

  带有子元素(序列)的元素

  带有一个或多个子元素的元素通过圆括号中的子元素名进行声明:

  <!ELEMENT 元素名称 (子元素名称 1)>

  或者

  <!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>

  

相同的元素至少出现一次的声明


  语法格式为:

  <!ELEMENT element-name (child-name+)> 

  例:

  <!ELEMENT note (message+)>

  例中的+是指子元素message必须在被包含的note元素里出现一次或者多次。

  

相同的元素不出现或者多次出现的声明


  语法格式为:

  <!ELEMENT element-name (child-name*)>

  例:

  <!ELEMENT note (message*)>

  例中的*是指子元素message能够在被包含的note元素里不出现或者出现多次。

4、DTD - 属性

  在 DTD 中,属性通过 ATTLIST 声明来进行声明。

  声明属性

  属性声明拥使用下列语法:

  <!ATTLIST 元素名称 属性名称 属性类型 默认值>

  以下是属性类型的选项:

  类型 描述

  CDATA 值为字符数据 (character data)

  (en1|en2|..) 此值是枚举列表中的一个值

  ID 值为唯一的 id

  IDREF 值为另外一个元素的 id

  IDREFS 值为其他 id 的列表

  NMTOKEN 值为合法的 XML 名称

  NMTOKENS 值为合法的 XML 名称的列表

  ENTITY 值是一个实体

  ENTITIES 值是一个实体列表

  NOTATION 此值是符号的名称

  xml: 值是一个预定义的 XML 值

  默认值参数可使用下列值:

  值 解释

  值 属性的默认值

  #REQUIRED 属性值是必需的

  #IMPLIED 属性不是必需的

  #FIXED value 属性值是固定的

  规定一个默认的属性值

  DTD:

  <!ELEMENT square EMPTY>

  <!ATTLIST square width CDATA "0">

  合法的 XML:

  <square width="100" />

  在上面的例子中,"square" 被定义为带有 CDATA 类型的 "width" 属性的空元素。如果宽度没有被设定,其默认值为0 。

DTD的优势和缺陷

  DTD的优势

  每一个XML文档都可携带一个DTD,用来对该文档格式进行描述,测试该文档是否为有效的XML文档。既然DTD有外部和内部之分,当然就可以为某个独立的团体定义一个公用的外部DTD,那么多个XML文档就都可以共享使用该DTD,使得数据交换更为有效。甚至在某些文档中还可以使内部DTD和外部DTD相结合。在应用程序中也可以用某个DTD来检测接收到的数据是否符合某个标准。

  对于XML文档而言,虽然DTD不是必须的,但它为文档的编制带来了方便。加强了文档标记内参数的一致性,使XML语法分析器能够确认文档。如果不使用DTD来对XML文档进行定义,那么XML语法分析器将无法对该文档进行确认。

  元素的定义

  根元素的声明

  每个XML文档都只有一个根元素,其它的子元素都包含在该根元素中。因此在DTD中对根元素的声明是必不可少的。根元素声明的一般形式如下:

  <!DOCTYPE root[

  <!-- 子元素 --> ]>

  <!-- 文件体 -->

  DOCTYPE是“document type”(文档类型)的简写,DOCTYPE声明必须放在文档最顶部,在所有代码和标识之上,DOCTYPE声明是必不可少的关键组成部分。DTD语法要求DOCTYPE必须要大写,而且DOCTYPE和元素之间必须要有空格隔开。如在以上代码中DOCTYPE和根元素root之间要有空格隔开。

  DTD的缺陷

  利用DTD验证有效性的解析器,就能够立即对文档的完整性进行可靠的检查。DTD虽然比较实用,但DTD也有不少的缺陷。

分享到:
评论

相关推荐

    xml-dtd文件配置

    DTD(Document Type Definition)是XML的一个重要组成部分,它定义了XML文档的结构和规则,确保XML文档的有效性和一致性。 在XML-DTD文件配置中,我们主要涉及以下几个关键知识点: 1. **XML文档结构**:每个XML...

    XML-DTD教程

    DTD(Document Type Definition)是XML的一个重要组成部分,它是XML文档结构的规范,用于定义XML文档的元素、属性以及它们之间的关系。本教程将深入探讨XML-DTD技术,帮助你理解和掌握如何有效地使用DTD来验证XML...

    XML-DTD实例讲解

    XML入门精解之DTD 文件格式定义(XML DTD)  DTD实际上可以看作一个或多个XML文件的模板,这些XML文件中的元素、元素的属性、元素的排列方式/顺序、元素能够包含的内容等,都必须符合DTD中的定义。XML文件中的元素,...

    xml-apis-2.0.2.jar ecside 依赖包之一

    同时,对于需要处理XML的项目,理解并熟练运用XML的解析技术是非常关键的,这包括了解如何选择适合的解析模型(DOM、SAX或StAX),以及如何使用XML Schema或DTD来验证文档的结构。 总之,xml-apis-2.0.2.jar 是...

    使用SAX验证XML格式--DTD验证

    为了确保XML文档的结构正确无误,我们可以使用验证机制,其中SAX(Simple API for XML)验证是常见的方法之一,特别是与DTD(Document Type Definition)结合使用时。本篇文章将深入探讨如何利用SAX验证XML文档,并...

    mybatis-3-config.dtd mybatis-3-mapper.dtd

    在实际应用中,`mybatis-3-config.dtd` 和 `mybatis-3-mapper.dtd` 通过引入机制被引用到XML配置文件中,确保解析器能够理解并验证配置文件的语法。例如: ```xml &lt;!DOCTYPE configuration PUBLIC "-//mybatis.org...

    xml-commons-resolver-1.1

    在XML文档中,外部实体可以是其他XML文件、DTD(文档类型定义)文件,甚至可以是其他类型的数据源,如图片或文本文件。当解析器遇到这些外部实体时,XML Commons Resolver 会介入,根据提供的解析策略来定位并加载...

    mybatis3-dtd

    在 MyBatis 中,DTD(Document Type Definition)文件起着至关重要的作用,用于定义 XML 配置文件的结构和规则。在本案例中,我们重点关注两个 DTD 文件:`mybatis-3-config.dtd` 和 `mybatis-3-mapper.dtd`。 `...

    使用DTD验证XML文档

    使用DTD验证XML文档 一、 DTD的定义: a) DTD是Document Type Defintion的缩写,即文档类型定义。DTD用来描述XML文档的结构。 二、 DTD可能包含的内容: a) 元素的定义规则。 b) 元素之间的关系规则。 c) 属性的定义...

    xml与DTD,xml与DTD

    ### XML与DTD详解 #### 一、XML简介 XML(Extensible Markup Language)是一种非常重要的数据交换标准,它被广泛应用于互联网数据交换场景之中。XML的设计初衷是为了传输和存储数据,其灵活性允许用户自定义标签,...

    mybatis-dtd约束文件

    在MyBatis的上下文中,DTD文件用于确保XML映射文件(mapper.xml)遵循特定的格式和规则,这样解析器在处理这些文件时就能正确理解其内容。 1. **DTD的基本概念** - DTD定义了XML文档的合法结构和内容。 - 它包含...

    mybatis-dtd.rar

    "mybatis-dtd.rar"这个压缩包可能包含了MyBatis配置文件的相关DTD(Document Type Definition),用于验证XML配置文件的语法正确性,确保XML文档结构的合法性。 在描述中提到的问题是关于`mybatis-config.xml`文件...

    xml-apis.jar.zip

    - **XML Schema**: 是XML的一种模式语言,用于定义XML文档的结构和数据类型,提供了比DTD(Document Type Definition)更强大的验证功能。 综上所述,"xml-apis.jar.zip" 包含了处理XML文档所需的Java库,涵盖了从...

    hibernate-dtd

    "hibernate-dtd"指的是Hibernate框架中使用的文档类型定义(DTD),这是一种规范,用于描述XML文档的结构和元素。 DTD(Document Type Definition)是XML文档的一种语法规范,它定义了文档的合法组成部分,包括元素...

    2001_Programming Web Services with XML-RPC

    DTD(Document Type Definition)定义了XML文档的结构,本书提供了XML-RPC请求和响应的DTD,确保文档的有效性和一致性。 #### 四、Java中的XML-RPC客户端-服务器通信 ##### 4.1 为什么选择XML-RPC for Java? Java...

    hibernate-dtd文件

    在Hibernate中,DTD(Document Type Definition)文件是用于定义XML文档结构的关键元素,它们为Hibernate配置文件提供语法规则和约束。当我们在Java项目中使用Hibernate时,会遇到`hibernate-dtd`文件,它是...

    mybatis-3-config/mapper.dtd 解决mybatis头文件报错

    然后打开eclipse -&gt;Window-&gt;prefenrence-&gt;XML-&gt;XML Catalog-&gt;User Specifiled Entreis-&gt;Add-&gt;Location(此处是你放dtd文件的位置例如:‪D:\mybatis\mybatis-3-config.dtd)-&gt;Key(如果更改config,此处应该是:-//...

    sql-map-2.dtd和sql-map-config-2.dtd

    总结来说,"sql-map-2.dtd"和"sql-map-config-2.dtd"是Ibatis 2.x版本中非常关键的组件,它们为XML配置文件提供了结构化规则,使得开发人员能够编写出合法且易于维护的SQL映射文件和全局配置文件。理解并正确使用...

    hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd

    这个文件是Hibernate配置文件的文档类型定义(DTD),用于验证配置文件`hibernate.cfg.xml`的格式是否正确。它规定了如数据库连接信息、缓存设置、实体类加载路径等配置项的结构和属性。例如,其中 `&lt;session-...

Global site tag (gtag.js) - Google Analytics