跳轉到內容

XHTML/媒體型別

25% developed
來自華夏公益教科書,開放的書籍,開放的世界

媒體型別

[編輯 | 編輯原始碼]

XHTML 作為 XHTML

[編輯 | 編輯原始碼]

推薦的媒體型別 用於 XHTML 是application/xhtml+xml;理想情況下,這將把 XHTML 作為 XHTML 提供服務。截至 2006 年 12 月 31 日,只有基於 Gecko 和 Presto 的佈局引擎(分別為 Firefox 和 Opera)支援這種媒體型別。要讓你的 XHTML 被讀取為 XHTML,請將你的標記儲存為.xht 副檔名。

將 XHTML 作為 XHTML 提供服務的最佳實踐

[編輯 | 編輯原始碼]

除了符合 XML 的所有規則外,我們強烈建議你在將 XHTML 作為 XHTML 提供服務時遵守以下實踐

  • 推薦使用 XML 樣式表 PI(處理指令)來關聯外部樣式表
而不是這樣
<link rel="stylesheet" type="text/css" href="/mystyle.css">
XHTML 作為 XHTML 應該包含以下內容
<?xml-stylesheet type="text/css" href="/mystyle.css"?>
<?xml-stylesheet type="text/xsl" href="/mystyle.xsl"?>

XHTML 作為 XML

[編輯 | 編輯原始碼]

XHTML 的另一種媒體型別是通用 XML 媒體型別application/xml。這種媒體型別受到大多數佈局引擎的支援,包括 Gecko、Presto、Web Core、KHTML 甚至 Trident,儘管只有兩個——Gecko 和 Presto——將其作為 XHTML 提供服務;其餘的將其作為 XML 提供服務,這可能導致一些怪癖。也就是說,這是跨相容性的首選媒體型別。將 XHTML 作為 XML 提供服務具有 XML 解析的優點,這意味著與text/html(將 XHTML 作為 HTML 提供服務)不同,XML 語法和 XHTML 語法之間不會出現衝突,因為它們都是相同的。要讓你的 XHTML 被讀取為 XML,請將你的標記儲存為.xml 副檔名。

將 XHTML 作為 XML 提供服務的最佳實踐

[編輯 | 編輯原始碼]

除了符合 XML 的所有規則外,我們強烈建議你在將 XHTML 作為 XML 提供服務時遵守以下實踐

  • 我們鼓勵所有作者透過更高級別的協議設定字元集引數(這可以透過 PHP 等指令碼語言完成)。如果你無法使用該方法(即使你能夠使用該方法),你應該透過 XML 宣告定義你的字元編碼
而不是這樣
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
XHTML 作為 XML 應該包含以下內容
<?xml version="1.0" encoding="utf-8"?>

XHTML 作為 HTML

[編輯 | 編輯原始碼]

第三種選擇是透過text/html 將 XHTML 作為 HTML 提供服務。這實際上會破壞使用 XHTML 進行程式設計的大多數目的,因為 HTML 既不受 XML 解析的約束,也不可擴充套件。此外,將有效 XHTML 作為 HTML 編寫的唯一方法是遵守兩種語言的規則——即使這些規則相互衝突(例如,關於空元素的規則)。最後,HTML 規則適用於 DOM 指令碼和樣式表。

在將 XHTML 作為 HTML 提供服務之前,我們鼓勵你檢查這樣做的目的。一些值得問的問題可能包括:我是否想利用 XML 的可擴充套件性?我是否想讓我的標記被解析為 XML?我是否會利用 XSL 樣式表?如果所有這些問題的答案都是否定的,那麼 HTML 4.01 可能是更好的選擇。但是,如果你決心將 XHTML 作為 HTML 提供服務,XHTML 1.0 Transitional 在技術上允許這樣做。要讓你的 XHTML 被讀取為 HTML,請將你的標記儲存為.htm 副檔名,並確保你的 DTD 是 XHTML 1.0 Transitional。

內容協商

[編輯 | 編輯原始碼]

