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中预定义的实体:
< < > > &am; & " " ' '
(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对象进行验证