0

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 格式不正确?


回答:

进一步研究,这似乎是由于SGMLXML规范之间的差异。

本质上,SGML 将注释定义为以声明结构内的任何位置开始和结束,而 XML 要求注释分别以独立的结构和分隔符开始和结束。--<! ><!---->

因为直到 4.01 版的 HTML 都是基于 SGML,所以声明中的注释是允许的,并且被官方 DTD 使用。

然而,大多数 DTD 验证器似乎只检查是否符合更简单的 XML 规范,因此,会被内部声明注释和错误提示弄糊涂。

4

1 回答 1

1

进一步研究,这似乎是由于 SGML 和 XML 规范之间的差异。

本质上,SGML 将注释定义为声明构造内的任何地方都以 --开头和结尾,而 XML 要求注释分别以分隔符开头和结尾,作为独立的构造。

因为直到 4.01 版的 HTML 都是基于 SGML,所以声明中的注释是允许的,并且被官方 DTD 使用。

然而,大多数 DTD 验证器似乎只检查是否符合更简单的 XML 规范,因此,会被内部声明注释和错误提示弄糊涂。

于 2015-10-20T08:39:49.337 回答