出於 XHTML 的目的,內容協商是指透過嵌入式指令碼語言(Javascript、PHP)向某些佈局引擎提供一種媒體型別,而向其他佈局引擎提供另一種媒體型別的做法。使用內容協商和簡單地使用text/html 媒體型別提供 XHTML 之間的區別在於,內容協商通常(雖然不總是)將 HTML 作為 HTML 提供服務,而不是將 XHTML 作為 HTML 提供服務。換句話說,根據 UA(使用者代理)的不同,檢視原始碼會顯示 HTML DTD 或 XHTML DTD、XML 宣告或 Content-type 元標記、XML 樣式表 PI 或連結的樣式表。這意味著透過明智的指令碼編寫,可以編寫有效的 XHTML,而無需考慮 HTML 的規則,並利用 XML 的可擴充套件性和高效處理來支援佈局引擎,同時使用大部分相同的標記編寫有效的 HTML(不包括上述可擴充套件性和處理)來支援其他佈局引擎。

媒體型別和佈局引擎

[編輯 | 編輯原始碼]

媒體型別和佈局引擎的比較

[編輯 | 編輯原始碼]

使用不同的媒體型別提供格式良好的 XHTML 文件時的響應。

Trident Tasman Gecko WebCore KHTML Presto iCab
application/xhtml+xml 提示下載 提示下載 XHTML XML HTML XHTML (X)HTML
application/xml XML 崩潰 XHTML XML XML XHTML 文字
text/html HTML HTML HTML HTML HTML HTML HTML

Presto 媒體型別說明

[編輯 | 編輯原始碼]
  1. application/xml——為了在基於 Presto 的佈局引擎(如 Opera、Opera Mini 或 Opera Mobile)中獲得 XML 處理的優勢,必須使用 XSL 樣式表將 XHTML 轉換為 XML。[1].

WebCore 媒體型別說明

[編輯 | 編輯原始碼]
  1. application/xhtml+xml、application/xml、text/xml——HTML 實體和由自定義 DTD 定義的自定義實體不被識別。

KHTML 媒體型別說明

[編輯 | 編輯原始碼]
  1. application/xhtml+xml——KHTML 支援這種媒體型別,但將文件作為 HTML 處理。
  2. application/xml、text/xml——HTML 實體和由自定義 DTD 定義的自定義實體不被識別。

iCab 媒體型別說明

[編輯 | 編輯原始碼]
  1. application/xhtml+xml——CSS 中的型別選擇器不區分大小寫。

XML 解析

[編輯 | 編輯原始碼]

將以下文件儲存為兩個副本,一個為 badlyFormed.html,另一個為 badlyFormed.xhtml。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>Not well-formed</title>
 </head>
 <body>
  <p>An XHTML-compliant browser should refuse to render any part of this page.</p>
  <p>This paragraph is <b><i>not</b> well-formed</i>.
 </body>
</html>

根據 XHTML 規範所基於的 XML 規範,符合標準的瀏覽器應該拒絕渲染文件的任何部分。相反,它應該返回一條錯誤訊息。開啟 badlyFormed.xhtml。你應該收到一條類似於以下訊息的錯誤訊息

XML Parsing Error: mismatched tag. Expected: </i>.
Location: file:///D:/Practice/XHTML/BadlyFormed.xhtml
Line Number 8, Column 35:

  <p>This paragraph is <b><i>not</b> well-formed</i>.
----------------------------------^

如果您沒有收到錯誤訊息,則可能是 MIME 型別設定不正確或您的瀏覽器不相容。Microsoft Internet Explorer 版本 7.0 及更低版本不相容。Mozilla Firefox 相容(至少從版本 1.0 開始,可能在更早的版本中也相容)。

使用 Firefox,您可以檢查頁面的 MIME 型別。從工具選單中選擇頁面資訊選項。在常規選項卡上向下三行是“型別:”。badlyFormed.xhtml 的型別應該是application/xhtml+xml。如果不是,則您沒有將副檔名.xhtml對映到application/xhtml+xml

現在嘗試用 Firefox 開啟 badlyFormed.html。該頁面可能會顯示,與 XHTML 規範相反。檢查 MIME 型別。它應該是text/html。這意味著 Firefox 將文件解析為 HTML,而不是 XHTML。網頁瀏覽器通常會顯示 HTML,無論頁面上是否有任何錯誤,因此該頁面會呈現。

華夏公益教科書