因?yàn)閄HTML是XML的一個(gè)應(yīng)用,一些在基于SGML的HTML 4中完全合法的習(xí)慣在XHTML中必須改變。
文檔必須是編排良好的
編排良好性Well-formedness是[XML]引入的一個(gè)新概念。從本質(zhì)上說,這意味著元素必須有結(jié)束標(biāo)簽,或者必須以特殊方式書寫(在下面說明)。
元素必須嵌套,盡管SGML規(guī)定層疊非法,但現(xiàn)有的瀏覽器普遍允許層疊。
正確:嵌套元素。
<p>here is an emphasized <em>paragraph</em>.</p>
不正確:層疊元素。
<p>here is an emphasized <em>paragraph.</p></em>
元素和屬性名必須小寫
對(duì)所有HTML元素和屬性名,XHTML 文檔必須使用小寫。 因?yàn)閄ML是大小寫敏感的,所以這個(gè)差別是必須的。如 <li> 和 <LI> 是不同的標(biāo)簽。
對(duì)非空元素,必須使用結(jié)束標(biāo)簽
在基于 SGML的 HTML 4 中,一些隱含結(jié)束意義的元素允許忽略結(jié)束標(biāo)簽。而在基于XML的XHTML中,這種忽略不被允許。除了在DTD中被聲明為空的元素,所有元素必須有結(jié)束標(biāo)簽。
正確:結(jié)束了的元素。
<p>here is a paragraph.</p><p>here is another paragraph.</p>
不正確:未結(jié)束元素。
<p>here is a paragraph.<p>here is another paragraph.
屬性值必須在引號(hào)中
所有的屬性必須用引號(hào),即使是數(shù)字。
正確:在引號(hào)中的屬性值
<table rows="3">
不正確:不在引號(hào)中的屬性值。
<table rows=3>
屬性最小化
XML 不支持屬性最小化. 屬性值對(duì)必須寫全。象compact,checked這樣的屬性名不能不指定屬性值而在元素中出現(xiàn)。
正確:沒有最小化的屬性
<dl compact="compact">
不正確:最小化屬性
<dl compact>
空元素
空元素要么必須有結(jié)束標(biāo)簽,要么起始標(biāo)簽以/>結(jié)束. 例如,<br/>或<hr></hr>. 請(qǐng)參看HTML兼容性指導(dǎo) HTML Compatibility Guidelines 中的信息,以保證向后兼容HTML 4用戶代理程序
正確:結(jié)束的空元素
<br/><hr/>
錯(cuò)誤:未結(jié)束的空標(biāo)簽
<br><hr>
屬性值中的空白字符處理
對(duì)屬性值,用戶代理程序?qū)h去引導(dǎo)和后序空白符,將一個(gè)或多個(gè)空白符(包括換行)轉(zhuǎn)換成單個(gè)字符間空間(在西方書寫體中是一個(gè)ASCII空格) See Section 3.3.3 of [XML]。
Script and Style 元素
在XHTML中,script和style元素聲明為#PCDATA內(nèi)容形式,因此,< 和 & 被看作是標(biāo)識(shí)的開始,<和& 這樣的實(shí)體被XML處理程序看作為實(shí)體引用而分別被認(rèn)為是< 和 & . 將script和style元素的內(nèi)容包裹在CDATA記號(hào)部分中避免了這些實(shí)體的擴(kuò)張。
<script>
<![CDATA[
... unescaped script content ...
]]>
</script>
CDATA 部分被 XML 處理程序識(shí)別,是文檔對(duì)象模型中一個(gè)結(jié)點(diǎn)。請(qǐng)參看1.3節(jié)Section 1.3的DOM LEVEL 1推薦標(biāo)準(zhǔn)[DOM]。
替代的方式是使用外部script和style文檔。
SGML 禁止
SGML 給作者的DTD可以指定在一個(gè)元素內(nèi)部禁止出現(xiàn)的元素。這樣的禁止在XML中是不可能的。
例如,嚴(yán)格的 HTML 4 DTD 禁止任何深度的’a’元素對(duì)另一’a’元素的嵌套。在XML中無法寫出這樣的禁止。盡管這些禁止不能在DTD中定義,一些元素不應(yīng)該被嵌套。在標(biāo)準(zhǔn)化的附錄B Appendix B中是這些元素的匯總。
具有 'id' 和 'name' 屬性的元素
HTML 4 定義了name屬性的元素有 a,applet,form,frame,iframe,img,and map. HTML 4還引入了 id 屬性. 這兩個(gè)屬性都是被設(shè)計(jì)作為片段標(biāo)識(shí)符。
在XML中,片段標(biāo)識(shí)符是ID類型,每個(gè)元素只能有一個(gè)ID類型的屬性。因此,在XHTML1.0中,id屬性被定義為ID類型。為保證XHTML1.0文檔是結(jié)構(gòu)良好的XML文檔,在定義一個(gè)片段標(biāo)識(shí)符時(shí),XHTML文檔必須使用id屬性,即使是對(duì)那些以前用name屬性的元素。請(qǐng)參看 HTML Compatibility Guidelines 的信息,確保XHTML文檔以text/html媒體類型使用時(shí),這些”錨”能向后兼容。
注意,在XHTML 1.0中,name 屬性不被正式支持,在以后的XHTML版本中將被刪除。