码迷,mamicode.com
首页 > Web开发 > 详细

(译)html,xhtml,html5历史演变

时间:2018-08-25 11:35:34      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:文件中   类型   错误处理   2016年   有趣   web应用   兼容   美的   java   

翻译自:http://www.thymeleaf.org/doc/articles/fromhtmltohtmlviahtml.html

从HTML到HTML (通过HTML)

当您使用Thymeleaf等软件时,了解HTML系列Web标准的内部非常重要。 至少如果你想了解你在做什么。

问题是许多人都知道他们用于创建网络的技术,但并不真正知道这些技术的来源。 自第一个Web界面开始以来,它已经走了很长的路,从那以后,每一项新技术都通过弃用我们的大量工作,尤其是我们的知识,来改变我们的Web开发方式。

现在,随着HTML5的到来,事情变得更加复杂。它是什么? 为什么HTML代替XHTML? HTML标签汤不是被认为有害吗?

让我们倒退一步,看看我们如何到达现在的位置,以及如何到达的。

1回到90年代,这里是HTML…

…HTML是一个标准(更正确的说,是一个推荐) 由万维网联盟(World Wide Web Consortium,W3C)维护。从一种名为SGML的语言扩展而来,HTML定义了一种基于标记的语言,用于编写超文本文档,而超文本文档耦合于超文本传输协议(Hyper-Text Transfer Protocol,HTTP,用于服务超文本文档及其相关资源通过网络传输)。

HTTP使用文本头(headers)来定义向客户端提供的服务以及如何服务,其中一个非常重要: 内容类型(Content-Type)头。 这个头向浏览器解释了服务提供哪种类型的内容,使用一种称为多用途Internet邮件扩展(Multipurpose Internet Mail Extensions,MIME)的语言。HTML文档服务的MIME类型是text/html:

Content-Type: text/html

HTML还定义了一种检查文档是否有效(valid)的方法。有效基本意味着文档是根据HTML规则编写的,规则规定了标签可以具有那些属性,标签可以出现在文档的哪些位置,等等。

这些有效性规则是使用一种语言来指定的:用于定义SGML文档结构的文档类型定义(Document Type Definition,简称DTD)。每个版本的HTML都创建了一个标准DTD,并且HTML文档都必须声明DTD(指定了HTML版本),通过一个需要出现在首行的子句来确认, 即文档类型声明(Document Type Declaration,简称DOCTYPE)子句:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

2文档对象模型和标签汤(tag soup)

HTML用于在浏览器中显示文档,而在90年代后期,浏览器是由竞争激烈的厂商开发,这些厂商希望为用户提供最多的酷炫功能。鉴于HTML仅定义了文档格式的规则,许多其他功能留给了浏览器开发人员的想象力。

浏览器中出现的最有趣的想法之一是客户端交互性(client-side interactivity)。这种交互性是通过执行浏览器内部的脚本实现 – 基于某种语言编写如JavaCript,提供脚本对文档的部分进行处理、修改甚至执行事件的能力。为此,浏览器必须将HTML文档建模为对象的内存树,每个对象都有状态和事件,因此文档对象模型(Document Object Model,简称DOM)诞生了。

问题在于,良好格式的HTML规则非常松散,而DOM树是严格的层次结构,这意味着HTML标记位置和序列的不同解释可能导致不同浏览器中的不同DOM对象树。除此之外,这些不同的浏览器以不同的方式(不同的名称,事件等)为DOM节点的API建模,您现在了解当时创建跨浏览器交互的难度了。

更重要的是:虽然所有这些都发生了,但是浏览器对于HTML开发者来说已经变得非常宽容,允许他们来编写格式不正确的HTML文档(标记汤),这通过自动纠正错误实现。这导致HTML开发者创建更糟糕格式的文档,然后浏览器允许更多的格式错误,恶性循环。然后可以猜到:每个浏览器都以不同的方式纠正所有这些错误。太糟糕了。

W3C最终标准化了DOM API和Web浏览器中的脚本语言:JavaScript(尽管出于某些复杂的原因,他们坚持称其为ECMAScript)。 但是,标签汤的世界所造成的损害加上浏览器制造商完全缓慢的采用这些标准,因为在许多情况下担心它们会损害向后兼容性,产生的影响仍然影响着我们今天创建Web应用的方式。

3进入XML

在HTML成为广泛传播的语言之后的一段时间,W3C开发了一种名为XML(eXtensible Markup Language,可扩展标记语言)的新规范, 旨在以分层标记文本的形式表示通用数据(不仅仅是Web)。

XML是可扩展的,因为它允许定义特定于目的的语言(标记及其属性)以满足特定场景的需要。但从XML视角来看,HTML文档并非格式良好的,XML与HTML实际上仍然是不兼容的语言。无法将HTML表示为XML应用。

由于严格分层并消除了HTML的结构模糊性,XML文档可以更直接地转换为标准化的DOM树(称为XML解析的过程)。 另外,鉴于XML是一种基于文本的语言,并且该文本是一种与技术无关的格式(与二进制相反),XML特别适合跨互联网的跨平台数据交换。事实上,它导致了现在无处不在的Web Services技术的诞生。

