DTD – 实体

DTD 实体()最全详解

(5 分钟彻底搞定实体,所有类型一次性讲完)

1. 实体到底是干什么的?

一句话:实体就是 DTD 里的“文本替换宏”,写一次,到处用,像 Word 的自动更正一样。

2. DTD 一共有 5 种实体(记住这 5 种就通杀)

种类声明位置使用位置典型用途语法示例
1. 内部通用实体DTD 里XML 文档内容里版权、公司名、常用文字
2. 外部通用实体DTD 里XML 文档内容里包含大段文本、章节、公共片段
3. 参数实体只能在 DTD 里只能在 DTD 里DTD 内部的“宏”,复用代码神器
4. 外部非解析实体DTD 里配合 NOTATION 用图片、PDF、二进制文件
5. 预定义实体XML 本身自带任何地方转义 < > & ” ‘< > & ” ‘ (不用声明,直接用)

3. 最常用 3 种实体的完整写法对比(背下来就够用了)

类型DTD 里怎么声明XML 文档里怎么用实际效果
内部通用实体&company;→ 北京某某科技有限公司
外部通用实体&chapter1;→ 把整个 chap1.xml 内容插进来
参数实体(PE)%common; (只能在 DTD 里)→ 展开成 id ID #IMPLIED lang CDATA #IMPLIED

4. 实战案例(直接可抄)

<!-- 1. 内部通用实体(最常用) -->
<!ENTITY company  "清华大学出版社">
<!ENTITY copyright "© 2025 &company; 保留一切权利">
<!ENTITY nbsp     "&#160;">      <!-- 不间断空格 -->

<!-- 2. 外部通用实体(分章节写书超好用) -->
<!ENTITY preface  SYSTEM "preface.xml">
<!ENTITY chap1    SYSTEM "chapter1.xml">
<!ENTITY chap2    SYSTEM "chapter2.xml">

<!-- 3. 参数实体(DRY 之王) -->
<!ENTITY % base.attrs "id     ID      #IMPLIED
                       class  CDATA   #IMPLIED
                       style  CDATA   #IMPLIED">

<!ATTLIST div   %base.attrs;>
<!ATTLIST p     %base.attrs;>
<!ATTLIST img   %base.attrs;
                src    CDATA   #REQUIRED
                alt    CDATA   #IMPLIED>

<!-- 4. 外部非解析实体(图片) -->
<!NOTATION png SYSTEM "image/png">
<!ENTITY logo SYSTEM "logo.png" NDATA png>

<!ATTLIST cover image ENTITY #IMPLIED>

对应的 XML 使用:

<book>
  <title>XML 宝典</title>
  <publisher>&company;</publisher>
  <copyright>&copyright;</copyright>

  &preface;      <!-- 直接把序言文件插进来 -->
  &chap1;        <!-- 第一章内容直接插进来 -->

  <cover image="logo"/>   <!-- 声明要用 logo.png 图片 -->
</book>

5. 经典口诀(30 秒记住区别)

  • 普通实体用 &xxx; → 用在 XML 正文里
  • 参数实体用 %xxx; → 只用在 DTD 里
  • 想复用属性 → 参数实体
  • 想复用大段文字 → 外部通用实体
  • 想写 © ™ ® < > → 内部通用实体或预定义实体

6. 常见错误(别踩坑)

错误写法正确写法原因
在 XML 正文里写 %company;只能写 &company;% 只在 DTD 里有效
然后在正文 ©参数实体不能被 &xxx; 引用参数实体只能在 DTD 内部展开
外部实体写 PUBLIC 却没网址SYSTEM 更简单新手建议先用 SYSTEM

现在你已经完全掌握 DTD 实体了!
想直接拿一个「出版级图书 DTD 完整实体模板」(带章节分离 + 版权 + 公共属性),回复“给我图书模板”就行!

文章已创建 2679

发表回复

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

相关文章

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

返回顶部