(譯)html,xhtml,html5曆史演變

來源:互聯網
上載者:User

標籤:檔案中   類型   錯誤處理   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定義了一種基於標記的語言,用於編寫超文字文件,而超文字文件耦合於超文字傳輸通訊協定 (HTTP)(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,可延伸標記語言 (XML))的新規範, 旨在以分層標記文本的形式表示通用資料(不僅僅是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曆史演變

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.