导读:DTD是Document type definition(文档类型定义的缩写),是一套关于标记符的语法规则,它是XML文件的验证机制,数以XML文件的组成部分。XML文档是一种描述标记语言的语言,它可以由DTD来定义结构,DTD制定了文档的一系列规则,确保文档的一致性和有效性。本篇博客,就将具体介绍:什么是DTD,为什么用DTD,怎样用DTD。

一、什么是DTD

DTD是一套关于标记的语法规则,该规则详细地描述了一组XML文档的结构。DTD说明了在文档中可以使用哪些标记,哪些标记可以出现在其他标记中,哪些标记具有属性,使用的标记应该按什么次序出现等。

XML文档的解析器分为两类:一、解析器不会进行有效性的检查;二、需要进行有效性的检查。对于具备有效性检查的解析器,他将会根据相应的文件或存在于XML文档中的定义代码,对具体文档中使用的实例元素进行检查,以确定这些元素是否符合定义的格式,而DTD正是实现XML文档有效性验证的途径之一。

二、为什么要用DTD

2.2,不使用DTD的后果:

在编写XML文档时,由于应用程序的需求经常会发生改变,所以有时需要对所编写的XML文档结构加以改变,而文档结构改变时,就需要修改代码并添加新的元素,然而当应用程序执行出现了错误时,如果没有显示的文件资料,就无法可靠捕获XML文档中的错误,只能依靠程序顺利执行,当出现结果和预期不符时,就更难检测到错误。在这个时候,就需要依赖清晰、准确的语法规则文档:DTD。

2.2,使用 DTD的好处:

1,使用DTD可以确保XML文档的规则和验证文档数据的有效性;2,使用共同的DTD可以为某类XML文档提供统一的格式和相同的结构;3,使用共同的DTD可以保证在一定范围内,XML文档数据的交流和共享

4,应用程序设计人员根据DTD就能够知道对应的XML文档的逻辑结构,不必依赖具体的数据就能编写出对此类XML文档中的数据进行处理的应用程序。

三、DTD的使用方式

DTD共有四种使用方式,分别是:内部定义、外部引用、混合DTD、公用DTD

3.1,内部定义

