DTD中的ATTLIST声明用于为XML元素定义属性,通过它可以指定属性的名称、数据类型、是否必填以及默认值等信息,是规范XML文档属性的核心语法。

ATTLIST的基本语法结构
ATTLIST的通用语法格式如下,其中元素名是要添加属性的XML元素,属性名是自定义的属性标识,属性类型指定属性的取值规则,默认值设置则定义属性的默认行为。
<!ATTLIST 元素名
属性名 属性类型 默认值设置
属性名 属性类型 默认值设置
...
>
常见的属性类型
属性类型决定了属性可以接受的值的范围,常用的属性类型有以下几种:
- CDATA:表示属性值为字符数据,可以是任意文本字符串。
- 枚举类型:在括号内列出所有可选值,属性值必须是其中的一个,多个值用竖线分隔。
- ID:属性值必须是唯一的,用于标识元素,整个XML文档中ID属性的值不能重复。
- IDREF:属性值必须是文档中某个ID属性的值,用于建立元素之间的引用关系。
- ENTITY:属性值是预定义的实体名称。
默认值设置方式
默认值设置用来规定属性的默认行为,常见的设置方式如下:
| 设置方式 | 说明 |
|---|---|
| #REQUIRED | 属性是必填项,XML元素中必须包含该属性,否则文档不符合DTD规范。 |
| #IMPLIED | 属性是可选的,XML元素中可以包含也可以不包含该属性。 |
| #FIXED "固定值" | 属性的值是固定的,如果XML元素中包含该属性,值必须等于固定值,也可以不包含该属性,默认使用固定值。 |
| 默认值 | 直接写一个字符串作为默认值,如果XML元素中没有包含该属性,会自动使用这个默认值。 |
完整示例
下面是一个完整的DTD示例,为book元素定义了多个不同类型的属性:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books [
<!ELEMENT books (book+)>
<!ELEMENT book (#PCDATA)>
<!-- 为book元素定义属性 -->
<!ATTLIST book
id ID #REQUIRED
category (技术|文学|社科) "技术"
author CDATA #IMPLIED
version CDATA #FIXED "1.0"
publisher CDATA "未知出版社"
>
]>
<books>
<book id="b1" category="技术" author="张三">XML开发指南</book>
<book id="b2" publisher="电子工业出版社">文学读物</book>
</books>
在上面的示例中,book元素的id属性是必填的唯一ID,category属性只能从技术、文学、社科中选择,默认是技术,author属性可选,version属性固定为1.0,publisher属性默认是未知出版社。第二个book元素没有写category和version属性,会自动使用默认值技术、1.0,符合DTD规范。
注意事项
使用ATTLIST定义属性时需要注意以下几点:
- 同一个元素的多个属性可以在一个ATTLIST声明中定义,也可以分成多个ATTLIST声明定义,效果一致。
- ID类型的属性值不能以数字开头,且不能包含空格。
- 枚举类型的属性值列表中的值不需要加引号,多个值用竖线分隔即可。
- 如果同时设置了#FIXED和默认值,#FIXED后面的固定值就是默认值,不能单独写其他默认值。