跳至內容

XHTML

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
XHTML
副檔名
.xhtml, .xht, .html, .htm
網路媒體型式
application/xhtml+xml
開發者World Wide Web Consortium
格式類型標記語言
延伸自XML, HTML
標準1.0 (Recommendation),

1.1 (Recommendation),
1.1 SE (Working Draft),
5 (Working Draft),

2.0 (Working Draft)

可擴展超文本標記語言(英語:eXtensible HyperText Markup LanguageXHTML),是一種標記語言,表現方式與超文本標記語言HTML)類似,不過語法上更加嚴格。從繼承關係上講,HTML是一種基於標準通用標記語言SGML)的應用,是一種非常靈活的置標語言,而XHTML則基於可擴展標記語言XML),XML是SGML的一個子集。XHTML 1.0在2000年1月26日成為W3C的推薦標準。

XHTML1.1為XHTML最後的獨立標準,2.0止於草案階段。XHTML5則是屬於HTML5標準的一部份,且名稱已改為「以XML序列化的HTML5」,而非「可擴展的HTML」。在今日(2017年),XHTML5比起HTML5仍遠遠並非主流。

概述

XHTML是「3種HTML 4文件根據XML 1.0標準重組」而成的[1]。而W3C亦繼續建議使用HTML 4.01和積極地研究HTML5及XHTML的計劃。於2002年8月發表的XHTML 1.0的建議中,W3C指出XHTML家族將會是Internet的新階段。而轉換使用XHTML可以令開發人員接觸XML和其好處,並可以確保以XHTML開發的網頁於未來的相容性。

HTML語法要求比較鬆散,這樣對網頁編寫者來說,比較方便,但對於機器來說,語言的語法越鬆散,處理起來就越困難,對於傳統的電腦來說,還有能力兼容鬆散語法,但對於許多其他設備,比如手機,難度就比較大。因此產生了由DTD定義規則,語法要求更加嚴格的XHTML。

大部分常見的瀏覽器都可以正確地解析XHTML,即使老一點的瀏覽器,XHTML作為HTML的一個子集,許多也可以解析。也就是說,幾乎所有的網頁瀏覽器在正確解析HTML的同時,可兼容XHTML。當然,從HTML完全轉移到XHTML,還需要一些過程。

CSS(Cascading Style Sheets,層疊式樣式表)結合後,XHTML能發揮真正的威力;這使實現樣式跟內容的分離的同時,又能有機地組合網頁代碼,在另外的單獨文件中,還可以混合各種XML應用,比如MathMLSVG

HTML到XHTML過渡的變化比較小,主要是為了適應XML。最大的變化在於文檔必須是結構良好的,所有標籤必須閉合,也就是說開始標籤要有相應的結束標籤。另外,XHTML中所有的標籤必須小寫。而按照HTML 2.0以來的傳統,很多人都是將標籤大寫,這點兩者的差異顯著。在XHTML中,所有的參數值,包括數字,必須用雙引號括起來(而在SGML和HTML中,引號不是必須的,當內容只是數字、字母及其它允許的特殊字符時,可以不用引號)。所有元素,包括空元素,比如img、br等,也都必須閉合,實現的方式是在開始標籤末尾加入斜扛,比如<img ... /><br />。省略參數,比如<option selected>,也不允許,必須用<option selected="selected">。兩者的詳細差別,可通過W3C XHTML說明頁面存檔備份,存於網際網路檔案館)來查閱。

版本

至現時為止,XHTML共有以下幾個版本:

  • XHTML 1.0 Strict(嚴格版)是參照「HTML 4.01 Strict」改編,但不包括被棄用的元素。其文件類型描述為:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  • XHTML 1.0 Transitional(過渡版)是參照「HTML 4.01 Transitional」改編,包括已於Strict版本被棄用的呈現性元素(例如<center>, <font>等)。其文件類型描述為:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">

另外,在Microsoft Internet Explorer 5.0所新增的<ruby>小字註解標籤,在XHTML 1.1得到支援(參看旁註標記)。
而第二版的XHTML 1.0於2002年8月成為W3C推薦的文件類型。[2]

2.0止於草案。

XHTML5不需要DTD。

有效的XHTML文件

一個符合(附合)XHTML標準的文件即可稱為有效。此可以確保XHTML文件代碼的協調,亦能令文件的更容易被處理,而不需確保各種瀏覽器編譯的一致性。而W3C驗証服務則可以驗証文件是否有效。而實際上,很多網站開發工具(例如Dreamweaver)都支援以W3C標準驗証文件。

語法

XHTML語言必須符合XML的格式,例如,<br>要寫成<br />、使用了<p>之後必須有一个</p>以結束段落。而且,XHTML標籤必須使用小寫字母,如<br />不能寫為<BR />;每一個屬性都必須使用引號包住,如必須使用<img src="abc.jpg" alt="" />而不能使用<img src=abc.jpg alt="">。這些做法的目的,是使一個XHTML網頁能夠被網頁瀏覽器正確及較快地編譯

和HTML 4的區別

(翻譯自 W3C XHTML說明頁面存檔備份,存於網際網路檔案館))這部分涉及內容廣泛。

XHTML是XML的一種應用。基於這一事實,那些在以SGML為基礎的HTML 4中,不完全合法的用法,應被改寫。

文檔應該是結構良好的

良好結構(Well-formed)[3]是由XML[4]引入的一個新概念。也就是說所有的元素都必須有結束標籤或者以特殊的方式書寫(如下所述),而且所有的標籤必須合理地嵌套。

儘管如此,交叉使用在SGML中仍然是合法的,而且在現有的瀏覽器中也能夠被廣泛接受。

