HTML/SGML/XML/DTD 声明中的注释
Posted
技术标签:
【中文标题】HTML/SGML/XML/DTD 声明中的注释【英文标题】:Comments inside HTML/SGML/XML/DTD declarations 【发布时间】: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 和 --
在声明构造 <! >
内的任何位置,而 XML 要求 cmets 到 begin and end with <!--
和 -->
分隔符分别作为独立的构造。
因为直到 4.01 版的 HTML 都是基于 SGML,所以声明中的 cmets 被允许并被官方 DTD 使用。
但是,大多数 DTD 验证器似乎只检查是否符合更简单的 XML 规范,因此会被声明内的 cmets、barfing 错误弄糊涂。
【问题讨论】:
这应该是有效的,但仅限于 SGML 语法(不是 XML)。您使用的是哪个解析器? (提醒一下:HTML 是一个 SGML DTD) 看来你是对的。我使用的是Validome validator,它仅用于验证 XML DTD。 (当我写这个问题时,我不知道 XML 和 SGML 的 DTD 规范是不同的)。谢谢! 【参考方案1】:进一步研究,这似乎是由于 SGML 和 XML 规范之间的差异。
本质上,SGML 将 cmets 定义为 beginning and ending,在声明结构中的任何地方都带有 -- ,而 XML 要求 cmets 分别以 begin and end with 分隔符作为独立的结构。
因为直到 4.01 版的 HTML 都是基于 SGML,所以声明中的 cmets 被允许并被官方 DTD 使用。
但是,大多数 DTD 验证器似乎只检查是否符合更简单的 XML 规范,因此会被声明内的 cmets、barfing 错误弄糊涂。
【讨论】:
以上是关于HTML/SGML/XML/DTD 声明中的注释的主要内容,如果未能解决你的问题,请参考以下文章