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

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

为什么HTML的comment都是写成

<!-- 这是段注释 -->
形式?

这个看起来最不像HTML的语法,正是源于HTML的父规范 - SGML。在SGML语言里面,&lt! >表示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的定义作为自己的规范中的一部分一样。。。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
博客
32132
07-14 298
07-12 240

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值