一千萬個為什麽

搜索

HTML 4,HTML 5,XHTML,MIME類型 - 權威資源

HTML與XHTML和XHTML作為text/html與XHTML作為XHTML的主題非常復雜。不幸的是,很難得到一個完整的圖片,因為信息主要是在網絡上的點點滴滴傳播,或深埋在W3C技術術語中。此外還有一些錯誤的信息被傳播。我建議將此作為關於該主題的權威SO資源,描述最重要的方面:

  • HTML 4
  • HTML 5
  • XHTML 1.0 as text/html,application/xml + xhtml
  • XHTML 1.1 as application/xml + xhtml

每個人的實際意義是什麽?
什麽是常見的陷阱?
適當的MIME類型對每個?
的重要性是什麽? 不同的瀏覽器如何處理它們?

我希望每項技術都能找到一個答案。我正在制作一個社區維基,所以請編輯答案以完成圖片,而不是提供多余的答案。隨意從存根開始。也可以隨意編輯這個問題。

最佳答案

內容。

  • 術語
  • 語言和序列化
  • 規格
  • 瀏覽器分析程序和內容(MIME)類型
  • 瀏覽器支持
  • 驗證器和文檔類型定義
  • Quirks,有限怪癖和標準模式。

術語

One of the difficulties of describing this is clearly that the 術語 within the official 產品規格 has changed over the years, since HTML was first introduced. What follows below is based on HTML5 術語. Also, "file" is used as a generic term to mean a file, document, input stream, octet stream, etc to avoid having to make fine distinctions.

語言和序列化

HTML和XHTML是根據語言和序列化定義的。

該語言定義了元素和屬性的詞匯,以及它們的內容模型,即哪些元素被允許在哪些元素中,哪些屬性被允許在哪個元素上,以及每個元素和屬性的目的和含義。

The serialization defines how mark-up is used to describe these elements and attributes within a text document. This includes which tags are required and which can be inferred, and the rules for those inferences. It describes such things as how void elements should be marked up (e.g. “>” vs “/>”) and when attribute values need to be quoted.

產品規格

HTML 4.01規範是定義HTML語言和HTML序列化的當前規範。

The xml 1.0 specification defines a serialization but leaves the language to be defined by other 產品規格, which are termed “XML applications”

The XHTML 1.0 and 1.1 產品規格 are both in use. Essentially, they use the same language as HTML 4.01 but use a different serialization, one that is compatible with the xml 1.0 specification. i.e. XHTML is an xml application.

The HTML5 (as of 2010-04-18, draft) specification describes a new language for both HTML and XHTML. This language is mostly a superset of the HTML 4.01 language, but is intended to only be backward compatible with existing web tools, (e.g. browsers, search engines and authoring tools) and not with previous 產品規格, where differences arise. So the meaning of some elements are occasionally changed from the earlier 產品規格. Similarly, each of the serializations are backward compatible with the current tools.

瀏覽器分析器和內容(MIME)類型

將文本文件發送到瀏覽器時,會將其解析為其內部存儲器結構(對象模型)。為此,它使用遵循HTML序列化規則或XML序列化規則的解析器。它使用哪種解析器取決於它根據“內容類型”HTTP標頭上的非本地文件推斷出的內容類型。在內部,一旦解析了文件,瀏覽器就會以幾乎相同的方式處理對象模型,無論它最初是使用HTML還是XHTML序列化提供的。

對於瀏覽器使用其XHTML解析器,內容類型HTTP標頭必須是XML內容類型之一。最常見的是,這是 application/xmlapplication/xhtml + xml 。任何非XML內容類型都意味著該文件無論是否符合所有XHTML語言和序列化規則,都不會被瀏覽器作為XHTML處理。

使用HTTP內容類型的 text/html (或在大多數回退場景中,缺少內容類型或任何其他非XML類型)將導致瀏覽器使用其HTML序列化解析器。

兩個解析器之間的一個關鍵區別是HTML序列化解析器執行錯誤恢復。如果解析器的輸入文件不符合HTML序列化規則,則解析器將以從先前瀏覽器反向設計的方式恢復,並繼續構建其對象模型,直到它到達文件末尾。 HTML5包含恢復的第一個規範定義,但是截至2010-04-26,主流瀏覽器沒有發布在發布版本中啟用的算法實現。

相反,XML序列化解析器在遇到無法解釋為XML的任何內容時(即,當它發現文件不是XML格式良好時)將停止。這是XML 1.0規範解析器所必需的。

瀏覽器支持

大多數現代瀏覽器都支持HTML解析器和XML解析器。但是,在Microsoft Internet Explorer 8.0及更早版本中,XML解析器無法直接創建用於呈現為HTML頁面的對象模型。但是,可以使用XSLT文件處理XML結構以創建流,然後使用HTML解析器解析該流以創建可以呈現的對象模型。

從Internet Explorer 9 Platform Preview開始,使用XML內容類型提供的XHTML可以直接以與其他現代瀏覽器相同的方式進行解析。

當他們的XML解析器檢測到他們的輸入文件不是XML格式良好時,某些瀏覽器會顯示錯誤消息,而其他瀏覽器會將頁面顯示為構造到檢測到錯誤的位置,並且有些瀏覽器會為用戶提供獲取文件的機會使用HTML解析器重新解析。

驗證器和文檔類型定義

HTML和XHTML文件可以以文檔類型定義(DTD)聲明開頭,該聲明指示文檔中使用的語言和序列化。驗證器(例如 http://validator.w3.org/ 上的驗證器)使用此信息來匹配語言和文件中使用的序列化對照DTD中定義的規則。然後,它會通過在文件中標記來根據違反DTD規則的位置報告錯誤。

Not all HTML serialization and language rules can be described in a DTD, so validators only test for a subset of all the rules described by the 產品規格.

HTML 4.01和XHTML 1.0定義了Strict,Transitional和Frameset DTD,它們在兼容文件中允許的語言元素和屬性不同。

基於HTML5的驗證器(如 validator.nu )更像瀏覽器,根據HTTP內容類型處理頁面並使用非基於DTD的規則集,以便捕獲DTD無法描述的錯誤。

Quirks,有限怪癖和標準模式。

瀏覽器不會驗證發送給它們的文件。它們也不使用任何DTD聲明來確定文件的語言或序列化。但是,他們確實使用它來猜測頁面創建的時代,因此可能是作者當時對瀏覽器的期望解析和呈現行為。因此,它們定義了三種解析和渲染模式,稱為Quirks模式,Limited Quirks(或Almost Standards)模式和Standards模式。

使用XML內容類型提供的任何文件始終以標準模式處理。對於使用HTML解析器解析的文件,如果沒有提供DTD或確定DTD非常舊,則瀏覽器使用其怪癖模式。從廣義上講,處理為text/html的HTML 4.01和XHTML文件如果包含過渡DTD,則使用有限的怪癖模式處理,如果使用嚴格的DTD,則使用標準模式。

Where the DTD is not recognised, the mode is determined by a complex set of rules. One special case is where the public and system identifiers are omitted and the declaration is simply <!DOCTYPE HTML>. This is known to be the shortest doctype declaration where current browsers will treat the file as standards mode. For that reason, it is the declaration specified to be used for HTML5 compliant files.

轉載註明原文: HTML 4,HTML 5,XHTML,MIME類型 - 權威資源