DTD学习笔记

1.dtd定义
(1)dtd:文档类型定义(document type definition)
(2)作用:定义xml文档的合法构建模块。
(3)dtd可以被声明在xml文档中,也可以单独的声明在xml文档外部,然后引入到xml文档中
2.dtd在xml文档内部声明
(1)当dtd文件被包含在xml文档中时,需要通过下面的声明方式包装在<!DOCTYPE>中:

<!DOCTYPE 根元素 [元素的声明]>

例子如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE area [
	<!ELEMENT area (areaId,areaName,population)>
	<!ELEMENT areaId (#PCDATA) >
	<!ELEMENT areaName (#PCDATA) >
	<!ELEMENT population (#PCDATA) >
] > 
<area>
	<areaId>10510508</areaId>
	<areaName>天山</areaName>
	<population>4000</population>
</area>

上面的代码中第二行定义了该document为area类型,用了<!DOCTYPE >其中DOCTYPE必须大写
第三行定义了该area类型根节点中有三个子节点元素,分别是areaId,areaName,population
第4,5,6行分别定义areaId,areaName,population的类型都是#PCDATA
3.dtd在xml文档外部声明
(1)在*.dtd文件中写dtd的声明,比如下面这个例子:

<!ELEMENT area (areaId,areaName,population)>
<!ELEMENT areaId (#PCDATA) >
<!ELEMENT areaName (#PCDATA) >
<!ELEMENT population (#PCDATA) >

(2)在XML文档中作引用,语法如下:

<!DOCTYPE 根元素 SYSTEM "文件名">

比如下面这个例子:

<!DOCTYPE area  SYSTEM "area.dtd">
<area>
	<areaId>10510508</areaId>
	<areaName>天山</areaName>
	<population>4000</population>
</area>

4.dtd-XML构建模块
所有的XML文档都是由以下的简单模块构成:
(1)元素
元素是构建XML或者HTML文档的主要模块,元素可以包含文本,其他元素,还可以为空
(2)属性
属性可以提供有关元素的额外信息,属性总是被至于某种元素的开始标签中,它总是按照名称/值得方式成对出现,当元素本身为空时,它被一个/关闭
(3)实体
实体是用来定义普通的文本,实体引用是对实体的引用,实体在被XML解析器解析时,实体就会展开。
下面是一些在XML中预定义的实体:

&lt;  <    &gt;   >   &am;   &    &quot;   "   &apos;  ' 

(4)PCDATA(parsed character data)
被解析的字符数据,PCDATA是会被解析器解析的文本,这些文本将被解析器检查实体并标记。文本中的标签会被当做标记来处理,实体会被展开。
(5)CDATA(character data)
字符数据,它不会被解析器解析的文本,而且文本中的标签也不会被当做标记来处理,实体也不会被展开。
5.DTD中的元素
(1)DTD中的元素需要使用元素进行声明
(2)元素声明的语法:

<!ELEMENT 元素名称   类别>或者<!ELEMENT 元素名  (元素内容) >

(3)空元素:通过EMPTY关键字来声明

<!ELEMENT 元素名 EMPTY>

(4)只有PCDATA的元素:只有PCDATA的元素通过圆括号#PCDATA来声明
语法格式:<!ELEMENT 元素名 (#PCDATA)>
(5)带有任何内容的元素,通过类别关键字ANY声明的元素可以包含任何可以解析的数据组合
语法<!ELEMENT 元素名 ANY>
(6)声明带有子元素(序列)的元素
带有一个或多个子元素的元素通过圆括号中的子元素名进行声明,语法如下:

<!ELEMENT 元素名 (子元素名 1 )>或<!ELEMENT 元素名 (子元素名 1,子元素名 2 )>

当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中。在一个完整的声明中,子元素也必须被声明,同时子元素也可拥有子元素。
(7)声明只出现一次的元素

<!ELEMENT 元素名称 (子元素名称)>

(8)声明出现至少一次的元素

<!ELEMENT 元素名称 (子元素名称+)>

(9)声明出现零次或多次的元素

<!ELEMENT 元素名称 (子元素名称*)>

6.DTD属性
(1)在DTD中,可以通过ATTLIST来声明DTD的属性
(2)声明语法:<!ATTLIST 元素名 属性名 属性类型 默认值>
(3)属性类型有以下这些:
CDATA:值为字符数据 (value1|value2|…):值是枚举列表中的一个
ID:值为唯一的id IDREF:值为另外一个元素的id
IDREFS:值为其他id的列表 NMTOKEN:值为合法的XML名称
NMTOKENS:值为合法的XML名称列表 ENTITY:值为一个实体
ENTITIES:值为一个实体列表 NOTATION:值是符号的名称
xml:值是一个xml预定义的xml值
(4)默认值有下面这些:

#REQUIRED:属性值是必须的
#IMPLIED:属性值不是必须的
#FIXED value:属性值是固定的

(5)列举属性值

<!ATTLIST 元素名称 属性名称 (en1|en2|..) 默认值>

7.DTD实体
(1)实体是用于定义引用普通文本或特殊字符的快捷方式的变量
(2)实体引用是对实体的引用
(3)实体可以在内部或者外部进行声明
(4)内部声明实体语法:<!ENTITY 实体名称 "实体的值">
(5)外部声明实体语法:<!ENTITY 实体名称 SYSTEM "URI/URL">
(6)一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (?。
8.DTD验证
(1)通过XML解析器进行验证,关闭验证
(2)通过XML验证器
(3)通过parseError对象进行验证
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值