1、使用DTD的好处
v 用DTD提供统一格式。例如,用DTD规定个人简历文档的逻辑结构,包括所需填写内容和内容排列方式,所有按照这个DTD编写的个人简历都将具有统一格式。
v 用DTD验证数据有效性。DTD约束文档逻辑结构,可以根据DTD检查数据,验证其是否符合规定要求,确保数据正确和有效。
v 根据DTD编写文档样式单。DTD能在不提供原始资料的情况下,表示出一个网页或文档的架构元素,这意味着用户能先根据DTD为未来的文档编写样式单,然后再安全且不破坏结构的把用户的资料放上去,提高工作效率。
2、Dtd文档的基本格式
内连接格式:
<?xml version=”1.0 encoding=”utf_8” standalone=”true”?>
<!DOCTYPE 根标记的名称[约束]> 内部DTD
外连接格式:
<!DOCTYPE 根标记的名称 SYSTEM “dtd1.dtd”> dtd的引入
格式:<根标记>
<字标记>
</字标记>
………..
</根标记>
3.DTD对元素声明及应用:
. Dtd1.dtd的定义能在xml文档出现的元素、属性、xml文档的结构
Dtd的格式:
<?xml version=”1.0” encoding=”utf_8”?>
<!ELEMENT 元素的名称 元素的内容>
<!ATTLIST 元素名 属性名 类型keyword “默认值”> 对属性的设置
· (1)空元素即为单标记 <br/> 或者 <br></br> 两者形式一样,但不能加空格 用EMPTY修饰
(2)ANY型的,因为约束是对文件进行规范的,所以any相对来说没有任何意义。可以成为无效的文件
有效的XML文档的所以属性都必须在约束中声明才为有效的文档
(3)定义字符串内容的元素
<!ELEMENT 元素名 #PCDATA>
<!ELEMENT 书籍列表 (#PCDATA)>
(4)混合类型内容的元素-1------既有字符串内容,又有子元素的
但一般并不推荐使用这个元素
<!ELEMENT 学生 (#PCDATA|学号|姓名)*>
注: | 和* 一起表示出现多次,而且是无序的,可以出现多次,而且文本出现的顺序是任意的
例子:
<?xml version=”1.0” encoding=”utf_8”?>
<喜欢的游戏>
这是我喜欢的游戏
<游戏>
CF游戏好玩
<游戏类型>463</游戏类型>
<游戏名称>4trt</游戏名称>
CF游戏好玩
<游戏类型>rewtre</游戏类型>
<游戏名称>l;lkjhgfds</游戏名称>
</游戏>
</喜欢的游戏>
混合类型内容的元素2-------包含的不是文本,也是子元素
<!ELEMENT 学生 (学号,姓名)*> * 代表0次或多次
(5)定义子元素
有序的子元素
互斥的子元素
根据出现的频率来定:
有序的子元素的例子:
<书籍列表>
<计算机书籍>
<书名>顺利度过</书名>
</计算机书籍>
<计算机书籍>
<价格>顺利度过</价格>
</计算机书籍>
</书籍类表>
4、DTD对属性声明
属性是描述元素的额外信息的,是对元素的修饰与补充。一般来说,信息详实的XML文档都是一个特点,即元素通过属性来描述边缘信息。
在 DTD 中,属性通过 ATTLIST 声明来进行声明。一个属性声明可以声明一个元素的多个属性。
(1)对属性声明的格式:<!ATTLIST 元素名 属性名 属性类型 keyword “默认值”>
<!ELEMENT作者 地址 CDATA #FIXED “保定市”>
注: #FIXED “保定市 可设,可不设,系统默认
(2) 对属性的限制条件:
# CDATA 纯文本的的类型
# IMPLIED 可选的
# FIXED “保定市” 指定固定值
# PEQUIRED 必须为该属性指定默认值
# LMMPLIED 不指定默认值
#PCDATA
(3)属性的类型:
1、CDATA 字符串数据
2、(en1|en2…..) 枚举类型
例子:<!ATTLIST 作者 性别(男|女) “男”> 默认值
3、ID 标识符必须是唯一的
例子:<!ATTLIST 计算机书籍 ID # REQUIRED>
4、IDREF 该值必须为另外一个的属性值
例子:<!ELEMNT 书籍列表 (计算机书籍 | 读者)>
<!ELEMENT 读者 EMPTY>
<!ATTLIST 读者 书号 IDREF # IMPLIED > # IMPLIED表示可选的
5、IDREFS 表示可引用多个id值
<!ATTLIST 读者 书号 IDREFS # IMPLIED >
<读者 书号=“0001_0002”>
6、NMTOKEN 和 NMTOKENS类
NMTOKEN 和CDATA类型相比, NMTOKEN要求严格
例子:
<!ATTLIST 地址 NMTOKEN # PEQUIRED>
NMTOKENS可以取多个合法的元素
5、实体的定义-------ENTITY ENTITIES 类型的
(1)实体的概念:实体是包含了文档片段的虚拟存储单元,可用来存储XML声明、DTD其他形式的文本及二进制数据等。简单来讲就是一段代码或数据的代称,这个代称即为实体
的名字。
(2)实体引用:是用一个字符串代替另一个字符串。
(3)实体的引用例子: conent “java书籍的详细内容的介绍”
<书名>conten</书名> 用content来代替字符串的内容,减少麻烦
(4)实体引用的作用:
Ø 实体定义的作用:提高代码的服用,方便修改,维护XML文档
Ø 使用某些特殊的符号,这些特殊的符号可能会使XML解析器混淆
Ø 减少字符输入量,如果某个字符串特别长,而且需要经常使用,则可以定义为实体
(5)实体的分类:可解析的实体和不可解析的实体
1、按照实体的具体内容分类
可解析的实体:可解析实体的具体内容为简单的字符、数字、文本块。
不可解析的实体:具体内容则为图片、声音等二进制文件。
注:一般情况下都为不可解析的实体
2、按照逻辑存储分类:
内部实体和外部实体
以下都是内部实体
3、按使用范围分:
一般实体和参数实体:
一般(普通)实体的定义的语法--------在xml文档中使用:
<!ELNTITY 实体名 “实体值”>
使用实体时:&实体名;
注意:实体是在dtd中定义的
普通实体可以作为属性来表示
<!ATTLIST 简要介绍 connect >
<简要介绍 connect=”&title”> 引用实体当做属性
可以是元素
<简要介绍>&实体名</简要介绍>
参数实体------在dtd文档中使用,对dtd中的属性设置:
语法:
<!ENTITY %实体名 “实体值“>
使用:&实体名
<!ENTITY % boolean “yes|no|true|false”>
<!ATTLIST 作者 性别 (%boolean;)>
两者不同:
一般实体 用于xml文档中 % 实体名 ““ % 实体名;
参数实体 用于dtd文档中 实体名 ““ &实体名;
外部实体:
在dtd中定义
<!ELEMENT out SYSTEM “文档名称“>
<!ELEMENT out SYSTEM “extententity.txt“> out代替了文本中的内容
对外部实体的引用 : <简要介绍>&outer;</简要介绍>
注:元素的定义用ELEMENT
属性的定义用ATTLIST