DTD中的ENTITY怎么用 DTD实体定义和引用

DTD 中的 ENTITY 是用于定义可复用文本或外部内容的静态机制,分内部实体()、外部实体()和参数实体(),分别适用于固定文本、外部文件引用和 DTD 内部宏替换。

DTD 中的 ENTITY(实体)是用来定义可复用文本片段或外部内容的机制,核心作用是避免重复、提升可维护性,并支持结构化文档管理。它不是运行时变量,而是在 XML 解析阶段被静态展开的内容。

内部实体:直接在 DTD 里写死内容

适合版权声明、固定提示语、常用缩写等不变文本。

  • 声明语法:
  • 必须放在 DTD 内部(DOCTYPE 的方括号中),或外部 DTD 文件里
  • 引用方式:在 XML 文档任意位置写 &名称;(注意 & 和 ; 是必需的)

例如:

  
    
]>  
&author;(版本&version;)

外部实体:从独立文件加载内容

适用于大段说明、公司信息、多语言文案等需集中维护的场景,也常用于引入配置或模板。

  • 声明语法:(支持相对路径、绝对路径或 URL)
  • 引用方式相同:&名称;
  • 注意:解析器默认可能禁用外部实体(出于安全考虑),启用需配置解析器(如设置 setFeature("http://apache.org/xml/features/disallow-doctype-decl", false)

例如:


其中 contact.xml 内容为:北京市朝阳区xxx,在主 XML 中写 &contactInfo; 即可插入该结构。

参数实体:只在 DTD 内部起作用的“宏”

用于简化 DTD 自身结构,比如复用元素名、属性列表,不能在 XML 文档体中引用。

  • 声明语法:(% 是关键标识)
  • 引用方式:%名称;,且只能出现在 DTD 内(即 DOCTYPE 的 [ ] 内或外部 DTD 中)
  • 典型用途:统一定义一组相似元素、条件性启用模块

例如:

  
  

预定义实体和字符实体

XML 已内置 5 个安全字符实体,无需声明即可使用:

  • zuojiankuohaophpcn
  • youjiankuohaophpcn>
  • &&
  • ""
  • ''

若需表示其他 Unicode 字符(如 ©、®),可用字符引用形式:©©,这类不属于 DTD 实体,但解析行为一致。