XHTML

可擴展超文本標記語言（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標準重組」而成的。而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等，也都必須閉合，實現的方式是在開始標籤末尾加入斜扛，比如 、。省略參數，比如，也不允許，必須用。兩者的詳細差別，可通過 W3C XHTML說明 date=20081114183154 來查閱。

**版本**
至現時為止，XHTML共有以下幾個版本：- XHTML 1.0 Strict（嚴格版）是參照“HTML 4.01 Strict”改編，但不包括被棄用的元素。其文件類型描述為：
- XHTML 1.0 Transitional（過渡版）是參照“HTML 4.01 Transitional”改編，包括已於Strict版本被棄用的呈現性元素（例如, 等）。其文件類型描述為：
- XHTML 1.0 Frameset（框架版）是參照“HTML 4.01 Frameset”改編，並允許於網頁中定義框架元素。其文件類型描述為：
- XHTML 1.1。其文件類型描述為：
- XHTML Basic。其文件類型描述為：

另外，在Microsoft Internet Explorer 5.0所新增的小字註解標籤，在XHTML 1.1得到支援（參看旁註標記）。
而第二版的XHTML 1.0於2002年8月成為W3C推薦的文件類型。
2.0止於草案。
XHTML5不需要DTD。

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

**語法**
XHTML語言必須符合XML的格式，例如，要寫成、使用了之後必須有一個以結束段落。而且，XHTML標籤必須使用小寫字母，如不能寫為；每一個屬性都必須使用引號包住，如必須使用而不能使用。這些做法的目的，是使一個XHTML網頁能夠被網頁瀏覽器正確及較快地編譯。

**和HTML 4的區別**
（翻譯自  W3C XHTML說明 date=20081114183154 ）這部分涉及內容廣泛。
XHTML是XML的一種應用。基於這一事實，那些在以SGML為基礎的HTML 4中，不完全合法的用法，應被改寫。

**文檔應該是結構良好的**
良好結構（Well-formed）是由XML引入的一個新概念。也就是說所有的元素都必須有結束標籤或者以特殊的方式書寫（如下所述），而且所有的標籤必須合理地嵌套。
儘管如此，交叉使用在SGML中仍然是合法的，而且在現有的瀏覽器中也能夠被廣泛接受。
-{zh-hans:
正確：元素嵌套
:這是一個要強調的段落。
錯誤：元素交叉
:這是一個要強調的段落。; zh-hant:
正確：元素嵌套
:這是一個要強調的段落。
錯誤：元素交叉
:這是一個要強調的段落。;}-

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

**要有結束標籤**
基於SGML的HTML 4裡面，允許特定的標籤省略結束標籤；這些元素暗含有結束標記。XHTML不允許省略結束標記。所有元素（包括在DTD中聲明為空的標籤），都必須有結束標籤。在DTD中聲明為空的元素可以用結束標籤或者使用空元素速記法（參見 空元素 date=20081114183154 ）。
正確的：結束的元素
:-{}-這是一個段落。這是另一個段落。
錯誤的：沒有結束的元素
:-{}-這是一個段落。這是另一個段落。

**屬性值必須總是使用引號包裹**
所有的屬性值都必須使用引號包含，包括那些以數值類型出現的。
正確的：屬性值使用引號
:
錯誤的：屬性值沒有使用引號
:

**禁止屬性簡化**
XML不支持屬性簡化，屬性值對必須書寫完整。屬性名，像compact和checked在沒有指定具體值的情況下，不能夠使用。
正確的：沒有簡化屬性
:
錯誤的：簡化屬性
:

**空元素**
空元素必須有一個結束標籤，或者用/>來結束開始標籤。例如，或者。
正確的：結束空標籤:
錯誤的：沒有結束空標籤:

**屬性值中空白字符的處理**
當客戶端在處理屬性時，它們依據的是XML的章節3.3.3- 祛除前綴和後綴的空白字符。- 將一個或多個空白字符序列映射為單個詞間空格。

**腳本和樣式元素**
在XHTML裡面，腳本和樣式的元素被聲明為具有#PCDATA內容。因此，和&會被認為是標記的開始，另外&lt;和 &amp;會被XML解釋器認為是實體映射被分別解釋成為和&。從而將腳本或者樣式元素包裹在CDATA標記的部分以避免這些實體擴展。
-{zh-hans:
zh-hant:
}-
在文檔對象模型中，CDATA部分被XML解釋器認為是節點，參見 文檔對象模型章節1.3 date=20220423060452 的第一級別推薦 DOM date=20081114183154 。
一種替代方法就是使用外部的腳本和樣式文件。

**SGML排斥**
SGML賦予DTD作者將特定的元素排斥在某個元素之外的能力。此種限制（被稱為排斥）在XML中是不可能的。
例如，HTML 4的嚴格文檔類型描述禁止“a”作為子元素嵌套在其他“a”的內部。這在XML中是不可能檢查出這種限制的。儘管這種限制無法在DTD中定義，但是某些特定的元素也不能嵌套使用。關於此類元素和不能嵌套使用的元素概覽可以在標準的 元素限制 date=20081114183154 裡找到。

**擁有“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規格的一部分。

**參考文獻**

**外部鏈接**
  XHTML 1.0可擴展超文本標記語言（第二版） date=20081114183154 -  XHTML基礎 date=20220513045441 -  W3C驗証服務 date=20110222101928 -  XHTML 1.1 - 基於模塊的XHTML date=20081114232914 -  XHTML 2.0（草案） date=20081115225713 -  中文的XHTML教程-  W3C HTML首頁 date=20220105175002 

**參見**
 XML- HTML- CSS- SGML- Unicode- Acid2- W3C驗証服務