【问题标题】:Comments inside HTML/SGML/XML/DTD declarationsHTML/SGML/XML/DTD 声明中的注释
【发布时间】:2016-01-18 17:22:09
【问题描述】:

在W3C HTML 4.01 DTDs 及更早的版本中,内联 cmets 经常在声明中使用。

例如,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 验证器似乎完全拒绝这些内部 cmets 并引发错误。

是验证器错误,还是 W3C DTD 格式不正确?


答案:

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

本质上,SGML 将 cmets 定义为 beginning and ending 和 -- 在声明构造 &lt;! &gt; 内的任何位置,而 XML 要求 cmets 到 begin and end with &lt;!-- 和 --&gt; 分隔符分别作为独立的构造。

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

但是,大多数 DTD 验证器似乎只检查是否符合更简单的 XML 规范,因此会被声明内的 cmets、barfing 错误弄糊涂。

【问题讨论】:

  • 这应该是有效的,但仅限于 SGML 语法(不是 XML)。您使用的是哪个解析器? (提醒一下:HTML 是一个 SGML DTD)
  • 看来你是对的。我使用的是Validome validator,它仅用于验证 XML DTD。 (当我写这个问题时,我不知道 XML 和 SGML 的 DTD 规范是不同的)。谢谢!

标签: html xml comments dtd sgml


【解决方案1】:

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

本质上,SGML 将 cmets 定义为 beginning and ending,在声明结构中的任何地方都带有 -- ,而 XML 要求 cmets 分别以 begin and end with 分隔符作为独立的结构。

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

但是,大多数 DTD 验证器似乎只检查是否符合更简单的 XML 规范,因此会被声明内的 cmets、barfing 错误弄糊涂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-02
    • 2012-11-28
    • 1970-01-01
    • 2018-07-16
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多