DTD
XML 构建模块
所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:
语法
声明元素
语法
<!ELEMENT 元素名称 元素内容>
示例
| 说明 | 语法 | 示例 | 描述 |
|---|
| 空元素 | <!ELEMENT 元素名称 EMPTY> | <!ELEMENT br EMPTY> | 空元素通过类别关键词EMPTY进行声明 |
| 只有 PCDATA 的元素 | <!ELEMENT 元素名称 (#PCDATA)> | <!ELEMENT book (#PCDATA)> | 只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明 |
| 带有任何内容的元素 | <!ELEMENT 元素名称 ANY> | <!ELEMENT book ANY> | 通过类别关键词 ANY 声明的元素,可包含任何可解析数据的组合 |
| 带有子元素(序列)的元素 | <!ELEMENT 元素名称 (元素[,元素,元素...])> | <!ELEMENT book (id,name,author)> | 带有一个或多个子元素的元素通过圆括号中的子元素名进行声明 |
声明属性
语法
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
示例
属性类型的选项
| 类型 | 描述 |
|---|
| CDATA | 值为字符数据 (character data) |
| ID | 值为唯一的 id |
| IDREF | 值为另外一个元素的 id |
| IDREFS | 值为其他 id 的列表 |
| NMTOKEN | 值为合法的 XML 名称 |
| NMTOKENS | 值为合法的 XML 名称的列表 |
| ENTITY | 值是一个实体 |
| ENTITIES | 值是一个实体列表 |
| NOTATION | 此值是符号的名称 |
| xml: | 值是一个预定义的 XML 值 |
默认值参数的选项
| 值 | 解释 |
|---|
| #REQUIRED | 属性值是必需的 |
| #IMPLIED | 属性不是必需的 |
| #FIXED value | 属性值是固定的 |
| 值 | 属性的默认值 |
数量词
用于描述元素出现次数
| 符号 | 描述 |
|---|
| + | 至少出现一次 |
| ? | 出现0次或1次 |
| * | 出现任意次数 |
示例
引用方式
内部的DOCTYPE声明
语法
<!DOCTYPE 根元素 [元素声明]>
示例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book (id,name,author)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
<book>
<id>2</id>
<name>《这是书名》</name>
<author>张三</author>
</book>
外部文档声明
语法
<!DOCTYPE 根元素 [元素声明]>
示例
<!ELEMENT book (id,name,author)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book SYSTEM "book.dtd">
<book>
<id>1</id>
<name>《这是书名》</name>
<author>张三</author>
</book>
简要运用
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
<!ELEMENT books (book)+>
<!ELEMENT book (id,name,author)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ATTLIST author type (man|woman) "man">
<!ATTLIST author age CDATA #REQUIRED>
]>
<books>
<book>
<id>1</id>
<name>《JAVA从入门到放弃》</name>
<author type="man" age="23">张三</author>
</book>
<book>
<id>2</id>
<name>《这是一本书》</name>
<author type="man" age="32">李四</author>
</book>
</books>
r type="man" age="23">张三</author>
</book>
<book>
<id>2</id>
<name>《这是一本书》</name>
<author type="man" age="32">李四</author>
</book>
</books>