1.1 标记语言与HTML标准体系


1.1 标记语言与HTML标准体系

本节摘要:标记语言是一类"在纯文本中嵌入结构说明"的形式语言,HTML(超文本标记语言)是万维网的结构层标准。本节讲清标记语言与编程语言的本质区别、HTML 标准三十年的演进脉络,以及 Living Standard(活标准)模式对开发者的实际影响。

学习目标

阅读完本节,你应当能够:

  1. 用一句话说清"标记语言"与"编程语言"的区别;
  2. 按时间顺序说出 HTML 标准演进的几个关键节点;
  3. 解释 W3C 与 WHATWG 两个组织的分工变化;
  4. 理解 Living Standard 与"版本号标准"两种模式的差异。

一、从"标记"这个词说起

"标记"(markup)一词来自出版业。编辑审稿时会在手稿边缘写各种记号:这里改用标题字体、这里起一个新段落、这里需要加粗。这些记号不是文章内容的一部分,而是对文章的"关于内容的说明"。上世纪六十年代,计算界把这套做法搬进了文本处理系统,IBM 的 Charles Goldfarb 团队据此发展出 GML,后来标准化为 SGML(标准通用标记语言,1986 年成为国际标准)。SGML 定义了一套"如何定义标记语言"的元规则,堪称标记语言界的宪法。

顺着这条线看,HTML 的血统就清楚了:它是 SGML 的一种应用。1991 年前后,Tim Berners-Lee 在欧洲核子研究中心为了物理学家互相交换文献,借鉴 SGML 的语法挑了不到二十个标签,造出了 HTML——HyperText Markup Language,超文本标记语言。HyperText(超文本)指通过链接可以从一份文档跳到另一份,Markup(标记)指文档里混着结构说明。两个词合起来就是这个语言的全部野心:让结构化的文档互相连接。

那标记语言和编程语言到底差在哪?判断标准只有一条:有没有控制流。编程语言有顺序、分支、循环,描述"计算机一步步做什么";标记语言没有这些,它描述"东西是什么",是一份对内容的声明。你可以用 HTML 声明"这是一级标题",但不能用 HTML 命令浏览器"循环生成一百个标题"。所以 HTML 不是程序,浏览器也不是在"运行"HTML,而是在"解析"它——把标记翻译成一颗文档对象树,再呈现出来。理解这一点,你就明白为什么 HTML 是"结构层",而赋予页面行为的事情交给了 JavaScript。

演进时间线一图流

演进时间线一图流

二、标准是谁定的

1995 年的 HTML 2.0 由 IETF(互联网工程任务组)发布,是第一份正式标准,表单元素从这里进入语言。1997 年起主导权转到 W3C(万维网联盟),连续推出 HTML 3.2、4.0、4.01。HTML 3.2 是一段弯路:大量字体、颜色、对齐类标签被塞进语言,结构与表现搅在一起,页面越写越乱。HTML 4.01 及时纠偏,把表现类标签标记为废弃,提出"结构与表现分离"的原则——这个原则直到今天仍是前端的公理。

2000 年前后的 XHTML 1.0 是另一次激进的纠偏:把 HTML 改造成符合 XML 语法要求的严格形式,所有标签必须小写、必须闭合。方向很美好,现实很骨感——绝大多数页面根本达不到 XML 的严格度,一个语法错误就会让整页白屏。浏览器厂商和开发者都不买账。

转折发生在 2004 年。苹果、Mozilla、Opera 三家浏览器厂商组建 WHATWG,主张走另一条路:不推翻语法,而是把"浏览器实际怎么做"和"开发者实际要什么"记录成规范,同时补上 Web 应用需要的 API——离线存储、绘图、多媒体。这条务实路线的产物就是 HTML5:语法宽容、向后兼容、内置 audio/video/canvas、新增一批语义化标签。2007 年 W3C 认可这条路线并与之合作,2014 年 HTML5 成为 W3C 推荐标准。此后 W3C 还试图走 XHTML2 和后来的版本分叉,均无果,2019 年双方达成协议:HTML 标准唯一权威版本由 WHATWG 维护,W3C 不再单独发布 HTML 版本。

