|
XHTML 和HTML 4的區別
XHTML是XML的一種應用,基於這一事實。那些在以SGML為基礎的HTML 4中完全合法的用法應當被改變。
文檔應該是良構的 良構(Well-formedness)[1]是由XML[2] 引入的一個新概念。也就是說所有的元素都必須有結束標籤或者以特殊的方式書寫(如下所述),而且所有的標籤必須合理地嵌套。 儘管如此,交叉使用在SGML中仍然是合法的,而且在現有的瀏覽器中也能夠被廣泛接受。
正確的:元素嵌套
<p><em>這是一個被強調的段落。</em></p>
錯誤的:元素交叉
<em><p>這是一個被強調的段落。</em></p>
元素名和屬性必須統一小寫 XHTML文檔把所有的HTML元素名和屬性名都小寫。 這個區別是必須的,因為XML是大小寫敏感的。比如,<li>和<LI>是完全不同的兩個標籤。
對於非空標籤,也需要結束標籤 基於SGML的HTML 4里面,允許特定的標籤省略結束標籤;這些元素暗含有結束標記。XML不允許省略結束標記。所有元素包括在DTD中聲明為 空的標籤都必須有結束標籤。在DTD中聲明為空的元素可以用結束標籤或者使用空元素速記法。
正確的:結束的元素
<p>這是一個段落。</p><p>這是另一個段落。</p>
錯誤的:沒有結束的元素
<p>這是一個段落。<p>這是另一個段落。
屬性值必須總是使用引號包裹 所有的屬性值都必須使用引號包含,包括那些以數值類型出現的。
正確的:屬性值使用引號
<td rowspan="3">
錯誤的:屬性值沒有使用引號
<td rowspan=3>
禁止屬性簡化 XML不支持屬性簡化,屬性值對必須書寫完整。屬性名,像compact和checked在沒有指定具體值的情況下不能夠使用。
正確的:沒有簡化屬性
<dl compact="compact">
錯誤的:簡化屬性
<dl compact>
空元素 空元素必須有一個結束標籤,或者用/>來結束開始標籤。例如,<br/>或者<hr></hr> 。
正確的:結束空標籤
<br/><hr/>
錯誤的:沒有結束空標籤
<br><hr>
屬性值中空白字元的處理 當客戶端在處理屬性時,它們依據的是XML的章節3.3.3
祛除前綴和後綴的空白字元。 將一個或多個空白字元序列映射為單個詞間空格。
腳本和樣式元素 在XHTML裡面,腳本和樣式的元素被聲明為具有 #PCDATA 內容。因此,<和&會被認為是標記的開始,另外<和 &會被認為 XML 解釋器認為是實體映射被分別解釋成為<和&。從而將腳本或者樣式元素包裹在 CDATA 標記的部分以避免這些實體擴展。
<script type="text/javascript"> // <![CDATA[ ... 沒有轉義處理的內容... // ]]></script>
在文檔對象模型中,CDATA部分被XML解釋器認為是節點,參見文檔對象模型 章節1.3 的第一級別推薦 [3] 。 一種替代方法就是使用外部的腳本和樣式文件。
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媒體類型使用時,確保此類錨點的向後兼容性信息參見[http://www.w3.org/TR/xhtml1/#guidelines|HTML 兼容性指南。
擁有預設值的屬性 有一些屬性在HTML 4和XHTML中都有一套預設值(比如input元素的type屬性)。 在SGML和XML中,這些被稱為枚舉屬性。 在HTML 4里這些值的解釋是不分大小寫的,所以值TEXT等同於text。在XML裡,這些值的解析是區分大小寫的,在XHTML1中,所有的這些值定義為小寫。
十六進位值的實體映射 SGML和XML都允許使用十六進位的數值來映射字元。在SGML裡這些映射可以使用&#Xnn;或者&#xnn;。在XML文檔中,必須使用小寫的方式(比如,&#xnn;)。
|