一、什么是DTD
DTD全名(Document type definition)中文译名 文档类型定义
XML文件的文档类型定义(Document Type Definition)可以看成一个或者多个XML文件的模板,在这里可以定义XML文件中的元素、元素的属性、元素的排列方式、元素包含的内容等等。
DTD(Document Type Definition)概念缘于SGML,每一份SGML文件,均应有相对应的DTD。对XML文件而言,DTD并非特别需要,well-formed XML就不需要有DTD。DTD有四个组成如下:
- 元素(Elements)
- 属性(Attribute)
- 实体(Entities)
- 注释(Comments)
但由于DTD限制较多,使用时较不方便,近来已渐被XML Schema所取代。
二、DTD声明
1.内部声明
即直接在XML文档内部声明,具体语法为
<!DOCTYPE 根元素 [元素声明]>
例如
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE SHINO [
<!ENTITY AUTHOR "Hermit_Yoshino">
<!ELEMENT SHINO (head,body)>
<!ELEMENT head (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<SHINO>
<head>by:&AUTHOR;</head>
<body></body>
</SHINO>
2.外部声明
即引入在外部声明的.dtd文件
语法为
<!DOCTYPE 根元素 SYSTEM "文件名">
例如
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE SHINO SYSTEM "SHINO.dtd">
<SHINO>
<head>by:&AUTHOR;</head>
<body></body>
</SHINO>
外部的 SHINO.dtd 文件
<!ENTITY AUTHOR "Hermit_Yoshino">
<!ELEMENT SHINO (head,body)>
<!ELEMENT head (#PCDATA)>
<!ELEMENT body (#PCDATA)>
三、具体语法
1.元素
在 DTD 中,XML 元素通过元素声明来进行声明。元素声明可以使用以下语法:
<!ELEMENT 元素名称 类别>
或
<!ELEMENT 元素名称 (元素内容)>
其中 类别 可以是以下几种:
-
EMPTY 空(无任何元素) < />
-
ANY 任意元素 < ></ >
元素内容 可以是以下几种:
- #PCDATA 只包含PCDATA
- 子元素名 多种元素使用 , 分隔,同时出现顺序必须与声明时的顺序一致
使用 | 则表示任选其一
在元素中添加符号可以限制其出现次数,默认为有且仅出现一次
+ 一次或多次 ? 0次或一次 * 0次或多次
2.属性
声明语法
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
属性类型 可选项:
类型 | 描述 |
---|---|
CDATA | 值为字符数据 (character data) |
(en1|en2|..) | 此值是枚举列表中的一个值 |
ID | 值为唯一的 id |
IDREF | 值为另外一个元素的 id |
IDREFS | 值为其他 id 的列表 |
NMTOKEN | 值为合法的 XML 名称 |
NMTOKENS | 值为合法的 XML 名称的列表 |
ENTITY | 值是一个实体 |
ENTITIES | 值是一个实体列表 |
NOTATION | 此值是符号的名称 |
xml: | 值是一个预定义的 XML 值 |
默认值 可选项
值 | 解释 |
---|---|
值 | 属性的默认值 |
#REQUIRED | 属性值是必需的 |
#IMPLIED | 属性不是必需的 |
#FIXED value | 属性值是固定的 |
3.实体
内部实体
<!ENTITY 实体名称 "实体的值">
外部实体
<!ENTITY 实体名称 SYSTEM "URI/URL">
四、其他
转义字符
< | < |
> | > |
& | & |
" | " |
' | ' |