DTD 终极总结(一张图记完一辈子)
| 项目 | 核心内容(背下来就无敌) | 一句口诀 / 记忆点 |
|---|---|---|
| 作用 | 给 XML 规定“骨架规则”,让 XML 合法、有序、可校验 | DTD = XML 的“宪法” |
| 两种存放方式 | ① 内部 DTD(写在 XML 里) ② 外部 DTD(单独 .dtd 文件,推荐) | 外部 DTD 可复用,内部 DTD 仅当前文件用 |
| 声明开头 | 内部:<!DOCTYPE 根元素 [ … ]>外部: <!DOCTYPE 根元素 SYSTEM "xx.dtd"> 或 PUBLIC | SYSTEM 私用,PUBLIC 公开标准 |
| 5 大构建模块 | ① 元素 ② 属性 ③ 实体 ④ 参数实体 %xxx; ⑤ 记法 (可忽略) | 记住前 4 个就够用 99% 的场景 |
| 元素内容模型 | (#PCDATA) │ EMPTY │ ANY │ (子元素序列) | 文字、空的、随便的、严格结构 |
| 数量符号 | 无符号 = 1 次 │ ? = 0~1 │ * = 0~N │ + = 1~N | “无要一个,问可不问,星随便,加至少加” |
| 顺序与选择 | , = 顺序必须 │ | = 或者 |
| 属性类型 | CDATA(最常用)│ ID │ IDREF │ 枚举值 │ NMTOKEN │ ENTITY… | 普通字符串 → CDATA,唯一编号 → ID |
| 属性默认 | #REQUIRED(必填)│ #IMPLIED(可选)│ “默认值” │ #FIXED “固定值” | 必、选、默、固 |
| 实体分类 | ① © 内部通用实体 ② &chapter; 外部通用实体 ③ %attrs; 参数实体(只在 DTD 里用) | & 用在 XML 正文,% 只在 DTD 里 |
| 验证工具 | VS Code(实时)│ xmllint(命令行)│ Oxygen │ 在线 xmlvalidation.com | 日常写代码用 VS Code,服务器/CI 用 xmllint |
| 元素 vs 属性 | 能重复、有子元素、未来要扩展 → 元素 简单、唯一、配置类 → 属性 | “数据用元素,元数据用属性” |
| 还在广泛使用的地方 | HTML RSS 订阅 SVG XHTML 政府/银行页 Android 布局 LibreOffice 文档等 | 2025 年 DTD 仍然活得很好! |
| 最大局限 | ① 不支持命名空间 ② 数据类型太弱(只有 CDATA/ID 等) ③ 语法不是 XML 本身 | 因此新项目推荐 XSD,但老系统必学 DTD |
30 秒终极记忆口诀(贴桌面)
内部方括号,外部 SYSTEM 加引号,
元素逗号顺序,竖线或者要记牢,
问星加三个,分别零一零多一多,
属性必选默固,ID 唯一 CDATA 普通好,
&实体正文用,%参数 DTD 里跑,
验证 VS Code 最快,xmllint 命令最牢!
恭喜你!
现在你已经彻底掌握了 DTD —— 从入门到能手撕任何遗留系统!
想把这份总结做成 PDF 或者 Markdown 永久保存吗?
回复“发我 PDF” 或 “发我 Markdown”,我立刻打包发你!