<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 学生 [
<!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT 学号 (#PCDATA)>
<!ELEMENT 性别 (#PCDATA)>
]>
<学生>
<姓名>Angel</姓名>
<学号>201601152224</学号>
<性别>女</性别>
</学生></span>

效果:

注意;standalone属性的默认值为no,表示引入外部的DTD格式。本次效果是yes,代表着使用内部DTD定义。

3.2,外部定义

DTD文档:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8" ?>
<!ELEMENT 学生 (姓名,学号,性别)>
<!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT 学号 (#PCDATA)>
<!ELEMENT 性别 (#PCDATA)></span>

XML文档:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 学生 SYSTEM "TestDTD2.dtd">
<学生>
<姓名>Angel</姓名>
<学号>201601152224</学号>
<性别>女</性别>
</学生></span>

3.3,混合DTD(外部和内部结合使用)

当一个外部的DTD文档并不能包含XML文档中所有的的元素或者实体时,就得使用内部DTD进行声明定义。

3.4,公用的DTD

在DOCTYPE声明中,关键字并不是只有SYSTEM,它也并不是引入外部DTD的唯一方法,这个关键字主要用于引用一个作者或组织编写的众多XML文件中通用的DTD。另外一个DTD引入办法是使用关键字PUBLIC,它是由一个权威机构制定的,提供给特定行业或公众使用的DTD。语法如下:

<!DOCTYPE 根元素名称 PUBLIC "DTD名称" "外部DTD的URL">

实例:<!DOCTYPE 医药列表 PUBLIC "DTD名称" "http://www.Medicine.com/dtds/Mlist.dtd">

四、总结

DTD文档相当于是给XML提供了一种规则,HTML是使用预先确定的标记,而XML却可以使用未被预先确定的标记,但是为了规范和被浏览器理解,必须使用DTD定义标记规则定义。对于后面的几种使用方式,可以结合到CSS的应用进行理解,也可以使用函数的显示定义和隐式定义进行理解。接下来,是总结XML Schema文件以及XML和HTML的交互使用。

【HTML/XML 9】XML中的DTD文件的更多相关文章

  1. 向项目中添加dtd文件实现代码提示

    我们在编辑代码的过程中,有代码提示的编辑工具总是受到青睐. 本文将讲解怎么在eclipse中加入dtd文件实现代码提示.myeclipse同理 选择window,选择perferences,然后拉到下 ...

  2. eclipse中导入dtd文件实现xml的自动提示功能

    以mybatis为例 1.mybatis的xml文件头: (1)config文件: <?xml version="1.0" encoding="UTF-8" ...

  3. 【HTML/XML 10】XML文档中的Schema文件

    导读:DTD是对XML文档进行有效性验证的方法之一,事实上,继DTD之后,出现了用来规范和描述XML文档的第二代标准:Schema.Schema是DTD的继承,但是也有其不同的地方,它是真正的以独立的 ...

  4. XML中的DTD语法

    DTD(Document Type Definition),全称为文档类型定义. 文件清单:book.xml <?xml version="1.0" ?> <!D ...

  5. 自定义xml配置文件之dtd文件校验

    用了很多第三方库,也看了些源码,总是想如果自己写一个类似的库,读取xml配置文件(properties配置文件比较简单) 该如何给配置文件添加头,添加校验,因为xml配置文件相对于properties ...

  6. 在XML里的XSD和DTD以及standalone的使用3----具体使用详解

    本人亲自写的一个简单的测试例子 1.xsd定义 <?xml version="1.0" encoding="utf-8"?><xs:schem ...

  7. 应验log4j.xml时不能找到log4j.dtd

    原因分析:log4j.xml中使用log4j的DTD验证其格式的有效性"<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd&quo ...

  8. xml基础之二(XML结构【2】)DTD文档模版

    xml基础之二(XML结构[2])DTD文档模版 xml 模板 文档结构  我们知道XML主要用于数据的存储和传输,所以无论是自定义还是外部引用DTD模板文档,都是为了突出数据的存储规范.DTD(文档 ...

  9. dtd文件中写的引用实体被xml文件引用后无法在浏览器中显示的问题

    解决方案:把dtd文件由被xml文件外部引用改成被xml文件内部引用. 例子: 1.xml文件: <?xml version="1.0" encoding="UTF ...

随机推荐

  1. Scala语法笔记

    JAVA中,举例你S是一个字符串,那么s(i)就是该字符串的第i个字符(s.charAt(i)).Scala中使用apply的方法 JAVA与C++的?:操作符 等同于Scala的 if ( x &g ...

  2. ADF_ADF Faces系列4_ADF数据可视化组件简介之建立BarChart/Gauge/ExportExcel

    2013-05-01 Created By BaoXinjian

  3. DBA_Oracle冷备份案例脚本本法(案例)

    2014-08-10 Created By BaoXinjian

  4. 键盘--android 隐藏系统键盘

    . -----------------------------------------已验证----------------------------------- public static void ...

  5. EditText获取焦点显示输入法时布局自动改变的解决方案

    最近在调试Android时,发现当屏幕下方的EditText获取焦点,显示输入法时候.页面布局重新调整而不是整体上移.导致部分控件显示不完全. 最终解决方案是修改项目AnroidManifest.xm ...

  6. 转--Android实用的代码片段 常用代码总结

    这篇文章主要介绍了Android实用的代码片段 常用代码总结,需要的朋友可以参考下     1:查看是否有存储卡插入 复制代码 代码如下: String status=Environment.getE ...

  7. MYSQL批量插入数据库实现语句性能分析

    假定我们的表结构如下 代码如下   CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ) NOT NULL, value ...

  8. 拥抱高效、拥抱 Bugtags 之来自用户的声音

    小编按:这是一篇 Bugtags 用户来稿,主要是介绍了 Bugtags 使用的方法及其带来的效率的提升,谢谢介博同学对 Bugtags 的信赖和支持.小编在这里诚邀各位热心用户向我们投稿,说出你使用 ...

  9. Gatling的进阶二

    1. 参数化     Gatling可以很方便使用csv文件进行参数化,例如一个用户信息表:   /* user_information.csv */ username,password,accoun ...

  10. ServiceBroker创建流程

    首先为这个数据库开启Service Broker ALTER DATABASE [T_EIP_UnityStore] SET ENABLE_BROKER 创建MessageType CREATE ME ...