與 XHTML 1.0 相比,這種安排更符合邏輯,其他很多標記詞匯表的用戶(hù)對此也很熟悉。對程序員來(lái)說(shuō),一個(gè)很大的好處是可以在文檔中包含內容章節,而不需要重新編碼標題層次。
對這些標題可以使用 CSS。人們可能期望 XHTML 2.0 的瀏覽器默認實(shí)現能夠預先定義一部分,具體來(lái)說(shuō)可能像下面這樣(摘自 XHTML 2.0 規范):
h {font-family: sans-serif; font-weight: bold; font-size: 200%}
section h {font-size: 150%} /* A second-level heading */
section section h {font-size: 120%} /* A third-level heading */
XHTML 1.0 中另一個(gè)不合邏輯的地方是,要使用列表,則必須將列表放在段落中。事實(shí)上,必須使用任何塊級元素(blockquote、預格式化的章節、table 等)。如果這些內容僅僅是同一段落流中的一部分,這樣做常常不合邏輯。XHTML 2.0 去掉了這些限制。惟一的限制是不能將一個(gè)段落放到另一個(gè)段落中。
圖像
HTML 中的 <img> 標簽實(shí)際上非常不靈活。正如 Pemberton 所說(shuō),除了 alt 文本(妨礙采用新的圖像格式)它不含任何應變機制,alt 文本不能使用標記,longdesc 屬性由于笨拙而從來(lái)沒(méi)有被使用過(guò)。(longdesc 用于提供一個(gè) URI,該 URI 指向關(guān)于圖片的、與 alt 屬性中的說(shuō)明相比更詳細的描述。)
XHTML 2.0 為這個(gè)問(wèn)題提供了一種很好的解決方案:允許任何 元素具有 src 屬性。瀏覽器可以用這個(gè) URI 中的內容代替元素中的內容。最簡(jiǎn)單的情況就是處理圖像。但沒(méi)有人說(shuō)不能是 SVG、XHTML 或瀏覽器能夠呈現的任何內容類(lèi)型。
<img> 標簽本身仍將保留,但該標簽中現在包含一些內容。src 屬性的新操作意味著(zhù) alt 文本現在變成了元素內容,比如下面的例子:
<p><img src="http://example.com/water.png">H<sub>2</sub>O</img></p>
對于日語(yǔ)等語(yǔ)言來(lái)說(shuō),這是一個(gè)好消息,因為 Ruby 注釋?zhuān)ㄕ垍㈤唴⒖假Y料)要求行內標記,而以前這在屬性值中這是不可能的。
XHTML 2.0 在 <object> 元素中提供了更一般的圖像包含形式,該元素可用于包含任何對象類(lèi)型,從圖片、電影到 Flash 或 Java 技術(shù)這樣的可執行代碼。這樣就可以通過(guò)巧妙的技術(shù),根據瀏覽器能力進(jìn)行更好的委派,<object> 元素可以多層嵌套。比如,最外層是一段 Flash 電影,其中包含一個(gè) AVI 視頻文件,再進(jìn)一層是一個(gè)靜態(tài)圖片,最后在嵌套對象的核心是一段文本內容。更多信息請參閱 XHTML Object Module(參考資料中的鏈接)。
可擴展的語(yǔ)義
很長(cháng)一段時(shí)間以來(lái),一些 HTML 元素具有具有語(yǔ)義聯(lián)系,比如 <address> 和 <title>。問(wèn)題是這類(lèi)元素很少而且不能擴展。其間,有人嘗試用 class 屬性為 HTML 元素提供語(yǔ)義。與 class 的設計初衷相比,這樣就大大延伸了其功能,而且由于應用 CSS 樣式的屬性的廣泛使用,所以很難明確應用這種用法。(有人懷疑關(guān)于 class 用途的斷言,但后者是很難駁倒的。)
XHTML 2.0 沒(méi)有采用這些特別的方法,而是引入了一種方法在文檔中指定類(lèi)似 RDF 的元數據。RDF 陳述是一個(gè)三元組(主題、屬性、對象)。比如,在英語(yǔ)中可能有三元組:“my car”、“is painted” 和 “red”。
about 屬性類(lèi)似于指定 RDF 三元組 subject 的 rdf:about——可以省略,則文檔本身就是主題。property 屬性是引用性質(zhì)的 URI(如果給定適當聲明的前綴可使用縮寫(xiě)形式,更多細節請參閱 XHTML 2.0 Metainformation Attributes Module,見(jiàn)參考資料)。
最后,三元組的第三個(gè)值由 about 和 property 屬性作用的元素內容給出,如果 content 屬性值為空則沒(méi)有內容。這是一個(gè)例子,如果使用過(guò) HTML <meta> 標簽就會(huì )非常熟悉,它指定了頁(yè)面頭 (page header) 的創(chuàng )建者:
<html xmlns="http://www.w3.org/2002/06/xhtml2/" xml:lang="en">
<head>
<title>Edd Dumbill‘s Home Page</title>
<meta property="dc:creator">Edd Dumbill</meta>
</head>
...
</html>
現在來(lái)看看 Pemberton 給出的這個(gè)例子,它說(shuō)明了如何在真正的文檔體中使用元數據:
<h property="title">Welcome to my home page</h>
這表示該標題也是 XHTML 2.0 文檔的題目,并將其指定為行內標題。終于不用在每個(gè)文檔中將題目寫(xiě)兩次了!
感謝一種簡(jiǎn)單的稱(chēng)為 GRDDL(從語(yǔ)言的方言中采擷資源描述,Gleaning Resource Descriptions from Dialects of Languages,參見(jiàn)參考資料)的轉換技術(shù),現在有了從 XHTML 2.0 文檔中提取 RDF 元數據的統一標準了。
XHTML 2.0 在其他方面也有很多變化,多數與平行開(kāi)發(fā)的其他規范(如 XForms)有關(guān)。這里無(wú)法一一介紹 XHTML 2.0 的特性。但無(wú)論如何,與 XHTML 1.0 相比,XHTML 2.0 是一次很大的飛躍。
XHTML 2.0 中的其他幾點(diǎn)變化
受夠了編寫(xiě) <pre><code> ... </code></pre> 這類(lèi)代碼?現在可以使用新的 <blockcode> 元素了。
為了滿(mǎn)足可訪(fǎng)問(wèn)性的要求,XHTML 2.0 提供了 role 屬性,可以在任何 body 元素中指定。比如,頁(yè)面中單純的導航元素可使用 role="navigation" 屬性,這樣文本-語(yǔ)音引擎就可以智能地處理它。
瀏覽器目前支持通過(guò) Tab 關(guān)鍵字進(jìn)行焦點(diǎn)切換,但是有很大的隨意性。新的 nextfocus 和 prevfocus 屬性允許控制焦點(diǎn)在屏幕元素間轉移的順序,該屬性對于建立可導航的用戶(hù)界面至關(guān)重要。
準備迎接 XHTML 2.0
無(wú)論高級特性中的變化多大,XHTML 2.0 無(wú)疑仍然是 HTML。雖然增加了新元素,XHTML 2.0 的大部分元素仍然和過(guò)去一樣工作。從兼容的角度出發(fā),XHTML 2.0 仍然保留了 <h1> 到 <h6> 元素,此外還有 <img>。
不過(guò),XHTML 2.0 的戰略并不是堅持嚴格的語(yǔ)法向后兼容,因此現有瀏覽器的 HTML 呈現引擎不可能完全應付 XHTML 2.0 文檔的表達能力。不管怎樣,多數 Web 瀏覽器都能很好地呈現任意的 XML + CSS,大量 XHTML 2.0 也能以這種方式呈現 —— 雖然無(wú)法獲得語(yǔ)義上的改進(jìn)。
XHTML 2.0 中的一些區別非常重要,改用 XForms 是其中最值得注意的,還有徹底拋棄了 HTML 的非 XML 性質(zhì)。因此現在還不能一下子把網(wǎng)站改成 XHTML 2.0,但是可以為未來(lái)做好準備:
堅持使用 CSS,去掉所有表示性標記。
考慮如何在頁(yè)面中部署微格式。微格式可以在 HTML 中使用現有標準表示元數據。
如果還沒(méi)有這樣做,用 XHTML 1.0 做一下實(shí)驗?,F在使用 XHTML 1.0 頁(yè)面作為常規 HTML 是可能的,只要根據 XHTML 1.0 HTML Compatibility Guidelines 編寫(xiě)即可,但這會(huì )帶來(lái)很大的復雜性。不能將這種方式用于 XHTML 2.0。
使用 X-Smiles 瀏覽器做實(shí)驗,它支持 XHTML 2.0,并提供了 SVG、XForms 和 SMIL 2.0 Basic 能力。
如果基于類(lèi) XHTML 的功能創(chuàng )建新的客戶(hù)機系統,一定要考慮使用 XHTML 2.0 作為起點(diǎn)。
最后還要注意的是,XHTML 2.0 規范還沒(méi)有完成。撰寫(xiě)本文的時(shí)候,該規范仍然處于 W3C 的工作草案階段,就是說(shuō)在成為推薦標準之前,還有一些路要走。重要的是,它還必須經(jīng)過(guò)候選推薦標準階段,這個(gè)階段用于收集實(shí)現的經(jīng)驗。
按照 W3C HTML 工作組計劃,2007 年以前 XHTML 2.0 不大可能成為 W3C 推薦標準。也就是說(shuō) 2006 年是獲得部署經(jīng)驗的關(guān)鍵一年。
W3C XHTML 2.0 與 WHATWG HTML 5 的比較
這兩個(gè)計劃完全不同:草根組織 WHATWG 希望漸進(jìn)式地改進(jìn) HTML 4 和 XHTML 1.0,而聯(lián)盟支持的 XHTML 2.0 對 HTML 語(yǔ)言進(jìn)行了徹底重構。
雖然不同,這兩種方法仍然有可比性。WHATWG 規范的一些初步成果已經(jīng)在瀏覽器中實(shí)現,WHATWG 的一些工作就是對 HTML 事實(shí)擴展的描述。其中一些重要的部分,如 XMLHttpRequest 將進(jìn)入 W3C 的 Rich Client Activity 規范。WHATWG 在 Web 標準世界中還是有效的催化劑。
把目光放遠一些,XHTML 2.0 方法為 Web 提供了全新的詞匯表,那時(shí)候 XML 的模塊化處理、CSS 和 ECMAScript 將很快成為常見(jiàn)的事物。嵌入設備如電話(huà)和數字電視沒(méi)有必要支持雜亂無(wú)章的遺留 Web HTML,可以毫無(wú)負擔地利用純 XML 詞匯表 XHTML 2.0 的優(yōu)勢。此外,可訪(fǎng)問(wèn)性和國際化的新特性使 XHTML 2.0 成為第一個(gè)被認為具有通用性的 XML 文檔詞匯表,從而成為很多基于標記的工作的堅實(shí)而經(jīng)濟的基礎。
與過(guò)去一樣,HTML 的未來(lái)也是不確定的,有人可能稱(chēng)之為混亂,但是我相信 XHTML 2.0 最終將得到廣泛的接受和采納。如果這是 Web 上惟一的 XML 詞匯表,可能會(huì )有一些問(wèn)題,但是因為瀏覽器準備應付 SVG、XForms 和其他技術(shù),所以 XHTML 2.0 看起來(lái)僅僅是另一個(gè)基于 XML 的詞匯表而已。