三、Living Standard 意味着什么

今天你查 HTML 规范,看到的是一份没有版本号的文档,叫 HTML Living Standard(活标准)。它的含义是:规范是一个持续更新的快照,新特性以"已实现即可写入"的方式逐步进入,不存在"HTML6"这样的发布事件。

这对开发者的实际影响有三点。第一,学习资料要看日期:网上大量教程停留在 HTML5 时代,某些标签(比如 acronym)早已废弃,新元素(比如 dialog、popover 属性)又不会被旧教程覆盖。查规范或 MDN 这类持续维护的文档,比背任何一本书都可靠。第二,特性可用性要看浏览器支持度,而不是"标准里有没有"——标准里有不等于所有浏览器都实现了。第三,DOCTYPE 声明从此稳定为 <!DOCTYPE html> 一行,它只表示"这是标准模式下的 HTML",不再携带版本号。你在老项目里见到的长串 DOCTYPE,是 HTML 4.01 时代的遗产,说明那个页面引用的是 SGML DTD,如今只剩历史价值。

跑一段最小验证:现代写法只需一行声明。

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>现代写法</title> </head> <body> <p>标准模式,一行声明搞定。</p> </body> </html>

而 HTML 4.01 时代的遗留写法,DOCTYPE 里要塞进一长串公开标识符和 DTD 地址(形如"引用 HTML 4.01 严格版文档类型定义"的声明),当年的解析器理论上还要据此取回 DTD。今天的浏览器已经不真的去取那份 DTD,只靠开头几个字符判断是否标准模式——所以那串长声明只剩历史价值,新项目一律写一行版。

⚠️ 常见坑:有人把 DOCTYPE 写错或干脆不写,浏览器会退回"怪异模式"(quirks mode),盒模型计算和表格继承规则都会变,页面莫名出现几像素错位时先检查这里。

六、本册后续如何使用"标准"这个概念

本册采用"概念筑基"路线,"标准"会反复出现在三个位置:讲语法时,标准是判定合法性的依据(第 1 章剩余各节);讲语义时,标准是每个元素含义的权威解释(第 2 章);讲新特性时,标准是区分"已定型"与"提案中"的标尺(第 5 章)。建议从现在起建立一个习惯:遇到"这个标签能不能这么用"的问题,第一反应不是试一遍看报不报错——浏览器容错会让你得到假阳性——而是查一下标准里该元素的定义与内容模型。试错可以建立直觉,查证才能建立确定性。

四、标记语言家族横向对比

把 HTML 放回家族里看,很多设计决策会突然变得合理。同属 SGML 谱系或受其影响的标记语言还有好几种,它们各自解决不同的问题:

语言 语法严格度 关注点 典型用途
SGML 极严,需 DTD 定义标记语言的元规则 历史 document 系统
HTML 宽容,容错是规范的一部分 文档结构与语义 网页
XHTML 严格,XML 语法 HTML 的 XML 化重写 已基本退场
XML 严格,错误即致命 数据的结构化描述 配置、数据交换
Markdown 极简 人类可读可写 笔记、文档

这张表里最有信息量的一行对比是 HTML 与 XML。两者语法上都用尖括号包标签,但错误处理哲学截然相反:XML 解析器遇到一处语法错误,整个文档拒绝解析,这叫"致命错误"(fatal error);HTML 解析器遇到任何错误都继续解析,并且纠错行为本身也被写进了标准——两家浏览器对同一段错误代码必须构建出同一棵 DOM,这是"容错标准化"而不是"随意容错"。为什么会有这种差别?因为使用场景不同。XML 的用户是程序:一份配置文件错一个字符,宁可失败也不能将错就错。HTML 的用户是全人类:一个拼写错误就让新闻页面白屏,Web 根本活不过第一个十年。

