简介  文档类型定义(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 来验证您自身的数据。
模块
  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 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
  文本中的标签会被当作标记来处理,而实体会被展开。
  不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &amp; 、&lt; 以及 &gt; 实体来分别替换它们。
  CDATA
  CDATA 的意思是字符数据(character data)。
  CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
元素
  在一个 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元素里不出现或者出现多次。
属性
  在 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 。
实体
  实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
  实体引用是对实体的引用。
  实体可在内部或外部进行声明。
一个内部实体声明
  语法:
  <!ENTITY 实体名称 "实体的值">
  DTD 例子:
  <!ENTITY writer "Bill Gates">
  <!ENTITY copyright "Copyright 具体的url">XML 例子:
  <author>&writer;&copyright;</author>注释: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。
一个外部实体声明
  语法:
  <!ENTITY 实体名称 SYSTEM "URI/URL">
  DTD 例子:
  <!ENTITY writer SYSTEM "具体的url">
  <!ENTITY copyright SYSTEM "具体的url">XML 例子:
  <author>&writer;&copyright;</author>
实例报纸文章 DTD
  <!DOCTYPE NEWSPAPER [
  <!ELEMENT NEWSPAPER (ARTICLE+)>
  <!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)>
  <!ELEMENT HEADLINE (#PCDATA)>
  <!ELEMENT BYLINE (#PCDATA)>
  <!ELEMENT LEAD (#PCDATA)>
  <!ELEMENT BODY (#PCDATA)>
  <!ELEMENT NOTES (#PCDATA)>
  <!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED>
  <!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>
  <!ATTLIST ARTICLE DATE CDATA #IMPLIED>
  <!ATTLIST ARTICLE EDITION CDATA #IMPLIED>
  <!ENTITY NEWSPAPER "Vervet Logic Times">
  <!ENTITY PUBLISHER "Vervet Logic Press">
  <!ENTITY COPYRIGHT "Copyright 1998 Vervet Logic Press">
  ]>
产品目录 DTD
  <!DOCTYPE CATALOG [
  <!ENTITY AUTHOR "John Doe">
  <!ENTITY COMPANY "JD Power Tools, Inc.">
  <!ELEMENT CATALOG (PRODUCT+)>
  <!ELEMENT PRODUCT
  (SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
  <!ATTLIST PRODUCT
  NAME CDATA #IMPLIED
  CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
  PARTNUM CDATA #IMPLIED
  PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
  INVENTORY (InStock|Backordered|Discontinued) "InStock">
  <!ELEMENT SPECIFICATIONS (#PCDATA)>
  <!ATTLIST SPECIFICATIONS
  WEIGHT CDATA #IMPLIED
  POWER CDATA #IMPLIED>
  <!ELEMENT OPTIONS (#PCDATA)>
  <!ATTLIST OPTIONS
  FINISH (Metal|Polished|Matte) "Matte"
  ADAPTER (Included|Optional|NotApplicable) "Included"
  CASE (HardShell|Soft|NotApplicable) "HardShell">
  <!ELEMENT PRICE (#PCDATA)>
  <!ATTLIST PRICE
  MSRP CDATA #IMPLIED
  WHOLESALE CDATA #IMPLIED
  STREET CDATA #IMPLIED
  SHIPPING CDATA #IMPLIED>
  <!ELEMENT NOTES (#PCDATA)>
  ]>
优劣
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也有不少的缺陷。
  DTD有自己的特殊语法,其本身不是XML文档;
  DTD只提供了有限的数据类型,用户无法自定义类型;

转载于:https://www.cnblogs.com/moondev/archive/2013/01/30/2883217.html

XML DTD用法【转载】相关推荐

  1. XML:DTD:Schema

    1.从xml的文档结构最高可抽象到纵横两个方面:节点 和 属性 <topnode name="top"> <midtop name="mid" ...

  2. XML DTD 语言学习笔记

    -XML DTD 全称:Document Type Definition 简介:用于定义文档的合法性.它定义了文档应该有哪些元素及其属性,还有其他一些约束性规则. 注意:DTD语言定义的文档类型是SG ...

  3. XML —— DTD介绍

    一.DTD介绍 Document Type Definition: DTD是一种XML的约束方式,除了此种约束方式外,还有XSchema,XSchema比DTD的约束能力还要强,因此DTD正在逐渐淘汰 ...

  4. decorators.xml的用法 (转)

    from :https://www.cnblogs.com/zhangxiaopeng/p/5442776.html decorators.xml的用法 (转) spring,hibernate框架做 ...

  5. Android实现XML解析技术 (转载http://www.cnblogs.com/hanyonglu/archive/2012/02/28/2370675.html)...

    本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...

  6. xml dtd 约束建立xml文档

    web-app_2_3.dtd <?xml version="1.0" encoding="UTF-8"?> <!--<!DOCTYPE ...

  7. XML DTD Schema 学习-Schema 介绍

    Schema 介绍: 有人会问,DTD和Schema都是对XML文档的一种约束,为什么不就选其中之一,而又有Sche ma呢.因为DTD安全度太低了,也就是说它的约束定义能力不足,无法对XML实例文档 ...

  8. Android Volley完全解析(一),初识Volley的基本用法 转载地址:http://blog.csdn.net/guolin_blog/article/details/17482095

    转载地址:http://blog.csdn.net/guolin_blog/article/details/17482095 1. Volley简介 我们平时在开发Android应用的时候不可避免地都 ...

  9. Typedef用法(转载)

    在C的学习过程中,现在才发现,以前有那么多被忽略的重点:现在是慢慢拾起这些重点的时候,通过百度和博客,我感觉我学到了很多东西,自己只是在别人说的基础上,按照自己学习的过程在这里记录一下,以后有时间回过 ...

最新文章

  1. eclipse从数据库逆向生成Hibernate实体类
  2. 校内网--自动分享视频-flash xss蠕虫分析
  3. cocos2d-x 帧动画学习
  4. Linux-鸟菜-2-主机规划与磁盘分区
  5. gc 吞吐量和停顿时间_GC对吞吐量和延迟的影响
  6. 苹果手机时区改不了怎么办_苹果日期和时间怎么修改不了
  7. c语言lnk1104无法打开exe,error LNK1104: 无法打开文件“C:\Users\Administrator\Desktop\....\\xxxx.exe”...
  8. C#窗体连连看小游戏(超详细)
  9. 指数加权平均与动量梯度下降法
  10. 无线传感器网络技术原理及应用 许毅编著(转载请注明出处---https://www.cnblogs.com/qingl)...
  11. stm32-DHT11原理及代码解读
  12. Python实现配色自由,展示一下可视化配色方案
  13. 【系统架构设计师】第四章 计算机网络
  14. Hadoop Mapreduce组建 核心环形缓冲区 RingBuff 原理及Go实现
  15. UEFI启动模式的服务器使用U盘安装Linux系统
  16. 电子线路实验I综合设计:数字钟
  17. excel数据分析 - 动态仪表盘的操作技巧
  18. ATW黑客组织疯狂对我国重要机构实施窃密、抹黑
  19. Windows刷新dns缓存
  20. 知乎50万人收藏的资源网站:什么资源都能秒速找到

热门文章

  1. Android逆向文档阅读笔记-Android Application Fundamentals
  2. Linux学习笔记-使用管道通信实现cat /etc/passwd | grep root这条命令
  3. python中的fstring的 !r,!a,!s
  4. python 定时任务 Apscheduler
  5. php图片中不显示文字内容,水印效果 只有图片,文字不显示
  6. php备份mysql页面_如何用PHP的页面备份、恢复Mysql数据库_php
  7. java元素定位div_Java+Selenium元素定位的练习(三)
  8. roundcube邮箱手机端_求一款能够云备份的安卓手机便签记事本?
  9. c语言延时函数delay延时一秒_IMX6UL裸机实现C语言LED实验
  10. 日常生活开支记账明细_花钱如流水?拥有这两款记账APP,1年能省1万块!