DTD 属性声明()最全详解
(只讲属性,讲到你闭眼都能写)
1. 基本语法(永远就这两种写法)
<!-- 写法1:一个元素一种属性写法(最常见) -->
<!ATTLIST 元素名 属性名 属性类型 默认声明>
<!-- 写法2:一个元素一次写完所有属性(推荐!清晰) -->
<!ATTLIST 元素名
属性1 类型1 默认声明1
属性2 类型2 默认声明2
属性3 类型3 默认声明3>
2. 10 种属性类型(实际常用只有前 5 种)
| 类型 | 含义 | 典型例子 |
|---|
| CDATA | 普通字符串(最常用) | name=”张三” version=”2.0″ |
| ID | 文档内唯一标识(不能重复,不能以数字开头) | id=”book001″ |
| IDREF / IDREFS | 引用某个 ID(单/多) | owner=”user123″ members=”u1 u2 u3″ |
| NMTOKEN / NMTOKENS | 合法名字令牌(不能有空格) | type=”book” categories=”IT 编程” |
| 枚举值 | 下拉菜单,只能选列出来的 | (male |
| ENTITY | 引用外部非解析实体(图片、文件) | src=”logo”(配合 ) |
| NOTATION | 引用记法(基本没人用) | — |
3. 4 种默认声明(必须背)
| 声明关键字 | 含义 | 示例 |
|---|
| #REQUIRED | 必须写!不写就报错 | id ID #REQUIRED |
| #IMPLIED | 可写可不写(可选) | lang CDATA #IMPLIED |
| “默认值” | 不写就自动用这个默认值 | status CDATA “在售” |
| #FIXED “值” | 固定值,写也必须是这个值,不写自动补上 | version CDATA #FIXED “1.0” |
4. 终极实战模板(直接抄)
<!ATTLIST 图书
id ID #REQUIRED <!-- 必须有且唯一 -->
标题 CDATA #REQUIRED
分类 (计算机|小说|经管|少儿) "计算机" <!-- 枚举+默认 -->
价格 CDATA "0.00" <!-- 默认值 -->
是否在售 (yes|no) "yes" <!-- 枚举+默认 -->
版本 CDATA #FIXED "2.0" <!-- 固定值 -->
作者ID IDREF #IMPLIED <!-- 引用某个作者的ID -->
标签 NMTOKENS #IMPLIED <!-- 可多个,用空格分 -->
封面 ENTITY #IMPLIED> <!-- 引用外部图片实体 -->
5. 高频组合记忆表(见到就能秒写)
| 需求描述 | DTD 一行写法 |
|---|
| 必须有唯一 id | id ID #REQUIRED |
| xml:lang 可选 | xml:lang CDATA #IMPLIED |
| 性别,必填 | sex (male |
| 状态,默认“启用” | status (启用 |
| 版本固定为 1.0 | version CDATA #FIXED “1.0” |
| 可选 class 属性 | class CDATA #IMPLIED |
| 多个样式类 | class NMTOKENS #IMPLIED |
| 引用其他元素的 id | parent IDREF #IMPLIED |
| 多图轮播 | images ENTITY #IMPLIED + 配合多个 ENTITY 定义 |
6. 参数实体复用属性(高级但超好用)
<!-- 先定义公共属性宏 -->
<!ENTITY % common.attrs "
id ID #IMPLIED
class CDATA #IMPLIED
style CDATA #IMPLIED
title CDATA #IMPLIED">
<!-- 所有标签一键复用 -->
<!ATTLIST div %common.attrs;>
<!ATTLIST p %common.attrs;>
<!ATTLIST img %common.attrs;
src CDATA #REQUIRED
alt CDATA #IMPLIED>
7. 经典错误 vs 正确写法
| 错误写法 | 正确写法 | 错误原因 |
|---|
| 不能在 ATTLIST 里写具体值 | |
| #REQUIRED 必须大写 | |
| id CDATA #REQUIRED | 想唯一用 ID,不是 CDATA | |
现在你已经彻底掌握 DTD 属性了!
想直接拿走一个「完整博客系统属性模板」或「电商商品全属性模板」吗?
回复“博客属性”或“商品属性”,我立刻甩给你现成的!