HTML是从很多方面支撑Web的语言,作为浏览器的通用语,HTML是可以渲染的。HTML获得了史无前例的成功,但如果我告诉你它是1990年才被发明的,而且在1993年之前还没几个人知道它,那你恐怕就会更惊讶了。
虽然与早期相比HTML变化并不大,但却很少有人能说清楚HTML的历史。不过,只要在网上搜一搜,找一找,也不难发现那些促使其诞生,以及后来又让它得到广泛应用的事件。
1990年,Tim Berners-Lee写下了自己WWW项目的代码。关于他在写处理超文本(HyperText)的代码的消息,最早见诸他的文件HyperText.m,那是1990年6月25日。
1990年11月27~30日,Tim与Rober Cailliau参加了ECHT'90,即那一年的European Conference on Hypertext(欧洲超文本大会)。ECHT'90之后,他似乎有了更多关于(当时恐怕还不不知道叫什么的)World Wide Web的想法。因为在接下来的几个月,他埋头写了更多代码,同时也写了史上第一个HTML文档。
实际上,这个保存在万维网上最早的HTML页面可以追溯到11月13日,也就是那次大会之前两星期。证据是HTTP HEAD请求返回“Last-Modified: Tue, 13 Nov 1990 15:17:00 GMT”。这个页面至今在大多数浏览器中仍能正常渲染,甚至还包含一个可以点击的超链接(HyperLink)!
你知道早期HTML长什么样吗?以下是前述最古老的HTML文档中的代码:
<title>Hypertext Links</title>
<h1>Links and Anchors</h1>
A link is the connection between one piece of
<a href=WhatIs.html>hypertext</a> and another.
可以在1990年12月初的这两个文档中一睹早期标签和属性的芳容:
就算在今天,仅用这些标签和属性也足以写出一个很像样的HTML页面来了。
Tim在他早期的格式化测试用例中展示了更多标签,下面这个页面可能就是他当时在NeXT用来测试WorldWideWeb浏览器的:
这些标签的想法是从哪里来的?早期的HTML受到了什么东西的影响?Tim自己说过,早期的HTML参考了当时CERN正在使用的SGML语言:
我们从CERN用过或曾经支持过的SGML众多的标签里为HTML挑选了一些标签……HTML解析器会忽略不认识的标签,忽略它不认识的CERN-SGML标签的属性。 ——http://www.w3.org/Test/test
我以前不知道HTML源自SGML,直到后来发现了1990年12月19日的一些文档中包含下列奇怪的标签:
bl
bib
bib@id
hp1
xmp
h3
box
fn
i1
i1@ix
dl
dt
dd
dl@compact
bibref
bibref@refid
仔细看看这些文档,会发现它们都摘录自一个更大的SGMLguid文档(SGMLguid就是Tim提到的CERN使用的SGML语言),这个文档是Tim在同一天最后修改过的。换句话说,我第一眼看到它们的时候并没想到那是HTML,但Tim那时候正把它们转成HTML,比如把它们通过超链接联系起来!
经过对这些文档以及同一目录下其他文档的深入研究,我发现早期的那些HTML标签大多数都来自CERN SGMLGuid语言,而SGMLGuid又是AAP(一种早期SGML语言)的一个变体。比如,title
、hn
、p
、ol
等很明显都来自这个语言。唯一一处根本不同就是增加了极其重要的锚链接(<a>
),没有它也就没有今天的WWW(万维网)。
研究SGMLguid让我颇费周折,开始的时候我以为SGML是“Standard Generalized Markup Language”的缩写。可是,在通过Google搜索了一些上述示例文档中的标签之后,我找到了Waterloo SCRIPT GML User's Guide,文档日期是1988年10月18日,其中引用了一种叫“GMLguide”的语言。SGMLguid很可能是SGMLguide少写了一个e,也可能是一种双关,因为CERN使用的是真正的SGML。
1998年的那份User's Guide中提到了标签ADDRESS
、BODY
、DL
、DT
、DD
、H[0-6]
、INDEX
、LI
、OL
、P
、Q
、TITLE
、UL
和XMP
。当然,没有最重要的那个标签:A
(表示Anchor)。
而实际上,这个Script GML中的标签大部分又来自GML。GML是在SGML之前出现的标记语言,由IBM开发。网上有一个GML Starter Set Reference,据此可以断定GML早在1980年就已经有了。这就是HTML可以追溯到的最早的参考语言。
Michael Friendly的GMLHTML: A GML to HTML Translator for Waterloo Script/GML是个有意思的旁证。
想想真觉得不可思议,原来大多数HTML标签都是直接从GML和GMLGuide里面照搬过来的,Tim只想告诉大家怎么把它们超链接起来。而这也正是HTML为什么那么基础的原因:它就是超链接版的SGMLguid,只不过抛弃了其中关于排版的很多乱七八糟东西,让人好学,让代码好解析——这只是我个人的想法哟!
关于HTML源自的GMLguide的结论,好像还有人不信。那好,下面就是从SGMLguid文档中节选的代码,文档扩展名是.sgml,由Tim最后修改(或者说保存)于12月19日,但最后修改日期在1990年4月:
<BODY>
<H1>Introduction
This manual describes how to build a distributed system using the
Remote Procedure Call system developed in the Online Group
of the DD Division of CERN, the European Particle Physics Laboratory.
<h2> The system
The remote procedure call product consists of two essential parts:
an RPC compiler which is used during development of an application,
and the RPC run time system, which is part of the run time code.
Target systems supported are
<ul>
<li>VAX/VMS,
<li>Unix (Berkley 4.3 or Ultrix or equivalent)
<li>stand&hyphen.alone M680x0 (MoniCa) systems (Valet&hyphen.Plus, etc)
<li>stand&hyphen.alone M6809 systems
<li>M680x0 systems running RMS68K
<li>M680x0 systems running OS9
<li>The IBM&hyphen.PC running TurboPascal or Turbo-C
<li>The Macintosh running TurboPascal or MPW
</ul>
看着眼熟不(补上</h1>
和</h2>
标签再看)?这些写于1986年的代码表明,HTML的基础部分比人们想象的要年代久远得多。
到1991年,虽然基本的特性已经具备了,但很多其他特性仍然不见踪影,这门语言也正是在这一两年才开始流行。
1991年底,Dan Connolly粉墨登场。1991年10月,Tim曾这样给他描述HTML:
Re: status. Re: X11 BROWSER for WWW
这里是关于标签的讨论——在http://info.cern.ch/hypertext/WWW/MarkUp/Tags.html中看不到,我刚刚更新了。 多数标签都是样式标签:包括表示标题的
H1
到H6
,包含列表元素LI
的列表UL
和OL
,包含元素DT
和DD
的术语DL
。
<TITLE>..<TITLE>
中的内容想要显示在窗口顶部的横条上,或者用作窗口的名字。它也是历史列表中要用到的。页面里不应该显示其中的文本,因为通常在文本之上总会有一个<H1>
标题嘛。有一点不同在于,<TITLE>
的意义在上下文之外,而<H1>
在上下文之内。比如,某个<TITLE>
里可以这么写:“Formatting Characters for Printf -- C reference manual”,而<H1>
里则只要写“Formatting Characters”就行啦。没有使用基准地址标签,也没有突出显示
HP1
之类的。使用了锚!但没用
REL
属性。
<ISINDEX>
由服务器发送过来,表示服务器会接受一个基于该文档名和关键字的搜索。如果文档位于主窗口,它会打开一个搜索面板。如果文档是可搜索的索引,那么更好的实现方式是在文本窗口底部显示一个关键字域。这样,在用户的眼里,文档更像个全功能的工具,而且屏幕也没那么乱。
<NEXTID>
可以被浏览器忽略,只有编辑器需要它。
<XMP>
和<LISTING>
表示插入的字面文本。为了让写文档(因为代码里还没有实体)的人更轻松,它们的特别之处就是在关闭标签之前一切都是字面文本。因此,我们可以使用XMP
来给出HTML的示例。(确实需要一种转义方式,下一个版本的解析器会支持简单的实体,比如用<
表示<
。)在XMP
和LISTING
里头,换行有意义(即真的会“换行”)。
<PLAINTEXT>
用于表示这个文件的其余内容其实只是ASCII,也就是完全关闭SGML解析。此时基本就是说谎话,将来会通过文档格式协商解决。
文档结构:
在写新的通用解析器的时候,我不知道你的文本对象里该不该保存嵌套的文档结构。当前,文档是一种线性样式序列:不能在列表中嵌套列表,等等。理想情况下是应该能处理的,虽然人类作者写起来会比较困难。实际上我个人更倾向于不使用
<H1>
、<H2>
表示标题[它们都来自AAP DTD],而是使用嵌套的<SECTION>..</SECTION>
元素和一个通用的<H>..</H>
,这个元素会根据自己所在层级产生相应级别的标题。对浏览器而言,把结构展开成样式序列是必要的,但对编辑器则不然。
Tim和Dan从此开始共同致力于这门语言的标准化,让它容易实现。也正是从这个时候开始,问题越来越糟糕……
1992年,(比较)稳定了。看这个HTML页面。
其中一个相关的文件包含一个非常重要的思想:
有必要让HTML成为所有平台的公共语言。这意味着没有特定于某种设备的标记,或者说没有需要控制字体或颜色的任何东西。这符合SGML的理想。
可是,缺乏标准化和Mosaic(1993年时)不靠谱的解析技术让HTML饱经磨难。如果要求HTML当初必须有一个SGML DTD,它可能不会发展这么快,但在架构上应该会更牢靠。
HTML的第一个官方标准(HTML 2.0)在1995年发布,但为时已晚!
HTML从1990年起已经被World Wide Web(WWW)全球信息项目使用。这一规范大致涵盖了1994年6月份HTML中常见的特性。HTML是ISO标准8879:1986 Information Processing Text and Office Systems; Standard Generalized Markup Language(SGML)的一个应用。
HTML的前期工作99%是前向兼容,and it has certainly withheld the test of time。希望通过探寻HTML的源头,我和大家都理解了HTML以及它未来的走向。
扫码关注w3ctech微信公众号
李老师文章翻译的这么6,技术那么的强,人长的又那么帅,我就想问问,你这是要干嘛的节奏,要干嘛,要干嘛 【哈哈哈哈哈哈】
@尖冰 这是在说我??
共收到2条回复