本系列由两部分组成,Edd Dumbill 分析了实现 Web 作者、浏览器开发人员和标准体所提议的 HTML 的不同方法。本系列将介绍 WHATWG 规范所表述的渐进式方法和 W3C 提议的 XHTML 的推倒重来的激进式方法。此外,作者还将简要介绍 W3C 新的 Rich Client Activity。本文是该系列的第 2 部分,Edd 将目光放在 W3C 正在进行的工作上,以指示 Web 标记的未来。
本系列的上一期文章中,我说明了为何要改进 HTML,包括修正过去的错误和适应 Web 页面与应用程序提出的越来越高的要求。我介绍了 Web Hypertext Application Technology Working Group (WHATWG) 在创建 Web Applications 1.0 和 Web Forms 2.0 规范方面的工作,这是一个由浏览器厂商组成的松散的联合体。
本文将介绍万维网联盟(W3C)建立下一代 XHTML 规范版本的工作,以及他们对以 Ajax 应用程序为代表的“丰富客户机”行为需求的反应。
W3C 有四个工作组正在建立一些特别有趣的规范:
- HTML(现在的 XHTML)
- XForms
- Web API
- Web Application Format
可以在参考资料中找到这些规范的链接。本文主要讨论 HTML 工作组的研究,但是也有必要作为背景知识讨论一下其他规范,因为这些研究将造就 Web 的未来。
XForms 是 W3C 提出的当前 HTML 表单的后继者。它们被设计成具有更丰富的功能,并将其结果作为 XML 文档传递给处理应用程序。XForms 是模块化的,因此可在任何上下文中使用,而不仅仅是捆绑到 XML 中使用。XForms 与 HTML 表单的主要区别有:
- XForms 将用户界面表示从数据模型定义中分离出来。
- XForms 可以创建和消费 XML 文档。
- XForms 是设备中立的。比如,可以在语音浏览器和桌面浏览器中使用同一个表单。
- XForms 允许在提交之前验证和约束输入。
- XForms 不使用脚本就能实现多阶段表单。
因为是一种模块化语言,XHTML 2.0 引入 XForms 模块来实现表单功能。
W3C Web API 工作组负责为客户端 Web 应用程序开发制定标准 API。其中第一种也是最常用的一种 API 就是作为 Ajax(也是 WHATWG 描述的一种技术) 核心的 XMLHttpRequest
功能。程序员可以通过 ECMAScript 和其他浏览器环境支持的任何语言来使用这些 API。
可能制定的其他 API 包括:
- 处理浏览器
Window
对象的 API - DOM Level 3 Events and XPath 规范
- 时间事件 API
- 用于非 HTTP 联网的 API,如 XMPP 或 SIP
- 客户端持久存储 API
- 拖放 API
- 监控下载的 API
- 更新文件的 API
虽然这些 API 不一定会随着 XHTML 2.0 一起实现,但在未来四年中,浏览器很可能将两方面结合起来为 Web 应用程序提供丰富的平台。
XHTML 2.0 是 Web 应用程序用户界面问题的一部分,但不是全部。Mozilla XUL 和 Microsoft XAML 这些技术已经为用户界面提供了丰富的 XML 词汇表。
Web Application Format 工作组负责按照 XUL 或 XAML 的方式开发指定用户界面的声明性格式,以及 XBL2 的开发,这是一种在自定义标记和已有技术之间提供绑定的声明性语言。实际上,XBL2 为程序员提供了编写新的 Web 应用程序部件的一种方法。
XHTML 1.0 的目的是将 HTML 转化成 XML 词汇表。它为 HTML 引入了 XML 语法约束:区分大小写、必须用引号括起来的属性值和成对的标签。这项任务完成了,XHTML 2.0 致力于解决 HTML 作为一种 Web 页面标记语言的问题。
W3C 的 Steven Pemberton 在阿姆斯特丹 XTech 2005 大会上所作的演讲中(请参阅参考资料)阐述了 XHTML 2.0 的设计目标:
- 尽可能的使用 XML:如果一种语言特性已经在 XML 中存在,就不要重复或者重新发明。
- 结构高于表示:感谢 CSS 样式表,HTML 不再需要专门的表示性标签。
- 使 HTML 更容易编写:删除 HTML 中一些无用的特征。
- 更高的可访问性、设备中立性:尽量避免假设读取文档的方式。
- 改进的国际化。
- 更好的表单:盼望已久的改进!
- 减少脚本的需要:HTML 本身包含典型的脚本用法。
- 更好的语义:使 HTML 和语义 Web 应用程序更容易集成。
对于任何曾经用过 HTML 的人来说,这些目标显然都是值得期待的。现在我将稍微详细地考察 XHTML 2.0 实现这些目标的一些方法。
多年前我刚刚接触 HTML 的时候,还记得多次对这种语言的文本结构元素感到不知所措。为何有六层标题,什么时候使用合适?而且,为什么标题不包含它们所代表的章节?XHTML 2.0 为此提供了新的答案,增加了 <section>
和 <h>
(heading) 元素。
|
与 XHTML 1.0 相比,这种安排更符合逻辑,其他很多标记词汇表的用户对此也很熟悉。对程序员来说,一个很大的好处是可以在文档中包含内容章节,而不需要重新编码标题层次。
对这些标题可以使用 CSS。人们可能期望 XHTML 2.0 的浏览器默认实现能够预先定义一部分,具体来说可能像下面这样(摘自 XHTML 2.0 规范):
|
XHTML 1.0 中另一个不合逻辑的地方是,要使用列表,则必须将列表放在段落中。事实上,必须使用任何块级元素(blockquote、预格式化的章节、table 等)。如果这些内容仅仅是同一段落流中的一部分,这样做常常不合逻辑。XHTML 2.0 去掉了这些限制。惟一的限制是不能将一个段落放到另一个段落中。
HTML 中的 <img>
标签实际上非常不灵活。正如 Pemberton 所说,除了 alt
文本(妨碍采用新的图像格式)它不含任何应变机制,alt
文本不能使用标记,longdesc
属性由于笨拙而从来没有被使用过。(longdesc
用于提供一个 URI,该 URI 指向关于图片的、与 alt
属性中的说明相比更详细的描述。)
XHTML 2.0 为这个问题提供了一种很好的解决方案:允许任何 元素具有 src
属性。浏览器可以用这个 URI 中的内容代替元素中的内容。最简单的情况就是处理图像。但没有人说不能是 SVG、XHTML 或浏览器能够呈现的任何内容类型。
<img>
标签本身仍将保留,但该标签中现在包含一些内容。src
属性的新操作意味着 alt
文本现在变成了元素内容,比如下面的例子:
|
对于日语等语言来说,这是一个好消息,因为 Ruby 注释(请参阅参考资料)要求行内标记,而以前这在属性值中这是不可能的。
XHTML 2.0 在 <object>
元素中提供了更一般的图像包含形式,该元素可用于包含任何对象类型,从图片、电影到 Flash 或 Java 技术这样的可执行代码。这样就可以通过巧妙的技术,根据浏览器能力进行更好的委派,<object>
元素可以多层嵌套。比如,最外层是一段 Flash 电影,其中包含一个 AVI 视频文件,再进一层是一个静态图片,最后在嵌套对象的核心是一段文本内容。更多信息请参阅 XHTML Object Module(参考资料中的链接)。
很长一段时间以来,一些 HTML 元素具有具有语义联系,比如 <address>
和 <title>
。问题是这类元素很少而且不能扩展。其间,有人尝试用 class
属性为 HTML 元素提供语义。与 class
的设计初衷相比,这样就大大延伸了其功能,而且由于应用 CSS 样式的属性的广泛使用,所以很难明确应用这种用法。(有人怀疑关于 class
用途的断言,但后者是很难驳倒的。)
XHTML 2.0 没有采用这些特别的方法,而是引入了一种方法在文档中指定类似 RDF 的元数据。RDF 陈述是一个三元组(主题、属性、对象)。比如,在英语中可能有三元组:“my car”、“is painted” 和 “red”。
about
属性类似于指定 RDF 三元组 subject 的 rdf:about
——可以省略,则文档本身就是主题。property
属性是引用性质的 URI(如果给定适当声明的前缀可使用缩写形式,更多细节请参阅 XHTML 2.0 Metainformation Attributes Module,见参考资料)。
最后,三元组的第三个值由 about
和 property
属性作用的元素内容给出,如果 content
属性值为空则没有内容。这是一个例子,如果使用过 HTML <meta>
标签就会非常熟悉,它指定了页面头 (page header) 的创建者:
|
现在来看看 Pemberton 给出的这个例子,它说明了如何在真正的文档体中使用元数据:
|
这表示该标题也是 XHTML 2.0 文档的题目,并将其指定为行内标题。终于不用在每个文档中将题目写两次了!
感谢一种简单的称为 GRDDL(从语言的方言中采撷资源描述,Gleaning Resource Descriptions from Dialects of Languages,参见参考资料)的转换技术,现在有了从 XHTML 2.0 文档中提取 RDF 元数据的统一标准了。
XHTML 2.0 在其他方面也有很多变化,多数与平行开发的其他规范(如 XForms)有关。这里无法一一介绍 XHTML 2.0 的特性。但无论如何,与 XHTML 1.0 相比,XHTML 2.0 是一次很大的飞跃。
受够了编写 <pre><code> ... </code></pre>
这类代码?现在可以使用新的 <blockcode>
元素了。
为了满足可访问性的要求,XHTML 2.0 提供了 role
属性,可以在任何 body 元素中指定。比如,页面中单纯的导航元素可使用 role="navigation"
属性,这样文本-语音引擎就可以智能地处理它。
浏览器目前支持通过 Tab 关键字进行焦点切换,但是有很大的随意性。新的 nextfocus
和 prevfocus
属性允许控制焦点在屏幕元素间转移的顺序,该属性对于建立可导航的用户界面至关重要。
无论高级特性中的变化多大,XHTML 2.0 无疑仍然是 HTML。虽然增加了新元素,XHTML 2.0 的大部分元素仍然和过去一样工作。从兼容的角度出发,XHTML 2.0 仍然保留了 <h1>
到 <h6>
元素,此外还有 <img>
。
不过,XHTML 2.0 的战略并不是坚持严格的语法向后兼容,因此现有浏览器的 HTML 呈现引擎不可能完全应付 XHTML 2.0 文档的表达能力。不管怎样,多数 Web 浏览器都能很好地呈现任意的 XML + CSS,大量 XHTML 2.0 也能以这种方式呈现 —— 虽然无法获得语义上的改进。
XHTML 2.0 中的一些区别非常重要,改用 XForms 是其中最值得注意的,还有彻底抛弃了 HTML 的非 XML 性质。因此现在还不能一下子把网站改成 XHTML 2.0,但是可以为未来做好准备:
- 坚持使用 CSS,去掉所有表示性标记。
- 考虑如何在页面中部署微格式。微格式可以在 HTML 中使用现有标准(请参阅参考资料)表示元数据。
- 如果还没有这样做,用 XHTML 1.0 做一下实验。现在使用 XHTML 1.0 页面作为常规 HTML 是可能的,只要根据 XHTML 1.0 HTML Compatibility Guidelines 编写即可,但这会带来很大的复杂性。不能将这种方式用于 XHTML 2.0。更多细节请参阅参考资料。
- 使用 X-Smiles 浏览器做实验(请参阅参考资料),它支持 XHTML 2.0,并提供了 SVG、XForms 和 SMIL 2.0 Basic 能力。
- 如果基于类 XHTML 的功能创建新的客户机系统,一定要考虑使用 XHTML 2.0 作为起点。
最后还要注意的是,XHTML 2.0 规范还没有完成。撰写本文的时候,该规范仍然处于 W3C 的工作草案阶段,就是说在成为推荐标准之前,还有一些路要走。重要的是,它还必须经过候选推荐标准阶段,这个阶段用于收集实现的经验。
按照 W3C HTML 工作组计划,2007 年以前 XHTML 2.0 不大可能成为 W3C 推荐标准。也就是说 2006 年是获得部署经验的关键一年。
W3C XHTML 2.0 与 WHATWG HTML 5 的比较
这两期文章介绍了 WHATWG HTML 5 和 W3C XHTML 2.0 的主要特点。这两个计划完全不同:草根组织 WHATWG 希望渐进式地改进 HTML 4 和 XHTML 1.0,而联盟支持的 XHTML 2.0 对 HTML 语言进行了彻底重构。
虽然不同,这两种方法仍然有可比性。WHATWG 规范的一些初步成果已经在浏览器中实现,WHATWG 的一些工作就是对 HTML 事实扩展的描述。其中一些重要的部分,如 XMLHttpRequest
将进入 W3C 的 Rich Client Activity 规范。WHATWG 在 Web 标准世界中还是有效的催化剂。
把目光放远一些,XHTML 2.0 方法为 Web 提供了全新的词汇表,那时候 XML 的模块化处理、CSS 和 ECMAScript 将很快成为常见的事物。嵌入设备如电话和数字电视没有必要支持杂乱无章的遗留 Web HTML,可以毫无负担地利用纯 XML 词汇表 XHTML 2.0 的优势。此外,可访问性和国际化的新特性使 XHTML 2.0 成为第一个被认为具有通用性的 XML 文档词汇表,从而成为很多基于标记的工作的坚实而经济的基础。
与过去一样,HTML 的未来也是不确定的,有人可能称之为混乱,但是我相信 XHTML 2.0 最终将得到广泛的接受和采纳。如果这是 Web 上惟一的 XML 词汇表,可能会有一些问题,但是因为浏览器准备应付 SVG、XForms 和其他技术,所以 XHTML 2.0 看起来仅仅是另一个基于 XML 的词汇表而已。