DTD 实体
DTD 实体(Entities):定义快捷方式
Section titled “DTD 实体(Entities):定义快捷方式”DTD 中的实体就像变量或宏,用于为常用文本或特殊字符定义快捷方式。
它们有助于提高可维护性(只需在一个地方更改值)和可读性。
实体可以在 DTD 内部声明,也可以在单独的文件中外部声明。
<代表<(小于号)>代表>(大于号)&代表&(与号)"代表"(双引号)'代表'(单引号/撇号)
当你需要在元素内容或属性值中包含这些字符的字面量文本,而不是让它们被解释为标记时,通常会使用这些预定义实体。
内部实体声明
Section titled “内部实体声明”内部实体在 DTD 中直接将一个名称与一个替换文本字符串关联起来。
`<!ENTITY entity-name "replacement text">`DTD 声明(可以是内部的,也可以是外部 DTD 文件的一部分):
<!ENTITY writer "John Doe"><!ENTITY copyright "Copyright (C) 2024 Example Inc."><!ENTITY company "Example Inc.">XML 使用:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE document [ <!ELEMENT document (author, notice)> <!ELEMENT author (#PCDATA)> <!ELEMENT notice (#PCDATA)> <!ENTITY writer "John Doe"> <!ENTITY copyright "Copyright (C) 2024 Example Inc.">]><document> <author>Written by &writer;.</author> <notice>©right;</notice></document>解析时,&writer; 将被替换为 “John Doe”,©right; 将被替换为 “Copyright (C) 2024 Example Inc.”
注意:实体引用由一个与号(&)、实体名称和一个分号(;)组成。
外部实体声明
Section titled “外部实体声明”外部实体将一个名称与位于外部资源(通常是一个文件)中的内容关联起来。
语法(用于引用外部文件):
Section titled “语法(用于引用外部文件):”`<!ENTITY entity-name SYSTEM "URI/URL">`假设你有一个 footer.xml 文件,其中包含:
<legal>All rights reserved by Example Inc. Use is subject to license terms.</legal>DTD 声明:
<!ENTITY footerContent SYSTEM "footer.xml">XML 使用:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE report [ <!ELEMENT report (title, content, footer)> <!ELEMENT title (#PCDATA)> <!ELEMENT content (#PCDATA)> <!ELEMENT footer ANY> <!-- Define footer element --> <!ENTITY footerContent SYSTEM "footer.xml"> <!-- Declare external entity -->]><report> <title>Annual Report</title> <content>This year's performance was strong...</content> <footer>&footerContent;</footer> <!-- Reference the external entity --></report>当 XML 解析器处理此文档时,它将获取 footer.xml 的内容并将其插入到 &footerContent; 出现的位置。请注意,如果解析器配置不安全,特别是处理不受信任的 XML 文档时,外部实体可能带来安全风险(例如,XML 外部实体 - XXE 攻击)。现代解析器通常默认禁用外部实体处理。