4HTML + XML = XHTML

在某些时候,由于XML的明显有用性以及它可以使Web文档更具可扩展性和可互操作性(例如,在浏览器中生成更多可预测的DOM)这一事实,W3C决定将HTML重新表述为XML方言(或应用)而不是SGML,因此XHTML诞生了。

XHTML的引入以及将Web文档转换为格式良好的XML通常被视为向前迈进了一步,因为它允许跨浏览器的更高级别的标准化,更少的创作错误(必须以特定于浏览器的方式进行纠正)空间,以及更容易解析和自动处理网页。

作为其中的一部分,XHTML引入了一个直接来自XML的有争议的概念,称为严格错误处理(Draconian Error Handling),这意味着任何XML解释器(包括现在的浏览器)如果在正在处理的XML文档中发现任何类型的格式错误都应该立即失败。在实践中,这意味着XHTML开发者必须创建格式完美的文档,或接受浏览器永远不能(事实上允许)显示它们的事实。

为了验证,XHTML 1.0规范定义了一组可以在DOCTYPE子句中使用的DTD:XHTML 1.0 Strict, XHTML 1.0 Transitional 和 XHTML 1.0 Frameset。第一个用于纯(pure)XHTML文档,不使用来自HTML的任何已弃用的标记;第二个用于仍然使用不推荐的标记和属性的过渡文档;第三个用于框架集页面。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

但是XHTML最重要的一个方面是它还引入了一种新的MIME类型,这是每个Web服务器应该用来提供XHTML的类型,以便浏览器知道他们必须使用他们的XHTML解析器和引擎而不是 他们的HTML解析器和引擎。这就是application/xhtml+xml:

Content-Type: application/xhtml+xml

5(XHTML的)骨感现实

在它推出之后,XHTML的一切看起来都很棒。我们的开发人员应该等待浏览器完全实现它,而Web开发的世界会突然变得更加快乐...

麻烦的是,以上从未发生过。

发生的事情是,一个特定的浏览器只是拒绝实现对application/xhtml+xml内容类型的支持。猜猜哪一个。是的,确切地说,就是它,IE浏览器。

当您尝试访问使用XHTML自己的内容类型的文档时,IE11之前的版本显示下载对话框,当然这意味着如果您希望能够将您的网站显示给IE用户,则无法使用该内容类型。当这个问题被纠正时,已经太晚了。

幸运或者可能不幸的是,XHTML 1.0规范包含一个附录,该附录声明XHTML 1.0的内容也可以使用HTML时代的旧的text/html内容类型来提供,以便于过渡。 这正是我们大多数人在过去几年中所做的事情:创建XHTML 1.0内容,然后将其作为text/html提供。鉴于XHTML 1.0规范于2000年发布,过渡时间(transition)很长。

但事实是,当您将内容作为HTML而不是XHTML提供时,浏览器将使用其HTML引擎,而不是XHTML特定的引擎。尽管他们的HTML引擎已经支持XHTML,但它们仍然必须向旧的HTML 4代码提供向后兼容性,这使得它们成为非常棘手的软件。而且重要的是,它们缺少XHTML的一些最具XML的功能,首先就是严格错误处理。

如果你没有严格错误处理, 您将拥有一个宽容的引擎,可以让您提供格式不正确的文档,自动纠正您的错误。如果你知道浏览器会纠正你的错误(以浏览器特定的方式),你可能永远不会纠正你的文件......所以HTML恐怖故事仍在继续。

知道这一点,考虑你可能从未真正创建过真正的XHTML网站。 您所做的是将(可能是格式不正确的)XHTML文档作为普通的旧HTML提供和显示。怎么样?

但它变得更糟,因为在2002年XHTML 1.1删除了使用HTML内容类型的可能性, 因此只允许application/xhtml+xml。问题在于,不是强迫Internet Explorer支持application/xhtml+xml,事实是这种限制只是将XHTML 1.1转变为与尼斯湖水怪一样的神话生物。几乎没有人用过它。

在2009年,W3C再次允许使用带有XHTML 1.1的text/html,但为时已晚。

6走向HTML5:一个分道扬镳的故事

在某些时候(特别是2004年),一些浏览器厂商意识到现有的XHTML规范发展得太慢,无法应对web不断增长的需求(视频,音频,更丰富的应用程序界面...),而W3C越来越多地推动它们朝对文档进行更严格解释的方向,最终可能导致大量(格式错误的)现有代码无效。

他们希望通过视频,音频,本地存储或高级表单处理等功能来增强Web应用,事实上,他们可以通过以浏览器特定的方式添加这些功能来实现,但他们不想再走不兼容的路。他们需要标准来发展并包含这些新功能。

然而,当时的标准(即XHTML)出现了一个问题:仍然有很多网站和应用仍然依赖于遗留的HTML,如果那些很酷的新功能通过严格的XHTML标准化了,所有这些应用永远不能使用新功能,除非它们被完全重写。每个人都想要一个更具互操作性和标准的网络,但不能以丢失数百万网络开发者多年的工作为代价。

