什么是DOCTYPE ex SYSTEM“ex.dtd”

时间:2013-03-23 05:03:08

标签: xml doctype

因此,在阅读DOM level 2 spec found时,我遇到了以下代码

<!DOCTYPE ex SYSTEM "ex.dtd" [
  <!ENTITY foo "foo">
  <!ENTITY bar "bar">
  <!ENTITY bar "bar2">
  <!ENTITY % baz "baz">
]>
<ex/>

虽然我理解为什么在将其粘贴到html时会如此破碎,但为什么它仍会显示]>但仍会解析html中的<ex/>结束标记?

1 个答案:

答案 0 :(得分:2)

根本不是HTML。这是一个相当简单的通用XML。形式上,“ex.dtd”指的是应该包含文档类型定义(DTD)的外部资源(例如另一个文件)。

当您将普通XML放在以HTML格式提供的浏览器中时(例如,在HTTP标头中指定Content-Type:text / html),可能会发生有趣的事情。浏览器尝试将其解析为HTML。

特别是,浏览器不读取DTD,并且它们不按正式规范解析文档类型声明(DOCTYPE声明) - 它们只识别一组有限的特定doctype字符串。它们不识别包含DTD“内部子集”的XML(和SGML)构造,即通过附加声明来增强外部DTD的方法,如此处的实体声明。他们希望doctype字符串在第一个ENTITY声明中看到“&lt;”时会结束,忽略这些声明,然后将“]&gt;”视为字符数据。