在W3C HTML 4.01 DTD和更早版本中,内联注释经常在声明中使用。
例如,HTML 2.0 Strict DTD有:
<!ENTITY % HTML.Version
"-//IETF//DTD HTML 2.0 Strict//EN"
-- Typical usage:
<!DOCTYPE HTML PUBLIC
"-//IETF//DTD HTML Strict//EN">
<html>
...
</html>
--
>
其中HTML
实体声明包含两个双连字符之间的注释--
。
但是,DTD 验证器似乎完全拒绝这些内部注释并抛出错误。
验证器是错误的,还是 W3C DTD 格式不正确?
回答:
进一步研究,这似乎是由于SGML和XML规范之间的差异。
本质上,SGML 将注释定义为以声明结构内的任何位置开始和结束,而 XML 要求注释分别以独立的结构和分隔符开始和结束。--
<! >
<!--
-->
因为直到 4.01 版的 HTML 都是基于 SGML,所以声明中的注释是允许的,并且被官方 DTD 使用。
然而,大多数 DTD 验证器似乎只检查是否符合更简单的 XML 规范,因此,会被内部声明注释和错误提示弄糊涂。