二、DTD文档定义类型

1、DTD(document type definition 文档类型定义):

1) DTD 是一套关于标记符的语法规则。它是XML1.0版规格的一部分,是XML文件的验证机制,属于XML文件组成的一部分。
2) DTD 是一种保证XML文档格式正确的有效方法,可以通过比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能够成为数据交换的标准,因为不同的公司只需定义好标准的DTD,各公司都能够依照DTD建立XML文件,并且进行验证,如此就可以轻易的建立标准和交换数据,这样满足了网络共享和数据交互。
3) DTD文件是一个ASCII的文本文件,后缀名为.dtd

该文件一般和xml文件配合使用,主要作用是约束 xml,除了dtd技术外还有一个schema的技术用于去约束xml文件的书写规范。

derived:起源、由来

2、DTD文档的声明及三种引用方法:
1)内部DTD文档(这个用的人很少)
  <!DOCTYPE 根元素 [定义内容]>
2)外部DTD文档(经常使用的是外部dtd文档)
    <!DOCTYPE 根元素 SYSTEM "DTD文件路径">
3)内部DTD文档结合
    <!DOCTYPE 根元素 SYSTEM "DTD文件路径"
     定义内容
    >  (这个几乎就没有人用)

【DTD元素定义语法】

<!EMEMENT 元素名称 类型>
其中类型包括:EMPTY,ANY,#PCDATA
EMPTY:该元素不能包含子元素和文本,但是可以有属性。(空元素)
ANY:该元素可以包含任何在DTD中定义的元素内容
#PCDATA:可以包含任何的字符数据,但是不能再其中包含任何子元素其他类型(组合)

|示例|

<!ELEMENT 班级 (学生+)>
<!ELEMENT 学生 (名字,年龄,介绍)>
<!ELEMENT 名字 EMPTY>                        <name>小张</name> 会报错   <name/> 正确
<!ELEMENT 年龄 (#PCDATA)>
<!ELEMENT 介绍 ANY>

 

DTD文件中不同修饰符的含义

【DTD属性定义语法】

<!ATTLIST 元素名称
   属性名称 类型 属性特点
   属性名称 类型 属性特点
>

属性的类型包括
1) CDATA:(character data)表示的是普通类型 ,也就是说表示可以放文本(数字和中文);
2) ID:        表示该属性的取值必须是唯一的  备注id类型的属性的值不能以数字开头,一般以英文开头。
3) IDREF/IDREFS:表示属性的值指向文档中其他地方声明的ID类型的值 也就是说当一个元素的属性值,需要去引用另外一个id,则使用IDREF,如果希望引用多个,则使用IDREFS 且属性的值用空格隔开即可;
4) Enumerated:表示的是枚举意思 表示属性的值必须在所列出的指的范围内。
5) ENTITY/ENTITIES  :表示的是实体的意思;实体:用于为一段内容创建一个别名,以后再xml文档中,就可以使用别名引用这段内容了。dtd文件中的引用实体是用来给xml文件用的,而参数实体是在dtd文件本身中使用的;

备注:

DTD中如何定义引用实体: <!ENTITY 实体名称 "实体内容">    直接转变成实体内容引用方式    引用实体是给xml用的
xml中如何调用引用实体:&实体名称

DTD中如何定义参数实体: <!ENTITY % 实体名称 "实体内容"> 参数实体给DTD文件自身用
DTD中如何调用参数实体:%实体名称

属性的特点包括
#REQUIRED      :表示必须给属性的赋值
#IMPLIED          :(暗示的意思)表示属性的值可有可无
#FIXED "value"  :表示属性的值必须是指定的value值
Default "value"   : 表示如果不指定,则默认

【实体的定义】

 

|示例:内部DTD文档使用|

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE poem [
 <!ELEMENT poem (author,title,content)><!--poem和(之间必须有空格否则会报错提示:缺少所需的空白区 -->
 <!ELEMENT author (#PCDATA)>
 <!ELEMENT title (#PCDATA)>
 <!ELEMENT content (#PCDATA)>
]>
<poem>
 <author>王维</author>
 <title>鹿柴</title>
 <content>
  空山不见人,但闻人语声;
  反景入深林,复照青苔上。
 </content>
</poem>

 

|示例:外部DTD文档使用|   引用实体一般在写在dtd文件的最后,在xml文件中进行使用 &实体名;

MyClass1.dtd文件内容:
<!ELEMENT 班级 (学生*)>   <!--*表示该对象允许出现0次到多次-->
<!ELEMENT 学生 (名字,介绍,年龄)>   <!--表示对象必须按照指定的顺序出现-->
<!ATTLIST 学生
 地址 CDATA #REQUIRED
 学号 ID #REQUIRED
 大哥 IDREF #REQUIRED
 性别 (男|女) #REQUIRED
>
<!ELEMENT 名字 (#PCDATA)>
<!ELEMENT 介绍 (#PCDATA)>
<!ELEMENT 年龄 (#PCDATA)>
<!ENTITY myCopy "我的标志性特征">

MyClass1.xml文件内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 班级 SYSTEM 'MyClass1.dtd'><!--dtd文件的路径用单引号或者双引号都行 -->
<班级>
 <学生 地址="北京" 学号="001" 大哥="002" 性别="男">
  <名字>张三</名字>
  <介绍>很帅</介绍>
  <年龄>27</年龄>
 </学生>
 <学生 学号="002" 性别="女" 地址="山西" 大哥="002">
  <名字>王五</名字>
  <介绍>大哥范  &myCopy;</介绍> <!--引用实体的后面必须用;进行分割 -->
  <年龄>30</年龄>
 </学生>
</班级>  

|示例:DTD文档中参数实体的使用|   参数内部实体相当于DTD代码段的声明

MyClass2.dtd文件中的内容

 <!ELEMENT 班级 (学生*)>
<!ENTITY % myname "名字">
<!ELEMENT 学生 (名字,介绍,年龄)>
<!ATTLIST 学生
 地址 CDATA #FIXED "北京"
 学号 ID #REQUIRED
 大哥 IDREF #REQUIRED
 性别 (男|女) #REQUIRED
>
<!ELEMENT %myname; (#PCDATA)><!--此处正常应该写:名字,但是由于在参数实体中进行了定义,所以此写成%myname也是可以的 -->
<!ELEMENT 年龄 (#PCDATA)>
<!ELEMENT 介绍 (#PCDATA)>
<!ENTITY mycopy "我的公司版权"> 

MyClass2.xml文件中的内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE  班级 SYSTEM "MyClass2.dtd">
<班级>
 <学生 地址="海南" 学号="003" 大哥="001" 性别="男">
  <名字>小熊</名字>
  <介绍>很嚣张</介绍>
  <年龄>23</年龄>
 </学生>
 <学生 性别="女" 学号="sp001" 大哥="sp002 spoo1" 地址="北京">
  <名字>小样</名字>
  <介绍>比较熊  &mycopy;</介绍>
  <年龄>23</年龄>
 </学生>
</班级>

 

posted @ 2016-12-31 13:44  爱笑的berg  阅读(980)  评论(0)    收藏  举报