本系列由两部分组成,EddDumbill分析了实现Web作者、浏览器开发人员和标准体所提议的HTML的不同方法。本系列将介绍WHATWG规范所表述的渐进式方法和W3C提议的XHTML的推倒重来的激进式方法。此外,作者还将简要介绍W3C新的RichClientActivity。本文是该系列的第2部分,Edd将目光放在W3C正在进行的工作上,以指示Web标记的未来。
本系列的上一期文章中,我说明了为何要改进HTML,包括修正过去的错误和适应Web页面与应用程序提出的越来越高的要求。我介绍了WebHypertextApplicationTechnologyWorkingGroup(WHATWG)在创建WebApplications1.0和WebForms2.0规范方面的工作,这是一个由浏览器厂商组成的松散的联合体。
本文将介绍万维网联盟(W3C)建立下一代XHTML规范版本的工作,以及他们对以Ajax应用程序为代表的“富客户端”行为需求的反应。
W3C有四个工作组正在建立一些特别有趣的规范:
HTML(现在的XHTML)
XForms
WebAPI
WebApplicationFormat
可以在参考资料中找到这些规范的链接。本文主要讨论HTML工作组的研究,但是也有必要作为背景知识讨论一下其他规范,因为这些研究将造就Web的未来。
XForms
XForms是W3C提出的当前HTML表单的后继者。它们被设计成具有更丰富的功能,并将其结果作为XML文档传递给处理应用程序。XForms是模块化的,因此可在任何上下文中使用,而不仅仅是捆绑到XML中使用。XForms与HTML表单的主要区别有:
XForms将用户界面表示从数据模型定义中分离出来。
XForms可以创建和消费XML文档。
XForms是设备中立的。比如,可以在语音浏览器和桌面浏览器中使用同一个表单。
XForms允许在提交之前验证和约束输入。
XForms不使用脚本就能实现多阶段表单。
因为是一种模块化语言,XHTML2.0引入XForms模块来实现表单功能。
WebAPI
W3CWebAPI工作组负责为客户端Web应用程序开发制定标准API。其中第一种也是最常用的一种API就是作为Ajax(也是WHATWG描述的一种技术)核心的XMLHttpRequest功能。程序员可以通过ECMAScript和其他浏览器环境支持的任何语言来使用这些API。
可能制定的其他API包括:
处理浏览器Window对象的API
DOMLevel3EventsandXPath规范
时间事件API
用于非HTTP联网的API,如XMPP或SIP
客户端持久存储API
拖放API
监控下载的API
更新文件的API
虽然这些API不一定会随着XHTML2.0一起实现,但在未来四年中,浏览器很可能将两方面结合起来为Web应用程序提供丰富的平台。
WebApplicationFormat
XHTML2.0是Web应用程序用户界面问题的一部分,但不是全部。MozillaXUL和MicrosoftXAML这些技术已经为用户界面提供了丰富的XML词汇表。
WebApplicationFormat工作组负责按照XUL或XAML的方式开发指定用户界面的声明性格式,以及XBL2的开发,这是一种在自定义标记和已有技术之间提供绑定的声明性语言。实际上,XBL2为程序员提供了编写新的Web应用程序部件的一种方法。
为何要创建XHTML2.0?
XHTML1.0的目的是将HTML转化成XML词汇表。它为HTML引入了XML语法约束:区分大小写、必须用引号括起来的属性值和成对的标签。这项任务完成了,XHTML2.0致力于解决HTML作为一种Web页面标记语言的问题。
W3C的StevenPemberton在阿姆斯特丹XTech2005大会上所作的演讲中(请参阅参考资料)阐述了XHTML2.0的设计目标:
尽可能的使用XML:如果一种语言特性已经在XML中存在,就不要重复或者重新发明。
结构高于表示:感谢CSS样式表,HTML不再需要专门的表示性标签。
使HTML更容易编写:删除HTML中一些无用的特征。
更高的可访问性、设备中立性:尽量避免假设读取文档的方式。
改进的国际化。
更好的表单:盼望已久的改进!
减少脚本的需要:HTML本身包含典型的脚本用法。
更好的语义:使HTML和语义Web应用程序更容易集成。
对于任何曾经用过HTML的人来说,这些目标显然都是值得期待的。现在我将稍微详细地考察XHTML2.0实现这些目标的一些方法。
章节和段落
多年前我刚刚接触HTML的时候,还记得多次对这种语言的文本结构元素感到不知所措。为何有六层标题,什么时候使用合适?而且,为什么标题不包含它们所代表的章节?XHTML2.0为此提供了新的答案,增加了section和h(heading)元素。
section
hLevel1heading/h
...
section
hLevel2heading/h
...
/section
/section
与XHTML1.0相比,这种安排更符合逻辑,其他很多标记词汇表的用户对此也很熟悉。对程序员来说,一个很大的好处是可以在文档中包含内容章节,而不需要重新编码标题层次。
对这些标题可以使用CSS。人们可能期望XHTML2.0的浏览器默认实现能够预先定义一部分,具体来说可能像下面这样(摘自XHTML2.0规范):
h{font-family:sans-serif;font-weight:bold;font-size:200%}
sectionh{font-size:150%}/*Asecond-levelheading*/
sectionsectionh{font-size:120%}/*Athird-levelheading*/
XHTML1.0中另一个不合逻辑的地方是,要使用列表,则必须将列表放在段落中。事实上,必须使用任何块级元素(blockquote、预格式化的章节、table等)。如果这些内容仅仅是同一段落流中的一部分,这样做常常不合逻辑。XHTML2.0去掉了这些限制。惟一的限制是不能将一个段落放到另一个段落中。
图像
HTML中的img标签实际上非常不灵活。正如Pemberton所说,除了alt文本(妨碍采用新的图像格式)它不含任何应变机制,alt文本不能使用标记,longdesc属性由于笨拙而从来没有被使用过。(longdesc用于提供一个URI,该URI指向关于图片的、与alt属性中的说明相比更详细的描述。)
XHTML2.0为这个问题提供了一种很好的解决方案:允许任何元素具有src属性。浏览器可以用这个URI中的内容代替元素中的内容。最简单的情况就是处理图像。但没有人说不能是SVG、XHTML或浏览器能够呈现的任何内容类型。本文来自http://bianceng.cn(编程入门)
img标签本身仍将保留,但该标签中现在包含一些内容。src属性的新操作意味着alt文本现在变成了元素内容,比如下面的例子:
brimgsrc="http://example.com/water.png";Hsub2/subO/img/p
对于日语等语言来说,这是一个好消息,因为Ruby注释(请参阅参考资料)要求行内标记,而以前这在属性值中这是不可能的。
XHTML2.0在object元素中提供了更一般的图像包含形式,该元素可用于包含任何对象类型,从图片、电影到Flash或Java技术这样的可执行代码。这样就可以通过巧妙的技术,根据浏览器能力进行更好的委派,object元素可以多层嵌套。比如,最外层是一段Flash电影,其中包含一个AVI视频文件,再进一层是一个静态图片,最后在嵌套对象的核心是一段文本内容。更多信息请参阅XHTMLObjectModule(参考资料中的链接)。
可扩展的语义
很长一段时间以来,一些HTML元素具有具有语义联系,比如address和title。问题是这类元素很少而且不能扩展。其间,有人尝试用class属性为HTML元素提供语义。与class的设计初衷相比,这样就大大延伸了其功能,而且由于应用CSS样式的属性的广泛使用,所以很难明确应用这种用法。(有人怀疑关于class用途的断言,但后者是很难驳倒的。)
XHTML2.0没有采用这些特别的方法,而是引入了一种方法在文档中指定类似RDF的元数据。RDF陈述是一个三元组(主题、属性、对象)。比如,在英语中可能有三元组:“mycar”、“ispainted”和“red”。
about属性类似于指定RDF三元组subject的rdf:about——可以省略,则文档本身就是主题。property属性是引用性质的URI(如果给定适当声明的前缀可使用缩写形式,更多细节请参阅XHTML2.0MetainformationAttributesModule,见参考资料)。
最后,三元组的第三个值由about和property属性作用的元素内容给出,如果content属性值为空则没有内容。这是一个例子,如果使用过HTML 标签就会非常熟悉,它指定了页面头(pageheader)的创建者:
htmlxmlns="http://www.w3.org/2002/06/xhtml2/";xml:lang="en"
head
titleEddDumbill’sHomePage/title
EddDumbill
/head
...
/html
现在来看看Pemberton给出的这个例子,它说明了如何在真正的文档体中使用元数据:
hproperty="title"Welcometomyhomepage/h
这表示该标题也是XHTML2.0文档的题目,并将其指定为行内标题。终于不用在每个文档中将题目写两次了!
感谢一种简单的称为GRDDL(从语言的方言中采撷资源描述,GleaningResourceDescriptionsfromDialectsofLanguages,参见参考资料)的转换技术,现在有了从XHTML2.0文档中提取RDF元数据的统一标准了。
XHTML2.0在其他方面也有很多变化,多数与平行开发的其他规范(如XForms)有关。这里无法一一介绍XHTML2.0的特性。但无论如何,与XHTML1.0相比,XHTML2.0是一次很大的飞跃。
XHTML2.0中的其他几点变化
受够了编写precode.../code/pre这类代码?现在可以使用新的blockcode元素了。
为了满足可访问性的要求,XHTML2.0提供了role属性,可以在任何body元素中指定。比如,页面中单纯的导航元素可使用role="navigation"属性,这样文本-语音引擎就可以智能地处理它。
浏览器目前支持通过Tab关键字进行焦点切换,但是有很大的随意性。新的nextfocus和prevfocus属性允许控制焦点在屏幕元素间转移的顺序,该属性对于建立可导航的用户界面至关重要。
准备迎接XHTML2.0
无论高级特性中的变化多大,XHTML2.0无疑仍然是HTML。虽然增加了新元素,XHTML2.0的大部分元素仍然和过去一样工作。从兼容的角度出发,XHTML2.0仍然保留了h1到h6元素,此外还有img。
不过,XHTML2.0的战略并不是坚持严格的语法向后兼容,因此现有浏览器的HTML呈现引擎不可能完全应付XHTML2.0文档的表达能力。不管怎样,多数Web浏览器都能很好地呈现任意的XML+CSS,大量XHTML2.0也能以这种方式呈现——虽然无法获得语义上的改进。
XHTML2.0中的一些区别非常重要,改用XForms是其中最值得注意的,还有彻底抛弃了HTML的非XML性质。因此现在还不能一下子把网站改成XHTML2.0,但是可以为未来做好准备:
坚持使用CSS,去掉所有表示性标记。
考虑如何在页面中部署微格式。微格式可以在HTML中使用现有标准(请参阅参考资料)表示元数据。
如果还没有这样做,用XHTML1.0做一下实验。现在使用XHTML1.0页面作为常规HTML是可能的,只要根据XHTML1.0HTMLCompatibilityGuidelines编写即可,但这会带来很大的复杂性。不能将这种方式用于XHTML2.0。更多细节请参阅参考资料。
使用X-Smiles浏览器做实验(请参阅参考资料),它支持XHTML2.0,并提供了SVG、XForms和SMIL2.0Basic能力。
如果基于类XHTML的功能创建新的客户机系统,一定要考虑使用XHTML2.0作为起点。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)最后还要注意的是,XHTML2.0规范还没有完成。撰写本文的时候,该规范仍然处于W3C的工作草案阶段,就是说在成为推荐标准之前,还有一些路要走。重要的是,它还必须经过候选推荐标准阶段,这个阶段用于收集实现的经验。
按照W3CHTML工作组计划,2007年以前XHTML2.0不大可能成为W3C推荐标准。也就是说2006年是获得部署经验的关键一年。
W3CXHTML2.0与WHATWGHTML5的比较
这两期文章介绍了WHATWGHTML5和W3CXHTML2.0的主要特点。这两个计划完全不同:草根组织WHATWG希望渐进式地改进HTML4和XHTML1.0,而联盟支持的XHTML2.0对HTML语言进行了彻底重构。
虽然不同,这两种方法仍然有可比性。WHATWG规范的一些初步成果已经在浏览器中实现,WHATWG的一些工作就是对HTML事实扩展的描述。其中一些重要的部分,如XMLHttpRequest将进入W3C的RichClientActivity规范。WHATWG在Web标准世界中还是有效的催化剂。
把目光放远一些,XHTML2.0方法为Web提供了全新的词汇表,那时候XML的模块化处理、CSS和ECMAScript将很快成为常见的事物。嵌入设备如电话和数字电视没有必要支持杂乱无章的遗留WebHTML,可以毫无负担地利用纯XML词汇表XHTML2.0的优势。此外,可访问性和国际化的新特性使XHTML2.0成为第一个被认为具有通用性的XML文档词汇表,从而成为很多基于标记的工作的坚实而经济的基础。
与过去一样,HTML的未来也是不确定的,有人可能称之为混乱,但是我相信XHTML2.0最终将得到广泛的接受和采纳。如果这是Web上惟一的XML词汇表,可能会有一些问题,但是因为浏览器准备应付SVG、XForms和其他技术,所以XHTML2.0看起来仅仅是另一个基于XML的词汇表而已。
参考资料
学习
您可以参阅本文在developerWorks全球站点上的英文原文。
请阅读关于HTML未来的系列文章中的第一期(developerWorks,2005年12月)。
请参阅XHTML2.0规范。
关于XHTML开发的最新进展,请访问W3CHTML工作组。
请访问W3CXForms页面,那里包括关于XForms工作组的信息。
W3CWebAPI工作组负责为客户端Web应用程序开发指定标准API。
W3CWebApplicationFormats工作组负责为用户界面的制定开发声明性格式。
请参阅StevenPemberton的XTech2005演讲稿:“XHTML2:Accessible,Usable,DeviceIndependentandSemantic”。
进一步了解Ruby注解,它在日文和中文中用于提供发音指导。
XHTML2.0的MetainformationAttributesModule支持在HTML中加入RDF元数据规范。
可以使用XHTML2.0的ObjectModule包含任何对象。
如果需要从XHTML2.0文档中提取RDF三元组,请了解GleaningResourceDescriptionsfromDialectsofLanguages(GRDDL)转换技术。
W3C关于XHTMLMediaTypes的说明描述了网站支持XHTML的最佳实践。具体来说,根据HTMLCompatibilityGuidelines,XHTML2.0不应该像XHTML1.0那样用作text/html。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)微格式是让网页中的人类可读元素带有计算机也能解释的语义的一种方法。它们是连接今天的HTML特殊语义和明天的RDF兼容XHTML2.0元数据的桥梁。