正確:元素嵌套
<p><em>這是一個要強調的段落。</em></p>
錯誤:元素交叉
<em><p>這是一個要強調的段落。</em></p>

元素名稱和屬性必須小寫

XHTML文件要求所有的HTML元素名稱和屬性名稱都要小寫。因為XML本身大小寫意義不同,因此必須區分開來。比如,<li><LI>是完全不同的。

要有結束標籤

基於SGML的HTML 4裡面,允許特定的標籤省略結束標籤;這些元素暗含有結束標記。XHTML不允許省略結束標記。所有元素(包括在DTD中聲明為空的標籤),都必須有結束標籤。在DTD中聲明為空的元素可以用結束標籤或者使用空元素速記法(參見空元素頁面存檔備份,存於網際網路檔案館))。

正確的:結束的元素
<p>這是一個段落。</p><p>這是另一個段落。</p>
錯誤的:沒有結束的元素
<p>這是一個段落。<p>這是另一個段落。

屬性值必須總是使用引號包裹

所有的屬性值都必須使用引號包含,包括那些以數值類型出現的。

正確的:屬性值使用引號
<td rowspan="3">
錯誤的:屬性值沒有使用引號
<td rowspan=3>

禁止屬性簡化

XML不支持屬性簡化,屬性值對必須書寫完整。屬性名,像compact和checked在沒有指定具體值的情況下,不能夠使用。

正確的:沒有簡化屬性
<dl compact="compact">
錯誤的:簡化屬性
<dl compact>

空元素

空元素必須有一個結束標籤,或者用/>來結束開始標籤。例如,<br />或者<hr />

正確的:結束空標籤
<br /><hr />
錯誤的:沒有結束空標籤
<br><hr>

屬性值中空白字符的處理

當客戶端在處理屬性時,它們依據的是XML的章節3.3.3

  • 祛除前綴和後綴的空白字符。
  • 將一個或多個空白字符序列映射為單個詞間空格。

腳本和樣式元素

在XHTML裡面,腳本和樣式的元素被聲明為具有#PCDATA內容。因此,<&會被認為是標記的開始,另外&lt; &amp;會被XML解釋器認為是實體映射被分別解釋成為<&。從而將腳本或者樣式元素包裹在CDATA標記的部分以避免這些實體擴展。

<script type="text/javascript">
<![CDATA[
 ...沒有轉義處理的內容...
]]>
</script>

在文檔對象模型中,CDATA部分被XML解釋器認為是節點,參見文檔對象模型章節1.3頁面存檔備份,存於網際網路檔案館)的第一級別推薦DOM頁面存檔備份,存於網際網路檔案館)。

一種替代方法就是使用外部的腳本和樣式文件。

SGML排斥

SGML賦予DTD作者將特定的元素排斥在某個元素之外的能力。此種限制(被稱為排斥)在XML中是不可能的。

例如,HTML 4的嚴格文檔類型描述禁止「a」作為子元素嵌套在其他「a」的內部。這在XML中是不可能檢查出這種限制的。儘管這種限制無法在DTD中定義,但是某些特定的元素也不能嵌套使用。關於此類元素和不能嵌套使用的元素概覽可以在標準的元素限制頁面存檔備份,存於網際網路檔案館)里找到。

擁有「id」和「name」屬性的元素

HTML 4定義了a, applet, form, frame, iframe, img, and map元素的name屬性。HTML 4還引入了id屬性。這兩個屬性被設計用作片段標識符。

在XML裡面,片段標識符是ID類型的,而且每個元素只能擁有單一的ID類型的屬性。所以,在XHTML 1.0中id屬性被定義為ID類型。為了確保XHTML 1.0文檔是構建優良的XML文檔,XHTML 1.0文檔在為以上所列元素定義片段標識符時必須使用id屬性。當XHTML文檔作為text/html媒體類型使用時,確保此類錨點的向後兼容性信息參見兼容性指南頁面存檔備份,存於網際網路檔案館)。

注意:在XHTML 1.0中,不贊成此類元素擁有name屬性,在XHTML的後續版本中將被去掉。

擁有預設值的屬性

有一些屬性在HTML 4和XHTML中都有一套預設值(比如input元素的type屬性)。在SGML和XML中,這些被稱為枚舉屬性。在HTML 4里這些值的解釋是不分大小寫的,所以值TEXT等同於text。在XML里,這些值的解析是區分大小寫的,在XHTML1中,所有的這些值定義為小寫。

十六進制值的實體映射

SGML和XML都允許使用十六進制的數值來映射字符。在SGML里這些映射可以使用&#Xnn;或者&#xnn;。在XML文檔中,必須使用小寫的方式(比如,&#xnn;)。

XHTML5

XHTML5並非可擴展HTML的後繼語言,而是對XML序列化的HTML5的稱呼,延續了一部分原本XHTML的精神而加入HTML5,成為HTML5規格的一部分。

參考文獻

  1. ^ http://www.w3.org/TR/xhtml1/#xhtml頁面存檔備份,存於網際網路檔案館) 'What is XHTML?' section in XHTML™ 1.0 The Extensible HyperText Markup Language (Second Edition) A Reformulation of HTML 4 in XML 1.0 W3C Recommendation 26 January 2000, revised 1 August 2002
  2. ^ 存档副本. [2008-09-30]. (原始內容存檔於2008-09-11). 
  3. ^ 存档副本. [2005-04-17]. (原始內容存檔於2008-11-14). 
  4. ^ 存档副本. [2005-04-17]. (原始內容存檔於2008-11-14). 

外部連結

參見