多年以来,HTML只是在不断变大,却从未变小,因为新版本必须维护向后兼容性。这一情况将得以改变。XHTML 2.0的第一个工作草案于2002年8月5日发布,一大新闻就是取消了向后兼容性;该语言终于得以继续发展。那么,作为一名开发人员您将得到什么回报呢?健壮的表单和事件表现如何呢?它们是研究不需要大量 JavaScript 的框架以及甚至层次结构菜单的更佳方法。
本文概述了 XHTML 2.0 中的新增功能以及将来可能会如何使用它。读者应该熟悉 HTML 和/或 XHTML 1.0。熟悉级联样式表(Cascading Style Sheet (CSS))是有帮助的,但不是必需的。
告别向后兼容性,引入结构 当万维网联盟(World Wide Web Consortium (W3C))于 2002 年 8 月 5 日发布 XHTML 2.0 的第一个工作草案时,最让人吃惊的是:与其先前的版本不同,它不是向后兼容的。对于先前的发行版,如从 HTML 4.01 转到 XHTML 1.0 以及后来从 XHTML 1.0 到 XTHML 1.1,变化都是添加一些内容;可以读取 XHTML 1.0(过渡的)文档的浏览器也可以理解 HTML 4.01 文档。而 XHTML 2.0 不是那样的。
如果您在两年前宣布我们今天将研究不带 img 标记或 bold 标记的 HTML 版本,那么大多数 Web 开发人员都会用怀疑的眼光看着您。然而,现在就是这样。除了彻底替换表单和框架外,XHTML 2.0 还除去了 b、i 和img标记(以及 big、small 和 tt),甚至不赞成使用br,以准备从将来的发行版中除去它。但这是为什么呢?
原因在于大多数标记都是表示性的。它们的唯一目的就是给予浏览器指令,规定有关其内容应该如何显示,但却完全未提供有关其内容是什么的信息。例如,请考虑下面两个句子:
Presentational elements are, <i>for the most part</i>, <b>gone</b>.
和
Presentational elements are, <em>for the most part</em>, <strong>gone</strong>.
在没有样式表的情况下,这两个句子在浏览器中看起来是一样的,但只有第二个句子提供了有关原因的信息。事实上,从一开始 em(强调)和 strong 标记就出现在 HTML 中了,但多年以来作者们基本上已经忽略了它们,而专注于表现形式,这是以牺牲内容为代价的。
但这并不意味着只要您想使某些内容变成粗体或斜体,就应该将它们硬塞进这两个标记中。相反,除去表示性元素的整个目的是设法完成 CSS 的发明者的初衷,即应该根据内容所表示的东西来标记内容,而样式表应该用于美化内容。例如,清单 1 使用类别(class)来指出内容类型。
清单 1. 使用类别指定内容类型
<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>
在该页面中,日期类型可以由内容本身来确认,浏览器可以使用类别信息来决定如何为其设计样式,如图 1 中所示。

图1. 类别可以确定显示哪一类内容,样式表可以对它进行适当的格式化。
用这种观点研究它:断开(br)标记的目的无外乎是为了显示,因为实际上它并无任何内容。XHTML 2.0 不赞成使用 br 标记,而提倡使用 line 标记。line 标记指定一种特殊的内容:通常是以后跟换行和回车这种方式呈现的一行文本或其它内容。例如,文本:
<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)标记表示一段内容。
为什么所有这些都很重要呢?因为 Web 不仅正日益成为人与人之间通信的场所,而且还日益成为软件应用程序(如服务器和搜索引擎索引器)之间进行通信的场所。而且,每个人(或者说几乎每个人)都使用相同浏览器的时代已经一去不复返了。开发人员正不断为不同设备(如 PDA 和移动电话)重新设计内容。语音触发的(voice-activated)系统已经离我们不远了。内容的结构意义正变得几乎与内容本身一样重要。
节
XHTML 2.0 添加了节(section)和标题(heading)。HTML 一直都包含编号的标题 — h1 到 h6,直到 2002 年 8 月 5 日的工作草案,还未将其撤消,但这只是一个时间问题。而 XHTML 2.0 使用通用标题和节。例如,可以嵌套节,从而赋予标题含义。以前用编号标题呈现的文档(清单 2):
清单 2. 文档中的编号标题
<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>
可以用通用标题和节替换(清单 3):
清单 3. 通用标题和节
<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>
这种结构有两个优点。首先,应用程序(如搜索引擎 crawler)能够更容易地了解内容的相对重要性,其次,节是自包含的。在 HTML 中,节以其标题开始,所以在标题的前面不会出现内容(如介绍性内容)。section 元素取消了这种约束,因为其内部的任何内容都是节的一部分。
|