`
阅读更多
DTD详解
DTD全称为decument type definition,它是文档类型定义,其中规定XML文档中的元素、属性、标记、文档中的实体及其相互关系。DTD为XML文档结构制定了一套规则。

DTD采用了非XML的语法描述语义约束,可以提供如下功能:

1、 DTD可以为应用程序提供一种统一的XML文档格式
2、 DTD有助于数据交流与共享
3、 DTD可以使用脱离实际数据就能知道文档的逻辑结构
4、 DTD可以验证数据的有效性
5、 通过使用DTD可以让每个XML文件带有一个有关其自身的格式描述
6、 不同的公司、组织可一致的使用某个标准的DTD来交换数据
7、 应用程序也可以使用某个标准的DTD验证所介绍的XML文档是否符合语义约束
8、 开发者可以使用DTD来验证所创建的XML文档

DTD约束包括以下几个方面

1、 定义XML的根元素、内容和结构
2、 定义XML文档中可以接受哪些元素
3、 定义XML文档里每个元素接受的合法内容 包括是否可以为空、是否可以是文本、可以接受哪些子元素、子元素出现的顺序及子元素出现的次数等
4、 定义XML文档中每个元素能接受哪些属性
5、 定义XML文档中每个属性的类型、能接受哪些值以及元素对属性的约束等
6、 定义属性的固定值和默认值
7、 定义XML文档以及DTD文档中可以使用的实体

注:一个合法的文档必须符合DTD指定的约束条件,而且它的基本元素必须是在文档类型声明中指定的。只有符合DTD规则的XML文档才是有效地文档。

引入DTD的方式:
1、内部引用方式
2、外部引用方式
其中外部引用方式可划分为两种即SYSYTEM引用方式、PUBLIC引用方式。

下面我们逐一介绍DTD的引用方式

首先介绍  内部DTD
DTD语义约束与xml文档的内容放在同一个XML文档中。内部DTD紧跟在XML声明和处理指令之后,以”<!DOCTYPE “开始,以”]>”结束。其语法格式如下
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 根元素名[
元素描述[DTD的内容]
]>
XML文档主体部分

案例一
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE book[
<!ELEMENT book (computer)*>
<!ELEMENT computer (book_name,price,author)>
<!ELEMENT book_name(#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
<book>
<computer>
<author>redarmychen</author>
<book_name>JavaWeb开发</book_name>
<price>30.0</price>
</computer>

<computer>
<book_name>CSS应用程序的开发</book_name>
<price>1000</price>
<author>redarmy_Chen</author>
</computer>

</book>

案例分析:
第一行 XML声明语句中的standalone属性取”yes” 值 表示所有必须的实体声明都包含的文档中 说明该文档是独立文档。
第二行声明DTD约束
第三行 定义book元素有多个相同的元素即 computer元素
第四行定义computer元素中有三个元素:book_name、price、author
第五行定义book_name元素为 #PCDATA类型
第六行定义price元素为 #PCDATA 类型
第七行定义author元素为 #PCDATA 类型
第八行为声明的结束标志
后面是描述book信息的XML文档
外部DTD
1、SYSTEM引用方式   语法格式表示如下

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 根元素名 SYSTEM "外部的DTD的URL地址">、

注:SYSYTEM 、DOCTYPE是关键字 必须要大写
URL路径可以是相对路径也可以是绝对路径
该语句必须出现在XML文档的序言区
案例二
包含DTD的book.dtd文件
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT book (computer)*>
<!ELEMENT computer (book_name,price,author)>
<!ELEMENT book_name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>

拥有外部DTD的XML文档
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE book SYSTEM "book.dtd">
<book>
<computer>
<book_name>JavaWeb开发</book_name>
<price>30.0</price>
<author>redarmychen</author>
</computer>

<computer>
<book_name>CSS应用程序的开发</book_name>
<price>1000</price>
<author>redarmy_Chen</author>
</computer>

</book>
案例分析:book.dtd 文件与案例一大似相同在此不作讲解。
XML中standalone的值设置为”no”  这是因为XML文档不是独立的需要外部的实体声明。

2、PUBLIC引用方式   语法格式表示如下

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 根元素名 PUBLIC  "DTD的标识名"  "公用的DTD的URL地址">

注:
PUBLIC为关键字 必须大写 并表明该外部DTD具有名称
"DTD的标识名"为XML文档所引用的外部公共DTD的名称
"公用的DTD的URL地址"为外部DTD文件的路径,含义与SYSTEM引用方式中的”DTD_URL”一致
该语句必须出现在XML文档的序言区

使用DTD声明XML元素
DTD的文档结构如下:
第一行是DTD声明部分 该声明与xml文档的生命语法格式相同
0到多个注释部分,DTD注释与xml文档的注释完全相同
0到多个<!ELEMENT…..>定义 每个它就是一个xml元素
0到多个<!ATTLIST…..>定义每个它就是一个xml元素的属性
0到多个<!ENTITY…..>定义每个它就是一个实体
0到多个<!NOTATION…..>定义 每个它定义一个符号
彼此之间完全独立,无须相互嵌套。

一、 定义元素
元素类型的定义的全称是:Element Type Defintion,简称ETD,它不但会定义每个文件中可能存在的元素,给元素的名称,而且会定义元素的具体类型。
元素类型描述主要有5种
1、任意类型(可以是以下四种类型)语法格式  <!ELEMENT 元素名 ANY>
2、字符串值
3、空元素<br/>
4、包含子元素
5、混合类型

<!--任意类型   无效的XML文档但是格式良好的XML文档-->

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book ANY>
]>


<!--定义字符串内容的元素-->
格式:<!ELEMENT 元素名 (#PCDATA)>

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT book (computer)*>
<!ELEMENT computer (book_name,price,author)>
<!ELEMENT book_name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>



<!--空元素   有效的XML文档-->
<!ELEMENT 元素名 EMPTY>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book EMPTY>
]>



<!--定义混合内容-->
<!ELEMENT 父元素名(#PCDATA|子元素1|子元素2|子元素3|........)*>  并不是互斥
|无序的重复出现 出现的次数不受限制

注意:1、#PCDATA必须放在最前面
2、#PCDATA只能用|与各个子元素分隔
3、不要试图在各个子元素之后添加?、*、+等表示频率的修饰符

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book (computer)*>
<!ELEMENT computer (#PCDATA|book_name|price|author)>
<!ELEMENT book_name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
<book>
<computer>
<book_name>JavaWeb开发</book_name>
<price>30.0</price>
<author>redarmy_chen</author>
</computer>

<computer>
<book_name>CSS应用程序的开发</book_name>
<price>1000</price>
<author>redarmy_Chen</author>
</computer>
</book>


<!--定义子元素-->
1、 有序的子元素(,)
(,)用于分隔有序的子元素
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book (computer)*>
<!ELEMENT computer (book_name,price,author)>
<!ELEMENT book_name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
<book>
<computer>
<book_name>JavaWeb开发</book_name>
<price>30.0</price>
<author>redarmychen</author>
</computer>

<computer>
<book_name>CSS应用程序的开发</book_name>
<price>1000</price>
<author>redarmy_Chen</author>
</computer>
</book>
解析:book_name、price、author三者之间的循序不能颠倒

2、 互斥的子元素
互斥的子元素表明一系列的子元素中只能出现其中之一。
用(|)符号表示
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book (computer)*>
<!ELEMENT computer (book_name|price|author)>
<!ELEMENT book_name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
<book>
<computer>
<book_name>JavaWeb开发</book_name>
</computer>

<computer>
<price>30</price>
</computer>

<computer>
<author>redarmy_Chen</author>
</computer>
</book>
解析:book_name、price、author只能出现一个

3、 子元素出现的频率
+: 一次或多次 (书+)
?: 0次或一次 (书?)
*: 0次或多次  (书*)
注意:混合类型的频率只能安如下方式加:
<!ELEMENT computer (#PCDATA|book_name|price|author)*>
//#PCDATA以它开头的是混合类型 频率只能在最后加
4、 组合子元素
<!ELEMENT computer (book_name|price|author)>

5、 无序的子元素

二、 定义属性
<!ATTLIST属性所属元素  属性名  属性类型[元素对属性的约束][默认值]>
元素对属性的约束|默认值是可选的对于它们的使用有如下的情况:
1、 在没有指定”元素对属性的约束”时,必须为该属性增加默认值。
2、 在元素对属性的约束是:#REQUIRED时,不能为该属性指定默认值。
3、 在元素对属性的约束是:#IMPLIED时,不能为该属性指定默认值
4、 在元素对属性的约束是:#FIXED时,必须为该属性指定默认值
#REQUIRED:必须的属性
#IMPLIED:可有可无
#FIXED:固定值

属性类型
类型 说明
CDATA 字符串数据 character data
(e1|e2|e3) 该属性是一系列枚举值之一
ID Id必须是唯一的
IDREF 引用自己已经定义的id
IDREFS 空格区分多个id
ENTITY 是一个外部的实体
ENTITIES 多个外部实体,多个外部实体之间用空格分隔
Xml: 预定义的xml值
案例三
<水果 品名=”苹果” 颜色=”绿色”>关于水果的元素</水果>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 购物车[
<!ELEMENT 购物车 (肉*,水果*,玩具)>
<!ELEMENT 肉 EMPTY>
<!ELEMENT 水果 EMPTY>
<!ELEMENT 玩具 EMPTY>

<!ATTLIST 肉 类型 (鸡肉|牛肉|狗肉) #REQUIRED>
<!ATTLIST 水果  类型  (苹果|梨|香蕉) #IMPLIED>
<!ATTLIST 玩具 类型  CDATA #FIXED "地雷">
]>

<购物车>
<肉 类型="狗肉"/>
<水果/>
<玩具 类型="地雷"/>
</购物车>

案例解析:地雷为固定的不可改变的 不写也行 ,水果中的元素可有可无,而肉中的元素必须有其中之一。

三、 定义实体
所谓实体就是用一个字符串代替另一个字符串
作用:
1、提高代码复用、方便修改
2、使用某些特殊的符号
3、减少字符输入量
实体:引用实体和参数实体

引用实体:语法格式  <!ENTITY  实体名  “实体值”>
使用实体  &实体名;
注:引用实体必须以“&“符号开始,以“;”结束。

案例四
包含DTD的outherdtd.dtd文件
<?xml version="1.0" encoding="UTF-8"?>
     <!ELEMENT books (book*)>
     <!ELEMENT book (book_name,author,price,state)>
    
     <!ELEMENT book_name (#PCDATA)>
     <!ELEMENT author (#PCDATA)>
     <!ELEMENT price (#PCDATA)>
     <!ELEMENT state (#PCDATA)>
  
     <!ENTITY % boolean "yes|no|true|false">
    
     <!ATTLIST state islast (%boolean;) #IMPLIED>
    


    
     <!ENTITY javaname "JAVA编程精炼的最好的世界最牛书">
<!ENTITY outer SYSTEM "test.txt">

拥有外部DTD的XML文档
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE books SYSTEM "outerdtd.dtd">
<books>
<book>
<book_name>&javaname;</book_name>
<author>redarmy_chen</author>
<price>&outer;</price>
<state>暂无销售</state>
</book>
</books>

案例解析:引用了外部dtd文件 &javaname; 相当于dtd文件中javaname 的值即"JAVA编程精炼的最好的世界最牛书


参数实体:语法格式 <!ENTITY   %实体名     “实体值”>
另一种格式<!ENTITY  % 实体值名称   SYSYTEM   “外部XML文档的URL”>
案例五
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
<!ELEMENT books (book*)>
<!ELEMENT book (book_name,author,price,state)>

<!ELEMENT book_name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT state (#PCDATA)>

<!ENTITY %boolean "yes|no|true|false">

<!ATTLIST state islast (%boolean;) #IMPLIED>

<!ENTITY javaname "JAVA编程精炼的最好的世界最牛书">
]>

<books>
<book>
<book_name>JAVA编程精炼的最好的世界最牛书</book_name>
<author>redarmy_chen</author>
<price>1</price>
<state>暂无销售</state>
</book>

<book>
<book_name>&javaname;</book_name>
<author>m_j</author>
<price>1000</price>
<state islast="yes">10000</state>
</book>

<book>
<book_name></book_name>
<author></author>
<price></price>
<state></state>
</book>
</books>
案例解析:<!ENTITY % boolean "yes|no|true|false">  表示实体值为yes、no、true、false
<!ATTLIST state islast (%boolean;) #IMPLIED>  含义是  引用实体表示书是不是最后一本,  #IMPLIED表示可有可无。

分享到:
评论

相关推荐

    XML的DTD详解

    XML的DTD详解,介绍了现今DTD的发展和使用,详细介绍了使用技巧和方法!!!

    DTD验证XML详解

    很好的一个关于DTD验证XML的一些文档,内容丰富。需要了解的速速下载

    XML Schema .ppt

    全面介绍 xml schema 数据类型

    DTD文件详解

    关于针对DTD文档的各种节点定义的属性和注意事项,及易错点。

    Java Web开发详解:XML+DTD+XML Schema+XSLT+Servlet3.0+JSP2.2深入剖析与实例应用/孙鑫编著

    鑫编写的《Java Web开发详解——XML+DTD+XML Schema+XSLT+Servlet3.0+JSP2.2深入剖析与实例应用》共分4篇,从XML、XML Schema、XSLT、Servlet、JSP和应用的角度向读者展示了Java Web开发中各种技术的应用,循序渐进...

    web.xml详解(web-app_2_3.dtd)

    部署描述文件web.xml详解(web-app_2_3.dtd),全面介绍: 1. icon元素 2. display-name元素 3. description元素 4. distributable元素 5. context-param元素 6. filter元素 7. filter-mapping元素 8. ...

    mybatis-3-mapper.dtd 和 mybatis-generator-config_1_0.dtd

    博客原文的2个资源文件 博客:https://blog.csdn.net/gt18120588267/article/details/106190484 资源:mybatis-3-mapper.dtd 和 mybatis-generator-config_1_0.dtd

    web开发详解2

    web开发详解2

    XML结构参数详解

    XML结构,组成相册介绍。DTD声明,组成结构。

    Struts配置详解.doc

    Struts配置文件详解 web.xml、struts-cofig.xml以及struts-cofig.xml中各个标签的作用。 Struts应用采用两个基于XML的配置文件来配置,分别是web.xml和struts-cofig.xml文件.web.xml文件是配置所有web应用的,而...

    struts配置元素详解

    Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"&gt; path="" attribute="" type="" name="" scope="" validate="" input=...

    2023年hibernate知识点详解王成敏.doc

    Hibernate 知识点详解 Hibernate 是一个流行的 ORM(Object-Relational Mapping)框架,用于 Java 应用程序的持久层解决方案。下面是 Hibernate 知识点的详解: Hibernate 概述 Hibernate 是一个轻量级的 Java EE...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    第1章 xml与dtd 2 1.1 xml的产生 2 1.2 w3c介绍 2 1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    第1章 xml与dtd 2 1.1 xml的产生 2 1.2 w3c介绍 2 1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5...

    Mybatis Generator配置详解.md

    ## Mybatis Generator配置详解 一、简介 mybatis-geneator是一款mybatis自动代码生成工具,可以通过配置,快速生成mapper和xml文件。 二、配置方法 在项目的pom文件中添加插件配置 ```java &lt;groupId&gt;org....

    web.xml详解

    定义头和根元素 部署描述符文件就像所有XML文件...这个声明告诉服务器适用的servlet规范的版本(如2.2或2.3)并指定管理此文件其余部分内容的语法的DTD(Document Type Definition,文档类型定义)。 .................

    asp+mysql数据库连接配置详解_.docx

    ASP+MySQL数据库连接配置详解 本文详细介绍了ASP+MySQL数据库连接配置的相关知识点,涵盖了配置ODBC数据源、不同的数据验证方式、MySQL数据库中的数据类型差异、ASP源代码编写等方面的内容。 一、配置ODBC数据源 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    第1章 xml与dtd 2 1.1 xml的产生 2 1.2 w3c介绍 2 1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5...

    Linux下ifconfig命令详解.pdf

    Linux下ifconfig命令详解.pdf

    android安装apk详解归类.pdf

    android安装apk详解归类.pdf

Global site tag (gtag.js) - Google Analytics