于是这些厂商(以及一些成员)向W3C提出了以一种发展HTML的想法,即让所有(或大多数)现有HTML和XHTML代码作为新HTML仍然有效,同时为Web应用程序提供强大的新功能,并且重要的是明确定义应该进行错误处理的方式。

后一点意味着浏览器不是在第一个问题上出错,而是通过规范知道如何对Web开发者创建的错误进行自动纠正, 因此会以完全相同的方式对它们做出反应,从而有效地转换HTML代码(无论是否是XML格式),这完全跨浏览器。您仍然被建议为新网站创建XML格式的代码,但如果您不喜欢或者您仍然拥有大量旧的遗留HTML(通常情况),您仍然可以参与。看那个旧的HTML网站吗?让我们添加一些视频吧!这一切听起来都很明智。

但事实是,所有这些对于W3C来说在2004年听起来并不是那么好,他们拒绝了这个提议,并决定严格遵守XHTML方式。 HTML对他们来说已经死了,没有理由让它复活,而XHTML 2.0就是未来。

这导致了分道扬镳。HTML新概念的支持者,包括来自Opera Software,Mozilla Foundation和Apple的成员,离开了W3C并成立了Web Hypertext Application Technology Working Group (WHATWG),目的是定义我们今天所知的HTML5。

最后,在2007年,W3C创建了一个next-generation HTML工作组,后来接受了与WHATWG的合作,有效地采用HTML5作为他们的工作规范和未来的目标。 W3C和WHATWG现在已经联合起来创建HTML5,而在2009年,W3C只是让XHTML 2.0因关闭其规范的团队而死去。

HTML5现在是Web标准的唯一未来。

7那么HTML5是什么?

HTML5是一套标准 - 截至2011年仍处于开发阶段 - 从当前的HTML 4和XHTML规范发展而来,旨在:

  • 为HTML添加高级新功能,有效地将Web开发从面向文档的理念转移到更加面向应用程序的理念。这些功能称为HTML5 功能,在某些情况下,除了HTML5核心功能之外,它们本身也由标准定义。HTML5功能- - 包括:视频,音频,绘图画布,地理位置,本地存储,离线支持和高级表单相关功能。
  • 提供从HTML和XHTML迁移的无痛路径,这使得HTML5的采用很少或根本不重写代码。
  • 提供处理代码错误的标准方法,以便格式错误的HTML5代码在所有浏览器中以相同的可预测方式执行。

从实际的角度来看,这意味着只需将您的DOCTYPE更改为HTML5对应的,即可将当前的HTML和XHTML代码(可能全部)视为有效的HTML5:

<!DOCTYPE html>

通过内容类型text/html提供内容:

Content-Type: text/html

在这里你可能会想:为什么DOCTYPE根本没有指定DTD?因为没有。HTML5没有DTD,因为定义文档是否有效的规则在规范中被定义为人类可读的文本,但不能用DTD语言表示。

但这并不意味着HTML5解析器和引擎无法验证。它可以。 它只需要是一个专门用于HTML5解析的程序,包括为执行验证HTML5所涉及的规则而编程的特定代码(而不是从DTD文件中读取这些规则)。即使规范现在非常灵活,它仍然是一个规范,你必须遵守它。

但是如果没有DTD,为什么要有DOCTYPE子句呢? 因为需要DOCTYPE子句才能使浏览器以标准模式(Standards Mode)显示文档(而不是怪异模式Quirks Mode)。<!DOCTYPE html>可能是最小而有效DOCTYPE声明,这正是我们所需要的。它只是一个开关。

8我可以使用HTML5了吗?

大多数是的。 虽然(截至2016年)没有完全实现整个HTML5功能集的浏览器,但大多数常见功能集确实实现了大部分功能。 因此,只要您的用户不会遇到非常旧版本(现已不存在的)Internet Explorer,您在大多数情况下都应该没问题。

另外,请注意浏览器支持实际上随着时间的推移而发展,这不仅是因为浏览器发布新版本的速度很快,而且因为规范本身仍在进行中。

有关HTML5功能的列表以及相应的浏览器支持, 检查Can I use… 站点。 值得注意的是,所有的HTML5功能的类别列表: http://caniuse.com/#cats=HTML5

9关于XHTML5?它存在吗?

从理论上讲,是的。XHTML5只是HTML5通过如下方式服务:

Content-Type: application/xhtml+xml

注意,IE11之前(Microsoft Edge支持)不支持此功能。 再次,考虑一下您用户的浏览器功能。

注意,HTML5和XHTML5之间的区别仅仅在于内容类型,因为XML格式良好的HTML5文档实际上是完全有效的HTML5文档。这与HTML4和XHTML 1.0/1.1之间的关系完全不同,后者是不兼容的语言。

(译)html,xhtml,html5历史演变

标签:文件中   类型   错误处理   2016年   有趣   web应用   兼容   美的   java   

原文地址:https://www.cnblogs.com/redreampt/p/9532863.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!