DTD(Document Type Definition)文档类型定义:
DTD被用于定义XML文档的结构,作为规范XML文档的一种内容模型,DTD在各领域已形成统一规范的文档。
在XML文档中使用DTD:
内部DOCTYPE声明:
在XML文档中包好DTD:<!DOCTYPE 根元素 [元素声明]><?xml version="1.0" encoding="utf-8"?> <!DOCTYPE student [ <!ELEMENT student (name,hometown,age)> <!ELEMENT name (#PCDATA)> <!ELEMENT hometown (#PCDATA)> <!ELEMENT age (#PCDATA)> ]> <student> <name>Halen</name> <hometown>unknown</hometown> <age>ninteen</age> </student>
外部文档声明:
DTD作为单独文件存在:引用共有DTD文档:<!DOCTYPE 根元素 PUBLIC "文件路径及文件名">
引用私有DTD文档:<!DOCTYPE 根元素 SYSTEM "文件路径及文件名">
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE student SYSTEM "student.dtd"> <student> <name>Halen</name> <hometown>unknown</hometown> <age>ninteen</age> </student>
<!DOCTYPE student [ <!ELEMENT student (name,hometown,age)> <!ELEMENT name (#PCDATA)> <!ELEMENT hometown (#PCDATA)> <!ELEMENT age (#PCDATA)> ]>
声明一个元素:
叶子元素声明:<!ELEMENT 元素名 类别>
枝干元素声明:<!ELEMENT 元素名 (子元素1,子元素2...)>
选择性子元素声明:<!ELEMENT 元素名 (子元素1|子元素2|...)>
枝干元素声明:<!ELEMENT 元素名 (子元素1,子元素2...)>
选择性子元素声明:<!ELEMENT 元素名 (子元素1|子元素2|...)>
类别可使用下列值:
EMPTY 空元素
#PCDATA 字符类型数据,声明时使用#PCDATA需要用括号将其括起来
ANY 任意内容
EMPTY 空元素
#PCDATA 字符类型数据,声明时使用#PCDATA需要用括号将其括起来
ANY 任意内容
控制子元素出现次数:
无符号 子元素只出现1次
+ 子元素出现1次或多次
? 子元素出现0次或1次
* 子元素出现任意次
无符号 子元素只出现1次
+ 子元素出现1次或多次
? 子元素出现0次或1次
* 子元素出现任意次
声明属性:
语法规则:<!ATTLIST 元素名称 属性名称 属性类型 默认值>示例:
<!ATTLIST student name CDATA "unknown">
<student name="unknown">
属性类型选项:
CDATA 值为字符数据 (character data)
(en1|en2|..) 此值是枚举列表中的一个值
ID 值为唯一的 id
IDREF 值为另外一个元素的 id
IDREFS 值为其他 id 的列表
NMTOKEN 值为合法的 XML 名称
NMTOKENS 值为合法的 XML 名称的列表
ENTITY 值是一个实体
ENTITIES 值是一个实体列表
NOTATION 此值是符号的名称
xml: 值是一个预定义的 XML 值
CDATA 值为字符数据 (character data)
(en1|en2|..) 此值是枚举列表中的一个值
ID 值为唯一的 id
IDREF 值为另外一个元素的 id
IDREFS 值为其他 id 的列表
NMTOKEN 值为合法的 XML 名称
NMTOKENS 值为合法的 XML 名称的列表
ENTITY 值是一个实体
ENTITIES 值是一个实体列表
NOTATION 此值是符号的名称
xml: 值是一个预定义的 XML 值
默认值参数也可选用下列值:
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性值是固定的
默认值 在XML中若没有定义属性值,则采用默认值
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性值是固定的
默认值 在XML中若没有定义属性值,则采用默认值
DTD实体:
内部通用实体:在DTD中定义的一段具体数据,可在DTD或XML中引用语法规则:<!ENTITY 实体名称 "实体值">
示例:
<!ENTITY unknown "BeiJing">
<hometown>&unknown;</hometown>
外部通用实体:在文档实体(DTD、XML文档)以外定义的实体对象
语法规则:<!ENTITY 实体名称 SYSTEM "URI/URL">
示例:
<!ENTITY unknown SYSTEM "hometown.txt>
<hometown>&unknown;</hometown>
&unknown;表示hometown.txt文件的内容
语法规则:<!ENTITY 实体名称 SYSTEM "URI/URL">
示例:
<!ENTITY unknown SYSTEM "hometown.txt>
<hometown>&unknown;</hometown>
&unknown;表示hometown.txt文件的内容
内部参数实体:只能出现在DTD文档中
语法规则:<!ENTITY % 实体名 实体内容>
示例:
<!ENTITY % info "(name,age)">
<!ELEMENT student %info;>
语法规则:<!ENTITY % 实体名 实体内容>
示例:
<!ENTITY % info "(name,age)">
<!ELEMENT student %info;>
外部参数实体:在外部DTD文档中声明的参数实体
语法规则:<!ENTITY % 实体名 SYSTEM "URI/URL">
语法规则:<!ENTITY % 实体名 SYSTEM "URI/URL">