为什么HTML里的Comment是<!–开头?

最近做了两周的产品组培训,让自己对于技术的兴趣又重新燃起。我觉得一个好的技术人员要至少做到两点:开放(或者说有好奇心)和深入(或者是打破沙锅问到底)。在准备下周的UI训练营之前,我简单的看了一些HTML代码,发现还有很多以前忽略的东西。比如我问的这个很白痴的问题:

为什么HTML的comment都是写成

<!– 这是段注释 –>

形式?

这个看起来最不像HTML的语法,正是源于HTML的父规范 – SGML。在SGML语言里面,<! >表示SGML中的声明,比如

<!ELEMENT IMG – O EMPTY — Embedded image –>

而在SGML里面,评论是用简单的两个横线表示的。第一对横线表示评论的开始,而第二对表示评论的结束。在HTML里面,就直接继承过来,用<!– –>来代替。

就像还有另外一个SGML语法写出来的东西,我几乎从来没有真正关心过,或者说还很少手写的,就是XHTML 1.0或者HTML 4.01前面的DOCTYPE,比如:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>,这真正代表着什么呢?难道就是一行字符串吗?其实,可以说浏览器就把它当作一段字符串,但字符串的生成,还是有历史原因的。

比如说

  • <! 表示SGML的声明的开始
  • DOCTYPE是SGML的语法的以部分,就像另外一个常用的,ENTITIES,在DTD结构的语法里面常常用到。
  • html说明了这个SGML文档的根tag。
  • PUBLIC和SYSTEM相对。SYSTEM 会制定这个文档相对应的DTD的未知,应该是:SYSTEM "/dtd/xhtml.dtd"这样的形式,而PUBLIC表示下面将不用URL而仅仅是一个字符串规定DTD的位置,而这个字符串是如此的特殊,我们有一个名字来规定,叫做Formal Public Indentifiers (FPI)。
  • “-//W3C//DTD HTML 4.0//EN”这就是FPI。云里雾里的字符串也是有意义的:ownername//class description//language。其中,ownername 是 -//W3C。其中减号表示W3C是一个还没有在ISO(或者其下的ANSI注册的机构),+号代表的是注册的(这里感觉到了1960年代那种互联网之前的迂腐的味道。以后所有的这些复杂的注册统统都用基于现在的域名注册系统中了,比如xmlns命名空间的注册借用URI就显得聪明的多)。就连W3C都没有注册,可见注册机制已经名存实亡。DTD表示了类型,而HTML 4.0是这个DTD的描述性的名字。最后的EN同样借用了ISO 639的语言代码。
  • “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”这个按道理是不需要的,因为如果有了FPI,所有的现代浏览器应该都自带从这个著名的FPI到本地缓存的一份DTD文件的对应表,但是如果没有(这是严谨的考虑),才把URL作为PUBLIC的第二个参数,传进去。。。(顺便提一句,FireFox不会去读任何外部或者内部的DTD,用来验证HTML的合法性,换句话说,FireFox不支持DTD验证).
  • >跳出SGML世界,回到HTML文档中去。

这样分析,也就大概的知道这里是怎么回事了,至少对于记忆这个字符串有好处。

Web的历史一直是借用和采纳的历史,HTML借用SGML的规定,SGML有借用ISO的定义,就像SMTP借用了URI的定义作为自己的规范中的一部分一样。。。

而且,这种过去的规范对于新技术的影响,就有点像两匹马的屁股决定了古代车辆的宽度,之后决定了地上的车辙,进而影响到了铁路的宽度,限制到了铁路运输的货物到校,随之限制了运载火箭的直径,知道决定了卫星的直径。。。这听起来虽然有点牵强,但说的就是这种例子。

技术加上一点点考古,真有趣。

《为什么HTML里的Comment是<!–开头?》上的8个想法

  1. 随之限制了运载火箭的直径,知道决定了卫星的直径。。。
    ~~~~~~~~~~~~~~~直到?

  2. 没有必要什么都打破砂锅问到底吧?
    世界上的问题太多了,依我的看法,这是个没什么价值的问题。

  3. 其实这是都是有历史原理的,真正要了解一项技术,就要去知道他的前世今生,HTML只是最简单的例子

  4. 同意三楼,我们在信息爆炸的时代面对的问题太多,如果每个问题都打破沙锅问到底,精力和效率都不允许。技术上的问题也是如此,<!–也是如此。还是在UI上多下下功夫吧。

发表回复

您的电子邮箱地址不会被公开。