Markdown 则展示了另一个极端:标记符号极简(星号、井号、短横线),牺牲表达力换取书写速度。它证明了标记语言的价值密度取决于"目标读者的需求"——Markdown 的读者是人眼,HTML 的读者是浏览器、搜索引擎与读屏器,XML 的读者是另一个程序。理解了这一点,你就不会犯"用 Markdown 的心态写 HTML"的错误:HTML 的冗长不是缺点,是给机器的精确性付费。

💡 关键直觉:判断一门语言"好不好写"之前,先问"它写给谁读"。

五、常见疑问解答

问题一:既然 HTML 不断演进,我几年前学的会作废吗?

核心语法与绝大多数元素非常稳定。二十年前页面的主体结构(head、body、p、a、table)今天原样可用,HTML5 之后新增的都是增量。真正会过时的是三类东西:被废弃的表现类标签(font、center 这类,浏览器仍认但语义上已死)、被新机制替代的写法(比如老式跨域通信 hack 被 postMessage 取代)、以及停留在某个时间点的旧教程认知。跟着 Living Standard 维护的文档走,知识折旧率很低。

问题二:HTML、HTML5、HTML5.2 这些叫法什么关系?

日常说"HTML5"如今泛指"现代 HTML",包括语义标签、多媒体元素、表单增强和一批配套 API。编号版本(5.2、5.3)是 W3C 时代的快照式发布;2019 年之后唯一权威是 WHATWG 的 Living Standard,不再有编号版本。所以新语境下直接说 HTML 即可,"HTML5"更多是历史称谓与营销词汇。

问题三:学 HTML 之前要不要先学 XML 或 SGML?

不需要。SGML 是学术古董,XML 在前端日常里只剩 SVG 与少数配置场景会碰到。直接从 HTML Living Standard 的概念体系入手是最短路径——本册第 1 章做的就是这件事:把标准里最常被用到的那部分公理(元素、属性、内容模型、类别)翻译成工程语言。

问题四:为什么有的资料说 HTML 是"编程语言"?

那是口语上的宽泛用法,严格说不准确。判断标准还是控制流:HTML 无法表达条件与循环,它不"运行",只被"解析"。不过在真实前端岗位上,"会 HTML"当然包含了对这个生态的理解——解析行为、DOM 映射、与 CSS 和脚本的协作面——这些本册都会覆盖。

问题五:W3C 和 WHATWG 我该关注哪个?

读规范条文时,以 WHATWG 的 HTML Living Standard 为准;W3C 如今在 Web 领域的活跃产出集中在可访问性指南(WCAG)、CSS 规范的联合维护等方向。日常开发不需要盯组织动态,但读懂标准文档的技能值得投资一次:规范里每个元素都有"定义、类别、内容模型、属性、示例"五段式结构,本册带你拆过一两个之后,你就能自己查任何元素。

本节要点回顾

(本节时间线与治理变迁内容较多,记不清时回看本节那张演进图即可,脉络一次看全。)

(另记一个心法:学任何标准知识点时,先查它现在归谁维护、处于什么状态,答案决定你该用什么姿势使用它。)

  • 标记语言描述"是什么",编程语言描述"怎么做":HTML 没有控制流,它是声明式的结构描述。
  • 血统:HTML 源自出版业的标记传统,经 SGML 发展而来,1991 年由 Berners-Lee 创建。
  • 演进主线:IETF 的 2.0 → W3C 的 3.2/4.01(弯路与纠偏)→ XHTML 的严格化失败 → WHATWG 的务实路线 → HTML5 → Living Standard。
  • HTML5 的定位:不是一次语法革命,而是"宽容语法 + 应用 API + 语义标签"的集大成。
  • 活标准时代:无版本号、持续演进,查文档要看更新日期,用特性要看浏览器支持度。
  • DOCTYPE 只剩一行<!DOCTYPE html> 表示标准模式,写错会触发怪异模式。

下一节我们进入语言内部,拆解元素与标签的语法模型——那才是 HTML 这门语言真正的零件图。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U