DTD – XML 构建模块

DTD —— XML 的“构建模块”全解析

(让你真正明白 DTD 到底由哪几块积木拼成)

DTD 就像乐高积木的说明书,它一共只有 5 大核心构建模块,掌握这 5 块就能拼出任何复杂度的 XML 结构。

模块序号模块名称作用(用大白话)关键字/语法必备度
1元素声明规定“可以出现哪些标签”以及“标签里能放什么”★★★★★
2属性声明给标签添加“附加属性”(就像给人加身份证、性别)★★★★☆
3实体声明定义“快捷替换文字”(© → ©)★★★☆☆
4参数实体(PE)只在 DTD 内部使用的“宏”,用来复用代码%name;★★★☆☆
5记法声明告诉解析器如何处理非 XML 数据(图片、PDF 等)★☆☆☆☆(很少用)

下面每块都配最常用、最实用的例子。

1. 元素声明()——最重要的模块

<!ELEMENT 标签名 内容模型>

常见内容模型一览表(记住这 8 种就够用 95% 的场景):

内容模型含义示例写法
(#PCDATA)只能放纯文字
EMPTY空标签(
这种)
ANY随便放什么(不推荐)
(子元素列表)必须按顺序出现
,顺序固定(title,author,price)
或者关系
?0 或 1 次email?
*0 次或多次phone*
+1 次或多次author+
()分组(address,(phone

实战例子:

<!ELEMENT 图书馆   (图书+)>
<!ELEMENT 图书     (书名, 作者+, 价格, 标签*)>
<!ELEMENT 书名     (#PCDATA)>
<!ELEMENT 作者     (#PCDATA)>
<!ELEMENT 价格     (#PCDATA)>
<!ELEMENT 标签     (#PCDATA)>

2. 属性声明()——给标签加“属性栏”

<!ATTLIST 图书 
          id       ID        #REQUIRED     <!-- 必须有且唯一 -->
          分类     CDATA     "计算机"      <!-- 默认值 -->
          版次     NMTOKEN   #IMPLIED      <!-- 可选 -->
          语言     (中文|英文|日文) "中文"
          精装     (yes|no)  #FIXED "yes">   <!-- 固定值 -->

3. 实体声明()——快捷键

<!ENTITY company "北京某某科技有限公司">
<!ENTITY copy    "© 2025 本公司所有">
<!ENTITY logo    SYSTEM "logo.png">   <!-- 外部图片实体 -->

使用时:

<版权信息>&company; &copy;</版权信息>

4. 参数实体(% xxx;)—— DTD 自己的“宏”,超级好用

<!-- 先定义公共属性宏 -->
<!ENTITY % common.attrs "id ID #IMPLIED
                         class CDATA #IMPLIED
                         style CDATA #IMPLIED">

<!-- 所有标签都可以直接复用 -->
<!ATTLIST div    %common.attrs;>
<!ATTLIST p      %common.attrs;>
<!ATTLIST table  %common.attrs;>

5. 记法声明()——基本可以忽略

用来声明二进制文件格式(现在几乎没人用):

<!NOTATION png SYSTEM "image/png">
<!NOTATION pdf SYSTEM "application/pdf">

完整小案例(5 大模块全用上)

文件:library.dtd

<!ENTITY % attrs "id ID #REQUIRED category CDATA #IMPLIED">

<!ELEMENT 图书馆 (图书+)>
<!ELEMENT 图书   (书名, 作者+, 价格, 简介?)>
<!ELEMENT 书名   (#PCDATA)>
<!ELEMENT 作者   (#PCDATA)>
<!ELEMENT 价格   (#PCDATA)>
<!ELEMENT 简介   (#PCDATA)>

<!ATTLIST 图书 %attrs;>

<!ENTITY publisher "清华大学出版社">

对应的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 图书馆 SYSTEM "library.dtd">
<图书馆>
  <图书 id="001" category="计算机">
    <书名>XML 从入门到精通</书名>
    <作者>张三</作者>
    <作者>李四</作者>
    <价格>89</价格>
  </图书>
</图书馆>

一句话总结:
DTD 只有这 5 块积木:
元素 + 属性 + 实体 + 参数实体 +(记法)
把这 5 块玩熟了,你就能随心所欲地给任何 XML 搭骨架!

需要我再给你一个“30 行 DTD 搞定博客系统”完整模板吗?直接说“来一个博客模板”就行!

文章已创建 2679

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部