DTD(Document Type Definition),文档类型定义,是一套关于标记符的语法规则,它是对 XML 制定的一种规范和验证机制,保证文档的格式是正确的,XML 文档的标签书写必须符合 DTD 的要求才能正确显示。
使用方法
DTD 定义格式:<!DOCTYPE 根元素 [元素声明]>
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用(使用方式类似于CSS)。
内部定义:打开
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
外部定义:打开
note.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
note.dtd
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
定义内容
构建模块 | 说明 |
元素 | 与 HTML 中的元素意思相同 |
属性 | 与 HTML 中的属性意思相同 |
实体 | 可以理解为常量,系统只预定义了五个,用户可以自己定义 |
PCDATA | 可以被解析的字符数据(parsed character data),标签、实体可以使用。 |
CDATA | 无法被解析的字符数据(character data),标签、实体都会失效。 |
①. 声明元素
声明格式1:<!ELEMENT 元素名称 元素类型>
声明格式2:<!ELEMENT 元素名称 (元素内容)>
声明 | 说明 |
声明空元素 | <!ELEMENT 元素名称 EMPTY> |
声明带有任何内容的元素 | <!ELEMENT 元素名称 ANY> |
声明内容只能是#PCDATA的元素 | <!ELEMENT 元素名称 (#PCDATA)> |
声明只出现一次的元素 | <!ELEMENT 元素名称 (tag)> |
声明最少出现一次的元素 | <!ELEMENT 元素名称 (tag+)> |
声明出现零次或多次的元素 | <!ELEMENT 元素名称 (tag*)> |
声明出现零次或一次的元素 | <!ELEMENT 元素名称 (tag?)> |
声明多选一的元素 | <!ELEMENT 元素名称 (tag1|tag2|tag3)> |
声明混合类型的元素 | <!ELEMENT 元素名称 (#PCDATA|tag1|tag2)*> |
②. 声明属性
声明格式:<!ATTLIST 元素名称 属性名称 属性类型 默认值>
属性类型:CDATA(字符数据)、ID(值为唯一)、枚举指定数据(v1|v2|……)、……(所有类型)
默认值参数:值、#REQUIRED(必须)、#IMPLIED(可选)、#FIXED value(固定值)
声明 | 说明 | 实例 |
规定属性值为默认 | <!ATTLIST 元素名称 属性名称 属性类型 默认值> | 实例 |
DTD:
<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">
合法的XML
<square width="100" />
在上面的例子中,"square" 被定义为带有 CDATA 类型的 "width" 属性的空元素。
如果宽度没有被设定,其默认值为0 。
|
规定属性值为可选 | <!ATTLIST 元素名称 属性名称 属性类型 #IMPLIED> | 实例 |
DTD:
<!ELEMENT square EMPTY>
<!ATTLIST contact fax CDATA #IMPLIED>
合法的XML
<contact fax="555-667788" />
<contact />
|
规定属性值为必填 | <!ATTLIST 元素名称 属性名称 属性类型 #REQUIRED> | 实例 |
DTD:
<!ELEMENT square EMPTY>
<!ATTLIST person number CDATA #REQUIRED>
合法的XML
<person number="5677" />
非法的XML
<person />
|
规定属性值为固定 | <!ATTLIST 元素名称 属性名称 属性类型 #FIXED "……"> | 实例 |
DTD:
<!ELEMENT square EMPTY>
<ATTLIST sender company CDATA #FIXED "Microsoft">
合法的XML
<sender company="Microsoft" />
非法的XML
<sender company="W3School" />
|
③. 声明实体
声明格式:<!ENTITY 实体名称 "实体的值">
DTD:
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
XML:
<author>&writer;©right;</author>