XHTML
副檔名 |
.xhtml, .xht, .html, .htm |
---|---|
網路媒體型式 |
application/xhtml+xml |
開發者 | World Wide Web Consortium |
格式類型 | 標記語言 |
延伸自 | XML, HTML |
標準 | 1.0 (Recommendation), 1.1 (Recommendation), |
可擴展超文本標記語言(英語:eXtensible HyperText Markup Language,XHTML),是一種標記語言,表現方式與超文本標記語言(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應用,比如MathML、SVG。
從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">
- XHTML 1.1。其文件類型描述為:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
- XHTML Basic。其文件類型描述為:
<!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文件
HTML |
---|
比較 |
一個符合(附合)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內容。因此,<
和&
會被認為是標記的開始,另外<
和 &
會被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規格的一部分。
參考文獻
- ^ 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
- ^ 存档副本. [2008-09-30]. (原始內容存檔於2008-09-11).
- ^ 存档副本. [2005-04-17]. (原始內容存檔於2008-11-14).
- ^ 存档副本. [2005-04-17]. (原始內容存檔於2008-11-14).
外部連結
- XHTML 1.0可擴展超文本標記語言(第二版) (頁面存檔備份,存於網際網路檔案館)
- XHTML基礎 (頁面存檔備份,存於網際網路檔案館)
- W3C驗証服務 (頁面存檔備份,存於網際網路檔案館)
- XHTML 1.1 - 基於模塊的XHTML (頁面存檔備份,存於網際網路檔案館)
- XHTML 2.0(草案) (頁面存檔備份,存於網際網路檔案館)
- 中文的XHTML教程
- W3C HTML首頁 (頁面存檔備份,存於網際網路檔案館)