DTD条件部分通过include/IGNORE关键字配合参数实体实现动态声明控制,用于多版本、多语言或单位制适配,必须位于外部DTD或内部子集的声明区,且IGNORE会强制忽略其内所有嵌套条件节。

DTD中的条件部分(Conditional Sections)用于在解析时动态决定是否包含或忽略某段声明,核心是 INCLUDE 和 IGNORE 关键字。它们不直接写在xml文档里,而是嵌套在DTD中,配合参数实体控制逻辑分支,常见于需要适配多版本、多语言或不同单位制的场景。
条件部分必须出现在外部DTD或内部子集的DTD声明区,且只能由XML处理器识别处理
比如要为建筑图纸DTD同时支持英制与公制单位,可这样组织:
定义参数实体标记开关
使用条件节包裹对应声明
]]>]]>
注意:%English; 展开后变成 ,处理器就包含其中内容;换成 %Metric; 就变成 ,整块被跳过。
嵌套需谨慎
被 IGNORE 包裹的部分,其内部所有子条件节(哪怕写着 INCLUDE)也一并忽略。所以不能靠内层翻转来“绕过”外层忽略。
实际使用中几乎不用裸写 INCLUDE/IGNORE
而是通过参数实体间接控制,好处是:
- 同一份DTD文件可被多个XML文档复用
- XML文档可通过重定义参数实体切换行为(例如在内部子集里写
) - 更易维护,避免硬编码逻辑
基本上就这些。