|
- MIME[1]類型(MIME Types)
- 解析(Parsing)
- 語(yǔ)法(Syntax)
- 標(biāo)記(Markup)
- 字符編碼(Character Encoding)
- 腳本(Scripts)
- 樣式表(Stylesheets)
請(qǐng)注意以下信息是基于(X)HTML5的當(dāng)前規(guī)范,某些技術(shù)上問(wèn)題并不適用于HTML的早先版本。
雖然HTML和XHTML看起來(lái)在語(yǔ)法上類似,但在很多方面顯著的不同。
注:由于當(dāng)前的WHATWG[2]文檔是一個(gè)草案,這個(gè)部分需要跟隨一個(gè)變化的對(duì)象。標(biāo)記@@@的不同是從理論上可以被改變且不影響向后兼容的不同。
MIME類型(MIME Types)
- XHTML必須以XML MIME類型來(lái)提供,例如application/xml 或 application/xhtml+xml。
- HTML必須以text/html來(lái)提供。
MIME類型決定了使用文件的類型。如果嘗試使用text/html來(lái)發(fā)送XHTML,你實(shí)際上僅使用了HTML,可能有語(yǔ)法錯(cuò)誤。
技術(shù)上,依據(jù)規(guī)范,XHTML1.0被允許作為text/html來(lái)發(fā)送。但是正是由于上面的原因,這樣的一個(gè)文件被認(rèn)為是HTML文件而不是XHTML文件
解析(Parsing)
XHTML用XML解析請(qǐng)求。HTML用它自己定義的更接近當(dāng)前瀏覽器實(shí)際處理HTML的方式。
- 在XHTML中,良構(gòu)性(well-formedness)錯(cuò)誤是致命的。在HTML中,錯(cuò)誤處理規(guī)則更加優(yōu)雅。良構(gòu)性錯(cuò)誤在HTML也是語(yǔ)法錯(cuò)誤,包括以下:
- 未編碼的和符號(hào)(&替代&)和小于符號(hào)(<替代<)(這并不應(yīng)用于CDATA)。(注:在HTML中,未編碼的和符號(hào)在一些情況下是被允許的。)
- 注釋包含額外的連接字符或以一個(gè)連接字符結(jié)尾。例如:
<!--語(yǔ)法--錯(cuò)誤--> or <!--語(yǔ)法錯(cuò)誤--->
- 不匹配結(jié)束標(biāo)簽。(不適用于可選標(biāo)簽元素)
- 不閉合標(biāo)簽。
- 非法字符出現(xiàn)在屬性名稱前或中。
- 文件結(jié)束(EOF)意外發(fā)生。
- 非法的字符出現(xiàn)在DOCTYPE名前。
- 丟失DOCTYPE名。
- 在DOCTYPE中PUBLIC標(biāo)識(shí)符沒(méi)有SYSTEM標(biāo)識(shí)符。(注:在HTML5中包含這些中的任何一個(gè)是語(yǔ)法錯(cuò)誤,在XML中允許唯一的SYSTEM標(biāo)識(shí)符出現(xiàn)在它自己中。)
- 有屬性的結(jié)束標(biāo)簽。
- 非法結(jié)束標(biāo)簽。(在HTML中,一個(gè)非法的</br>和</p>會(huì)導(dǎo)致產(chǎn)生隱含在它之前的開始標(biāo)簽。)
- 內(nèi)部子集在XML中是允許的,在HTML中是無(wú)意義的(且被禁止)
- 在一些情況下,HTML中的內(nèi)部子集最終部分內(nèi)聯(lián)呈現(xiàn)。
- 當(dāng)符號(hào)序列“]]>”在內(nèi)容中不標(biāo)記一個(gè)CDATA段的結(jié)束時(shí),在XHTML中是一個(gè)良構(gòu)性錯(cuò)誤,但在HTML中是有效的。
- <![CDATA[...]]>,在XHTML中是一個(gè)CDATA片段,在HTML中是一個(gè)偽造的注釋。
- <?foo …?>,在XHTML中是一個(gè)處理指令,在HTML中是一個(gè)偽造的注釋。
- 在HTML中,用于空元素語(yǔ)法的尾部斜線在非空(non-void)元素(見(jiàn)下)中會(huì)有解析錯(cuò)誤,但在所有情況下都被忽略。
- 在HTML中,script和style元素作為CDATA解析。(注:這個(gè)CDATA的定義不同于XML中的。)在XML中,它們作為普通元素解析(這意味著注釋被當(dāng)著真正的注釋,看起來(lái)像起始標(biāo)簽的就是起始標(biāo)簽)。
- 在HTML中,title和textarea元素作為RCDATA被解析。(RCDATA定義不同于SGML中的,也不是XML的RCDATA.)
- 在HTML中,如果腳本執(zhí)行(scripting)是可用,noscript元素作為CDATA被解析。如果腳本執(zhí)行是不可用的,它作為PCDATA被解析。在XHTML中,這個(gè)元素是沒(méi)有作用的,當(dāng)腳本執(zhí)行不可用時(shí),不能真正被用于阻止內(nèi)容將要呈現(xiàn)。
- 在HTML中,iframe,noembed和noframes作為CDATA解析。在XHTML中作為普通元素被解析,因此不能阻止內(nèi)容被使用。
- 在XHTML中屬性值的空格(white space)符被標(biāo)準(zhǔn)化為空白[3]。
- 在HTML中,可選標(biāo)簽的元素在特定情況下被隱藏。
- 在HTML中,在body中出現(xiàn)的帶標(biāo)簽的title元素被轉(zhuǎn)移到head中。在XHTML中,它停在指定它的地方。
- 在HTML中,脫離上下文(context)出現(xiàn)的特定元素的標(biāo)簽被忽略。包括:caption,col,colgroup,frame, frameset,head,option,optgroup,tbody,td,tfoot,th,thead,tr。
- plaintext在HTML中有一個(gè)特別的解析請(qǐng)求。(無(wú)論如何,它都是被禁止的。)
- 這并不是全部的在HTML中發(fā)生的邊界狀態(tài)和錯(cuò)誤條件。
語(yǔ)法(Syntax)
- 在HTML中,doctype是必須的。在XHTML中是可選的。
- 在XHTML中,標(biāo)簽名和屬性名是大小寫敏感的。在HTML中,它們是不敏感的。
- 在XHTML中,非空元素必須有一個(gè)開始標(biāo)簽和一個(gè)結(jié)束標(biāo)簽。在HTML中,某些元素允許省略一個(gè)或兩個(gè)標(biāo)簽。
- html (兩個(gè))
- head (兩個(gè))
- body(兩個(gè))
- li (結(jié)束標(biāo)簽)
- dt (結(jié)束標(biāo)簽)
- dd (結(jié)束標(biāo)簽)
- p (結(jié)束標(biāo)簽)
- colgroup (兩個(gè))
- thead (結(jié)束標(biāo)簽)
- tbody(兩個(gè))
- tfoot (結(jié)束標(biāo)簽)
- tr (結(jié)束標(biāo)簽)
- td (結(jié)束標(biāo)簽)
- th (結(jié)束標(biāo)簽)
- 在XHTML中,空元素可以用空元素語(yǔ)法(<br />)或一個(gè)結(jié)束標(biāo)簽緊跟在開始標(biāo)簽的后面(<br></br>)。在HTML中,空元素(empty elements)語(yǔ)法(尾部斜線)允許出現(xiàn)在空元素(void elements)上[4],但是禁止在非空元素上。無(wú)論如何,它沒(méi)有任何意義可言,可以省略。對(duì)于空元素,結(jié)束標(biāo)簽是禁止的。
- base, link, meta, hr, br, img, embed, param, area, col 和 input。
- 注:在解析請(qǐng)求時(shí),下面的元素被當(dāng)作空元素對(duì)待,因?yàn)樗鼈兪沁^(guò)時(shí)和不標(biāo)準(zhǔn)的。尾部斜線是不允許的:basefont, bgsound, spacer,wbr(在任何方式下這些元素都是不允許的,所以它們沒(méi)有太多不同)。
- HTML允許屬性最簡(jiǎn)化(minimisation),比如省略這個(gè)值,而XHTML不允許。
- HTML允許使用沒(méi)有引號(hào)的屬性值,而XHTML不允許。
- XHTML允許使用CDATA片段,而HTML不允許。
- XHTML允許處理指令,而HTML不允許。
- 在HTML中,所有實(shí)體引用(entity references)都是預(yù)定義的,不請(qǐng)求一個(gè)文檔類型定義(DTD[5])。但是由于XHTML5沒(méi)有DTD,實(shí)體引用不能用在XHTML中(包括5中預(yù)定義的實(shí)體:&amp;,&lt;,&gt;,&quot; 和&apos;)。
- 可以用自己的驗(yàn)證解釋器提供自己的DTD,但是瀏覽器不能使用這個(gè)驗(yàn)證解析器而將無(wú)法讀取DTD。
- 一套合法的unicode字符集在XML1.0中的限制遠(yuǎn)超在HTML中。
- XHTML允許命名空間前綴,但是HTML禁止。
標(biāo)記(Markup)
- 在XHTML中,命名空間聲明(xmlns屬性)是必須的。在HTML中的html元素也允許xmlns屬性出現(xiàn),其值是”http://www.w3.org/1999/xhtml”。
- <html xmlns=”http://www.w3.org/1999/xhtml”>
- 在HTML中,xmlns沒(méi)有絕對(duì)作用。它基本上是一個(gè)護(hù)身符。它被允許僅僅是為了從XHTML移植過(guò)來(lái)更容易。當(dāng)被HTML解析器解析時(shí),這個(gè)屬性最終處于無(wú)效的(null)命名空間中。
- 在XML(和XML命名空間理解的解析器)中,xmlns屬性是其命名空間聲明機(jī)制的一部分,一個(gè)元素實(shí)際上在無(wú)效的命名空間中是不能有xmlns屬性的。當(dāng)DOM執(zhí)行時(shí),這個(gè)屬性最終在”http://www.w3.org/2000/xmlns/”命名空間中。
- XHTML允許使用非XHTML元素和屬性(在不同的命名空間),HTML不允許。
- XHTML用xml:lang屬性,HTML用lang屬性代替。
- XML ID引入xml:id,能用在XHTML中,但在HTML中沒(méi)有作用。
- 在HTML中,noscript能被使用,在XHTML中,它是禁止的。
- HTML用base元素,XHTML用xml:base代替。
- 在XHTML中,p元素也許包含結(jié)構(gòu)化的內(nèi)聯(lián)級(jí)(inline level)元素,包括blockquote, dl, menu, ol, ul, pre 和 table。在HTML序列化中,由于向后兼容的限制,這是不可能的(雖然它或許可以通過(guò)DOM操作實(shí)現(xiàn))。
- 在XHTML中,table元素或許包含子tr元素。在HTML序列化中,由于向后兼容的限制,這是不可能的(雖然它或許可以通過(guò)DOM操作實(shí)現(xiàn))。
字符編碼(Character Encoding)
- 在XHTML中,XML聲明被用于指定的字符編碼。在HTML中,禁止XML聲明。
- 在HTML中,帶有一個(gè)charset屬性的meta可以用于代替。在XHTML中,如果有包含它,它是被禁止且忽略的。
- XHMTL的默認(rèn)編碼是依據(jù)XML規(guī)則,UTF-8或UTF-16。在HTML中如果沒(méi)有聲明編碼,它應(yīng)該決定執(zhí)行一個(gè)特別的啟發(fā)式的或退回到一個(gè)默認(rèn)的值。(規(guī)范中本章節(jié)還未完成)
腳本(Scripts)
- document.write()和document.writeln()不能用在XHTML中,但能用在HTML中。
- 在XHTML中,通過(guò)innerHTML屬性獲取的字符串必須是一個(gè)良構(gòu)的XML片段。
- DOM APIs在XHTML中是大小寫敏感的,但是一些在HTML中是不敏感的。(不適用于那些不在HTML命名空間的元素。)
- Element.tagName, Node.nodeName,和 Node.localName 返回是大寫的值。
- Document.createElement()是大小寫不敏感的(規(guī)范寫法是小寫)。
- Element.setAttributeNode()將會(huì)把屬性名改成小寫。
- Element.setAttribute()是大小寫不敏感的(規(guī)范寫法是小寫)。
- Document.getElementsByTagName()和 Element.getElementsByTagName()是大小寫不敏感的。
- Document.renameNode()。如果新的命名空間是HTML命名空間,在重命名執(zhí)行之前新的合格的名字必須是小寫。
- 在HTML中,Document.createElement()在HTML命名空間下創(chuàng)建一個(gè)元素。在XML(包括XHTML),這個(gè)被DOM2和DOM3定義的命名空間是空的。
- 在XHTML中,瀏覽器在這個(gè)領(lǐng)域缺乏通用性。在Firefox,這個(gè)命名空間依賴于MIME類型。在Opera它依賴于根元素,而在Safari,它一直是無(wú)效的。
樣式表(Stylesheets)
- 用于CSS中的選擇器(selectors)匹配在XHTML中是大小寫敏感的,在HTML中大小寫不敏感的。
- 在HTML中在畫布上渲染背景,CSS請(qǐng)求body元素的特殊處理,但不適用于XHTML。
原文: Differences Between HTML and XHTML
- [1] MIME : Multipurpose InterNET Mail Extensions是InterNET的傳輸標(biāo)準(zhǔn),它提供Web瀏覽器一種檢視多種檔案格式的方式。
- [2] WHATWG:Web Hypertext Application Technology Working Group網(wǎng)頁(yè)超文本技術(shù)工作小組。
- [3] XML1.0對(duì)屬性值進(jìn)行了標(biāo)準(zhǔn)化。對(duì)于空格字符(#x20,#xD,#xA,#x9)加入了空白字符(#x20)變成了標(biāo)準(zhǔn)化的值。
- [4] void elements是empty elements的新名字
- [5] DTD(Document Type Definition):文檔類型定義
it知識(shí)庫(kù):HTML和XHTML的不同,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。