一、DTD介绍

Document Type Definition;

DTD是一种XML的约束方式,除了此种约束方式外,还有XSchema,XSchema比DTD的约束能力还要强,因此DTD正在逐渐淘汰;

DTD的目的就是约束XML标签的写法;比如在我们struts2开发当中,编写struts.xml时,需要遵循的规则,就是通过DTD进行约束的,因此我们在开发当中通过Eclipse导入DTD文件,便于开发提示,如果在开发中开发人员不遵循DTD的规范,则会出现错误提示;

<struts><package name="" namespace="" extends=""><action></action>    </package></struts>

XML约束的重要性:在编写XML时,对于XML进行约束是非常重要的,因为如果对于XML不约束,则会让开发人员很难掌握;

而DTD通常是由框架设计人员定义的,一般的开发人员只需要在XML中遵循DTD规范编写XML即可;

二、导入DTD

如果要导入DTD,可以通过两种方式:

(1)在XML中直接编写;

(2)在专门的DTD文件中编写,然后在XML中通过特定的语句导入DTD文件;

1、在XML中直接编写,语法如下:

       [html] view plaincopy
  1. <!DOCTYPE 根节点[
  2. .........
  3. ]>

2.XML文件中导入DTD文件

此种方式需要考虑两个情况:

(1)如果是本地文件,则:

        [html] view plaincopy
  1. <!DOCTYPE 根节点 SYSTEM "dtd的URL">

此处的URL指的是比如 "F:\1.dtd"

(2)如果是共享文件,则:

[html] view plaincopy
  1. <!DOCTYPE 根节点 PUBLIC "dtd名称" "dtd的URL">

三、DTD语法

在DTD中可以定义XML标签的顺序、个数,属性的值,实体;

1.XML元素定义

语法如下:

<!ELEMENT 元素名称 元素类型>        //定义元素的类型,但是只能是 ANY(表示任意类型)或EMPTY(空元素);

<!ELEMENT 元素名称 (元素内容)>    //定义元素的内容,一定要加上();

对于元素内容

----可以定义子元素的名称,比如:

<!ELEMENT 元素名称 (子元素1,子元素2,子元素3)> 表示3个子元素只能出现一次,并且按照此顺序出现;

<!ELEMENT 元素名称 (子元素1|子元素2|子元素3)> 表示3个子元素中只能出现一个;

我们还可以定义子元素的个数,比如:

(1)+:1次或多次;比如 (name+)表示此name元素只能出现1次或多次。

(2)?:0次或1次;比如(name?)表示此name元素只能出现0次或1次。

(3)*:0次或多次;比如(name*)表示此name元素任意出现几次。

(4)无:只能一次;比如(name)表示此name元素只能出现1次。

对于元素内容,

----也可以定义子元素内容的类型,比如#PCDATA,表示字符串;

举例:

[html] view plaincopy
  1. <!DOCTYPE personlist [    <!-- 根节点为personlist-->
  2. <!ELEMENT personlist (person+)>    <!-- personlist的子元素为person,并且可以出现1次或多次-->
  3. <!ELEMENT person (name,age,salary)>    <!-- person的子元素是name,age,salary,并且可以出现一次,并且出现顺序以此顺序为准-->
  4. <!ELEMENT name ANY>    <!--name可以使任意类型 -->
  5. <!ELEMENT age (#PCDATA)>    <!-- age可以是字符串-->
  6. <!ELEMENT salary (#PCDATA)>    <!-- salary可以是字符串-->
  7. ]>

从以上可以看出,DTD不可以定义数字等类型,此为DTD的缺陷;

2.XML属性定义

语法如下:

<!ATTLIST 标签名

属性名1        属性类型        属性说明

属性名2        属性类型        属性说明

>

属性类型可以是

(1)CDATA:最普通的字符串;

(2)枚举,即(值1|值2|值3),需要括号

(3)ID:属性值需要以字母或下划线开头;

属性说明可以是:

(1)#REQUIRED:必须设置;

(2)#IMPLED:可选值,即此属性可以设置,也可以不设置;

(3)#FIXED:固定值,通常语法为:#FIXED  "固定值"

(4)默认值;

举例:

[html] view plaincopy
  1. <!DOCTYPE personlist [
  2. <!ELEMENT personlist (person+)>
  3. <!ELEMENT person (name,age,salary)>
  4. <!ELEMENT name ANY>
  5. <!ELEMENT age (#PCDATA)>
  6. <!ELEMENT salary (#PCDATA)>
  7. <!ATTLIST person
  8. aaa CDATA #REQUIRED        <!-- -->
  9. bbb CDATA #IMPLIED         <!-- 可选属性-->
  10. ccc CDATA #FIXED "xiazdong" <!--固定值,不需要设置 -->
  11. ddd CDATA "XZDONG"         <!--默认值为"XZDONG", 可以自己设置 -->
  12. eee ID #REQUIRED             <!--ID -->
  13. fff (1|2|3) "1"                         <!--枚举值,默认为1 -->
  14. >
  15. ]>

3、XML实体定义

实体类似于一个可重用常量,或者说是ant中的classpath,可以被引用;

语法如下:

<!ENTITY 实体名称  "实体内容">

引用实体语法:
&实体名称;    注意:最后的“;”一定需要;

注意:引用实体必须在XML中引用;

举例:

[html] view plaincopy
  1. <!DOCTYPE personlist [
  2. <!ENTITY constant "aaaa">
  3. <!ELEMENT personlist (person+)>
  4. <!ELEMENT person (name,age,salary)>
  5. <!ELEMENT name ANY>
  6. <!ELEMENT age (#PCDATA)>
  7. <!ELEMENT salary (#PCDATA)>
  8. ]>
  9. <personlist>
  10. <person >
  11. <name>&constant;</name>        <!-- 引用constant实体-->
  12. <age>aaa</age>
  13. <salary>aaa</salary>
  14. </person>
  15. </personlist>

小知识点:根据XML自动生成DTD

因为一般我们写的XML基本都是没有DTD的,如果要自己写DTD,又很麻烦,因此我们可以通过工具来自动生成:trang

功能:能够完成如下转换:

(1)XML ---> DTD

(2)XML --->XSchema

(3)DTD--->XSchema

使用方法:

java -jar trang.jar -I xml -O dtd input.xml output.dtd 即可;

-I xml 表示输入为xml;

-O dtd表示输出为dtd文件;

input.xml表示输入文件;

output.dtd表示输出文件;

XML —— DTD介绍相关推荐

  1. XML DTD 语言学习笔记

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

  2. Tomcat server.xml配置文件介绍

    一.server.xml文件介绍 1.server.xml作用     Server.xml配置文件用于对整个容器进行相关的配置. 2.server.xml文件的配置元素列表 <Server&g ...

  3. XML Schema介绍之namespace

    http://www.cnblogs.com/gzhnan/articles/1108442.html http://blog.csdn.net/zhch152/article/details/819 ...

  4. java解析document_java 值Document解析xml详细介绍

    java 值Document解析xml详细介绍 使用jar包:jdom.jar 配置文件格式 global.xml 一.获取输入的值组成的结点 我们将每个结点使用"." 拼接起来, ...

  5. XML DTD Schema 学习-Schema 介绍

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

  6. XML注入介绍--XXE,XEE,xpath等

    XML注入指在请求的XML中插入攻击利用代码.根据不同的场景,可能会形成以下的漏洞形式: (1)XEE ----xml entity xpansion(xml实体膨胀,用于dos) 具体介绍:http ...

  7. XML DTD 简介

    DTD 简介 一.介绍 文档类型定义(DTD)可定义合法的 XML 文档构建模块.它使用一系列合法的元素来定义文档的结构. DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. 为什么使用 ...

  8. XML的介绍和PHP对XML的应用

    一.小序 HTML简单易学又通用,一般的PHP程序就是嵌入在HTML语言之中实现的.但是随着WEB越来越广泛的应用,HTML的弱点也越来越明显了.XML的出现,弥补了这些不足,它提供了一个能够处理互联 ...

  9. Mybatis中的核心配置文件SqlMapConfig.xml详细介绍

    一.properties(属性) 可以引用java属性文件中的配置信息如下 jdbc.properties代码如下: jdbc.driver=com.mysql.jdbc.Driver jdbc.ur ...

最新文章

  1. hibernate 第三天
  2. vue脚手架和html,HTML和静态资源
  3. redis源码之字符串压缩
  4. Android Studio 使用Lambda
  5. CodeSmith输错license后的解决办法
  6. Android自定义圆形进度条
  7. 笔记-信息化与系统集成技术-工作流
  8. linux下Eclipse+CDT开发环境配置与使用
  9. android 片段,android – 将片段添加到片段中(嵌套片段)
  10. 【前缀和】【DP】登机(jzoj 5535)
  11. 中介者模式分析、结构图及基本代码
  12. JSTL标签库中fmt标签,日期,数字的格式化
  13. vSphere Esxi5.1 创建共享磁盘
  14. 魔兽世界账号与服务器的关系,账号整合不用烦 《魔兽世界》角色转移问题一览...
  15. python settings模块导入不了_Django:无法导入“模块”。检查模块AppConfig.name是否正确 - python...
  16. 20155226 实验三 敏捷开发与XP实践 实验报告
  17. Visual Studio Code编辑器的实用插件和工作中实用的技巧
  18. web开发网页嵌入flash
  19. 字符串排序算法:低位优先排序(LSD)
  20. Android大赛首轮获奖作品解析

热门文章

  1. requirejs(shim)处理加载非AMD规范的js库
  2. GetModuleHandle(NULL)获取当前DLL模块基址?
  3. Android成长日记-使用GridView显示多行数据
  4. VScode新建自定义模板快捷方式
  5. 控制台添加log4net
  6. Http的持久连接和管线化
  7. 剑指Offer--青蛙跳台阶引发的一系列问题
  8. asp.net与JAVASCRIPT函数的相互调用
  9. 训练(线段树+树状数组) poj——3264
  10. vue 集成html5 plus - 懒懒de尐彪 - 博客园