多年以來,HTML 只是在不斷變大,卻從未變小,因為新版本必須維護向后兼容性。這一情況將得以改變。XHTML 2.0 的第一個工作草案于 2002 年 8 月 5 日發(fā)布,一大新聞就是取消了向后兼容性;該語言終于得以繼續(xù)發(fā)展。那么,作為一名開發(fā)人員您將得到什么回報呢?健壯的表單和事件表現(xiàn)如何呢?它們是研究不需要大量 JavaScript 的框架以及甚至層次結(jié)構(gòu)菜單的更佳方法。
本文概述了 XHTML 2.0 中的新增功能以及將來可能會如何使用它。讀者應(yīng)該熟悉 HTML 和/或 XHTML 1.0。熟悉級聯(lián)樣式表(Cascading Style Sheet (CSS))是有幫助的,但不是必需的。
告別向后兼容性,引入結(jié)構(gòu)
當(dāng)萬維網(wǎng)聯(lián)盟(World Wide Web Consortium (W3C))于 2002 年 8 月 5 日發(fā)布 XHTML 2.0 的第一個工作草案時,最讓人吃驚的是:與其先前的版本不同,它不是向后兼容的。對于先前的發(fā)行版,如從 HTML 4.01 轉(zhuǎn)到 XHTML 1.0 以及后來從 XHTML 1.0 到 XTHML 1.1,變化都是添加一些內(nèi)容;可以讀取 XHTML 1.0(過渡的)文檔的瀏覽器也可以理解 HTML 4.01 文檔。而 XHTML 2.0 不是那樣的。
如果您在兩年前宣布我們今天將研究不帶 img 標(biāo)記或 bold 標(biāo)記的 HTML 版本,那么大多數(shù) Web 開發(fā)人員都會用懷疑的眼光看著您。然而,現(xiàn)在就是這樣。除了徹底替換表單和框架外,XHTML 2.0 還除去了 b、i 和 img 標(biāo)記(以及 big、small 和 tt),甚至不贊成使用 br,以準(zhǔn)備從將來的發(fā)行版中除去它。但這是為什么呢?
原因在于大多數(shù)標(biāo)記都是表示性的。它們的唯一目的就是給予瀏覽器指令,規(guī)定有關(guān)其內(nèi)容應(yīng)該如何顯示,但卻完全未提供有關(guān)其內(nèi)容是什么的信息。例如,請考慮下面兩個句子:
Presentational elements are, <i>for the most part</i>, <b>gone</b>.
和
Presentational elements are, <em>for the most part</em>, <strong>gone</strong>.
在沒有樣式表的情況下,這兩個句子在瀏覽器中看起來是一樣的,但只有第二個句子提供了有關(guān)原因的信息。事實上,從一開始 em(強調(diào))和 strong 標(biāo)記就出現(xiàn)在 HTML 中了,但多年以來作者們基本上已經(jīng)忽略了它們,而專注于表現(xiàn)形式,這是以犧牲內(nèi)容為代價的。
但這并不意味著只要您想使某些內(nèi)容變成粗體或斜體,就應(yīng)該將它們硬塞進這兩個標(biāo)記中。相反,除去表示性元素的整個目的是設(shè)法完成 CSS 的發(fā)明者的初衷,即應(yīng)該根據(jù)內(nèi)容所表示的東西來標(biāo)記內(nèi)容,而樣式表應(yīng)該用于美化內(nèi)容。例如,清單 1 使用類別(class)來指出內(nèi)容類型。
清單 1. 使用類別指定內(nèi)容類型
<html>
<head><title>Employee Notice</title>
<style type="text/css">
.duedate { color: red;
font-weight: bold; }
.holiday { color: green;
font-style: italic }
</style>
</head>
<body>
<h1>Notice</h1>
<p>Employees should take note of the following important dates:</p>
<ul>
<li class="duedate">8/28/2002 (Progress reports due)</li>
<li class="holiday">9/1/2002 (Labor Day)</li>
<li class="duedate">10/28/2002 (Final reports due)</li>
</ul>
</body>
</html>
在該頁面中,日期類型可以由內(nèi)容本身來確認(rèn),瀏覽器可以使用類別信息來決定如何為其設(shè)計樣式,如圖 1 中所示。
圖 1. 類別可以確定顯示哪一類內(nèi)容,樣式表可以對它進行適當(dāng)?shù)母袷交?
用這種觀點研究它:斷開(br)標(biāo)記的目的無外乎是為了顯示,因為實際上它并無任何內(nèi)容。XHTML 2.0 不贊成使用 br 標(biāo)記,而提倡使用 line 標(biāo)記。line 標(biāo)記指定一種特殊的內(nèi)容:通常是以后跟換行和回車這種方式呈現(xiàn)的一行文本或其它內(nèi)容。例如,文本:
<p>
public class HelloWorld {<br />
public static void main (String[] args){<br />
System.out.println("Hello world!");<br />
}<br />
}
</p>
變成
<p>
<line>public class HelloWorld {</line>
<line>public static void main (String[] args){ </line>
<line>System.out.println("Hello world!"); </line>
<line>}</line>
<line>}</line>
</p>
這樣,文檔就有了一個表示行的實際對象,同樣,段(p)標(biāo)記表示一段內(nèi)容。
為什么所有這些都很重要呢?因為 Web 不僅正日益成為人與人之間通信的場所,而且還日益成為軟件應(yīng)用程序(如服務(wù)器和搜索引擎索引器)之間進行通信的場所。而且,每個人(或者說幾乎每個人)都使用相同瀏覽器的時代已經(jīng)一去不復(fù)返了。開發(fā)人員正不斷為不同設(shè)備(如 PDA 和移動電話)重新設(shè)計內(nèi)容。語音觸發(fā)的(voice-activated)系統(tǒng)已經(jīng)離我們不遠(yuǎn)了。內(nèi)容的結(jié)構(gòu)意義正變得幾乎與內(nèi)容本身一樣重要。
節(jié)
因此,XHTML 2.0 添加了節(jié)(section)和標(biāo)題(heading)。HTML 一直都包含編號的標(biāo)題 — h1 到 h6,直到 2002 年 8 月 5 日的工作草案,還未將其撤消,但這只是一個時間問題。而 XHTML 2.0 使用通用標(biāo)題和節(jié)。例如,可以嵌套節(jié),從而賦予標(biāo)題含義。以前用編號標(biāo)題呈現(xiàn)的文檔(清單 2):
清單 2. 文檔中的編號標(biāo)題
<html>
<head><title>Adding sections</title></head>
<body>
<h1>The Web's future: XHTML 2.0</h1>
<p>by Nicholas Chase</p>
<h2>Good-bye backward compatibility, hello structure</h2>
<p>Why backward compatibility is over.</p>
<h3>Presentation versus Structure</h3>
<p>Using style sheets rather than presentational elements.</p>
<h3>Lines</h3>
<p>Line breaks are deprecated.</p>
<h2>Sections</h2>
<p>Creating more reasonable sections.</p>
<h2>Navigation lists and menus</h2>
<p>Hierarchical menus.</p>
<h2>Links, links, everywhere</h2>
<p>Adding links.</p>
</body>
</html>
可以用通用標(biāo)題和節(jié)替換(清單 3):
清單 3. 通用標(biāo)題和節(jié)
<html>
<head><title>Adding sections</title></head>
<body>
<section>
<h>The Web's future: XHTML 2.0</h>
<p>by Nicholas Chase</p>
<section>
<h>Good-bye backward compatibility, hello structure</h>
<p>Why backward compatibility is over.</p>
<section>
<h>Presentation vs. Structure</h>
<p>Using style sheets rather than presentational elements.</p>
</section>
<section>
<h>Lines</h>
<p>Line breaks are deprecated.</p>
</section>
</section>
<section>
<h>Sections</h>
<p>Creating more reasonable sections.</p>
</section>
<section>
<h>Navigation lists and menus</h>
<p>Hierarchical menus.</p>
</section>
<section>
<h>Links, links, everywhere</h>
<p>Adding links.</p>
</section>
</section>
</body>
</html>
這種結(jié)構(gòu)有兩個優(yōu)點。首先,應(yīng)用程序(如搜索引擎 crawler)能夠更容易地了解內(nèi)容的相對重要性,其次,節(jié)是自包含的。在 HTML 中,節(jié)以其標(biāo)題開始,所以在標(biāo)題的前面不會出現(xiàn)內(nèi)容(如介紹性內(nèi)容)。section 元素取消了這種約束,因為其內(nèi)部的任何內(nèi)容都是節(jié)的一部分。
導(dǎo)航列表和菜單
增加了一個會讓 Web 開發(fā)人員大大受益的結(jié)構(gòu),那就是導(dǎo)航列表。由 nl 標(biāo)記指定的導(dǎo)航列表的工作原理與其“表親”有序列表(ol)和無序列表(ul)非常相似,但有一點不一樣:導(dǎo)航列表的項僅在列表激活時才出現(xiàn)。因此,導(dǎo)航列表與層次結(jié)構(gòu)的彈出菜單十分相似,這種彈出菜單很受歡迎,因為它們提供了許多導(dǎo)航信息,而且不會占據(jù)太多的屏幕空間。例如,肥皂劇站點可能有以下菜單(清單 4):
清單 4. 使用導(dǎo)航列表
<nl>
<name>Character Options</name>
<li href="stay.html">Stay</li>
<nl>
<name>Leave</name>
<li href="newjob.html">Job transfer</li>
<li href="divorce.html">Divorce</li>
<li href="fataldisease.html">Fatal disease</li>
</nl>
<li href="backburner.html">Back Burner</li>
</nl>
當(dāng)用戶激活名稱(Character Options)時,出現(xiàn)列表項。關(guān)于當(dāng)用戶激活主列表時子列表(如 Leave 菜單)是否會出現(xiàn),還是用戶必須激活子列表項本身以使其出現(xiàn),工作草案并未說清楚。最終作者可能通過樣式或事件來控制這一行為。在任何情況下,當(dāng)輸入焦點從主元素移開時,列表項就會消失。
鏈接,鏈接無處不在
您可能已經(jīng)注意到:即使打算將前一個示例作為菜單,但它沒有錨(a)標(biāo)記。而 href 屬性已經(jīng)被正確放在了 li 元素上。這不是導(dǎo)航列表的特性,而是 XHTML 2.0 的新特性。與超文本相關(guān)的屬性(如 href、target 和 accesskey)現(xiàn)在是公共屬性集合(Common Attribute Collection)的一部分,它包括核心屬性(class、id 和 title)、國際化屬性(xml:lang,它替換了 XHTML 1.1 中的 lang)和事件屬性,事件屬性來自 XML Events 建議書,正如您將在下面看到的。
這意味只要將 href 屬性添加到任何元素,就可以將它轉(zhuǎn)換成鏈接,而不一定要用錨標(biāo)記包圍單個元素。
這是否表示經(jīng)過四年的努力,XLink 已經(jīng)被 XHTML 2.0 采用了嗎?總而言之,沒有。事實上,XLink 和 XHTML 2.0 中規(guī)定的鏈接之間的差異是那些正從事各自建議書的開發(fā)人員之間爭論的根源,所以在這個最初的公開工作草案和最后的建議書之間可能會做些更改。同時,可以組合使用該功能、導(dǎo)航列表、link 元素,以及資源描述框架(Resource Description Framework (RDF))來復(fù)制 XLink 的大多數(shù)功能。
XForms 是一個與 XML 相關(guān)的建議書,并確實已經(jīng)成為 XHTML 2.0 的一部分
如對本文有疑問,請?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會為你解答??! 點擊進入論壇