账号:
密码:
最新动态
产业快讯
CTIMES / 文章 /
网页发展的未来 – XHTML 2.0
 

【作者: Nicholas Chase】2004年05月26日 星期三

浏览人次:【10240】

HTML一直以来不地断膨胀,因为新版本必须维护向下的兼容性,所以从未变小过;这一种情况将会在XHTML 2.0推出后,得以改变。


World Wide Web Consortium(W3C)于2002 年 8 月 5 日发布XHTML 2.0的第一个工作草案,当时最大的新闻就是取消了向后兼容性,并使该语言能够不断地发展下去。不过作为一名开发人员的工程师将得到什么样的回报呢?健壮的窗体和事件的表现又如何呢?


答案是XHTML 2.0不需要大量JavaScript的框架,以及层次结构菜单等复杂语法,就可以轻易地表现出工程师想要的窗体。


告别向下兼容性与引入结构

对于先前的发行版,如从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)。它们的唯一目的就是给予浏览器指令,规定有关其内容应该如何显示,但却完全未提供有关其内容是什么样的信息。例如下面两个句子:


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(emphasis)和strong卷标就出现在HTML中了,但作者们基本上早已忽略了它们,而只专注在表现形式上,不过这样的作法却牺牲了内容。


然而,这并不意味着工程师为了想使某些内容变成粗体或斜体,就应该将它们硬塞进这两个卷标中;相反地,除去表示性元素的整个目的,是设法完成CSS发明者的初衷,即应该根据内容所表示的东西来卷标内容,而样式表单则应该用于美化内容。例如,(程序一)使用类别(class)来指出内容类型。


程序一 使用类别指定内容类型

<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>

在该页面中,日期类型可以由内容本身来确认,而浏览器则可以使用类别信息来决定如何为其设计样式,如(图一)中所示。


《图一 类别可以确定显示哪一类内容,而样式表单可以对它进行适当的格式化。》
《图一 类别可以确定显示哪一类内容,而样式表单可以对它进行适当的格式化。》

以这种观点看来,换行(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)系统已经离我们不远了。所以由此看来,内容结构的意义,变得几乎与内容本身一样重要。


Sections(节)

HTML有h1到 h6的标题卷标,一直到了2002年8月5日的工作草案定谳时,都还未将其撤销,不过这只是一个时间问题罢了。因为在XHTML 2.0里,添加了节(section)和标题(heading)两个卷标;这样一来,可以嵌套节,从而赋予标题含义。我们可以比对(程序二)和(程序三)的范例,来看出两者的不同


程序二 HTML所用的编号标题及所呈现的文件:

<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>

程序三 通用标题和节,两者可随时替换:

<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中,节以其标题开始,所以在标题的前面不会出现内容,例如介绍性的内容等;XHTML 2.0的Section 元素则取消了这种约束,因为其内部的任何内容都是节的一部分。


导航列表和菜单

XHTML 2.0增加了一个让Web开发人员大大受益的结构,那就是导航列表(Navigation lists)。由nl卷标所指定的导航列表,其工作原理与“表亲”有序列表(ol)和无序列表(ul)非常相似,但有一点不一样,那就是导航列表的项仅在列表启动时才出现。因此,导航列表与层次结构的弹出菜单(Menus)十分相似。


这种弹出菜单很受Web开发人员的欢迎,因为它们提供了许多导航信息,而且不会占据太多的屏幕空间,例如肥皂剧站点可能有以下的菜单,如(程序四):


程序四 使用导航列表

<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>

当用户启动“名称”(Character Options)时,会出现列表项。只不过当用户启动主列表时,子列表(如 Leave 菜单)是否会出现,还是用户必须启动子列表项本身以使其出现,工作草案则未说明清楚,作者在最后可能会通过样式或事件来控制这一行为。值得注意的是,在任何情况下,当输入焦点从主元素移开时,列表项就会消失。


无处不在的链结

读者可能已经注意到,即使打算将前一个示例作为菜单,但它没有锚点(a)卷标,不过href属性则正确地放在了li元素上;这并不是导航列表的特性,而是XHTML 2.0的新特性,以及超文本相关的属性,如href、target和accesskey。


目前这些属性已成为公共属性集合(Common Attribute Collection)的一部分,它包括核心属性,如class、id和title、国际化属性(xml:lang,它替换了XHTML 1.1 中的lang)和事件属性。


事件属性是来自XML Events建议书,意味只要将href属性添加到任何元素,就可以将它转换成链结,而不一定要用锚点卷标包围单个元素。这是否表示经过四年的努力,Xlink就会被XHTML 2.0采用吗?答案是没有。


事实上,XLink和XHTML 2.0中规定的链结之间的差异,正是那些从事建议书的各开发人员争论根源,所以在这个最初的公开工作草案和最后的建议书之间会做些更改。并且可以同时组合使用导航列表、Link元素,以及资源描述框架(Resource Description Framework,RDF)等功能,来复制XLink的大多数功能。


XForms

XForms是一个与XML相关的建议书,并已经成为XHTML 2.0的一部分了。XML窗体语言(XML Forms Language,XForms)是研究窗体的一种全新方法,它像XHTML的其余部分一样,其内容、结构和表现是完全独立。


XForms 页面指定一个模型,该模型拥有有关窗体自身的信息,然后可以在页面周围散布窗体元素,而不是被局限于单个窗体元素。这意味着,用户甚至可以在页面的同一区域中合并不同窗体的元素。用户也可以通过实例文件来填充窗体,而实例文件则是从窗体元素上的XPath表达式引用。


窗体元素自身也代表了特殊类型的对象,而不只是描述如何显示在页面上。当更新窗体元素中的数据时,会同时更新实例文件。当用户提交窗体时,实际发送的是实例文件。


XForms建议书里,特别说明了不存在单个窗体的XForms。因为它是多个XForms 的页面,不再是单个XForm的页面。


数据字段必须包含有效的数据,窗体才能够进行验证及使用,所以XForms需要透过XML模式来约束所提交的数据。此外,用户也可以通过添加XML Events(它也包括在XHTML 2.0中),来进一步增强XForms页面的功能。


XML Events

读者可能已经熟悉了通过添加onclick 和onmouseover等对象来在Web的页面上使用事件。不过这些熟悉的属性将不会再被使用,因为它们已经被XHTML 2.0中的XML Events模块所取代。


XML Events提供了一种通用的方法来指定事件发生时,所应该采取的操作,它的优点是用户不再受限于如单击鼠标之类的预定义事件,相反地,它可以定义用户自己所定义的事件,以及触发它们时,会发生什么样的状况。XML Events包含了许多组件,以(程序五)为例:


程序五 要单击的页面

<html>
<head><title>Rides</title></head>
<body>
<ul id="ridelist">
<li href="monorail.html">Monorail</li>
<li href="Matterhorn.html">Matterhorn</li>
<li href="coaster.html">Roller coaster</li>
</ul>
</body>
</html>

用户可能会单击第二个li元素“Matterhorn”,当这情况发生时,鼠标单击事件会从文件根行进到目标(li)并再次返回,其顺序为:


(root) -- html -- body -- ul -- li -- ul -- body -- html -- (root)。

XML Events向下行进到目标称为捕捉(capture)阶段,而再次向上行进则称为冒泡(bubbling)阶段,不过并不是所有的事件都会冒泡。在行进期间,事件会随时传递给listener所创建的观察器,并加以注册成为对象。如果XML Events看到事件,就会开始执行特定的操作。以下列的序列为例:


<ev:listener observer="ridelist" event="mousedown" handler="#myscript"/>

listener使ul元素,或更准确一点说是整个列表成为观察器。所以当用户单击任何列表项目时,ridelist的观察器就会执行myscript,不过必须先行确定调用任意脚本的机制。


XFrames

曾被广受指责的框架也在XHTML 2.0中被替换了。XHTML 2.0则在XFrames的第一个工作草案登场的前一天,宣布使用XFrames并试图解决传统 HTML框架所出现的问题。绝大多数问题都是有关于创建书签、刷新页面、不支持一些框架的搜索引擎,以及无法索引适当的内容等。


在XFrames的文件中,所包含内容的URI则成为整个文件的一部分,见(程序六):


程序六 XFrames 页面

<html>
<head><title>XFrames</title></head>
<body>
<row>
<frame id="header" />
<column>
<frame id="menu"/>
<frame id="content"/>
</column>

</row>
</body>
</html>

请注意,虽然每个框架并没有指定URI,但每个框架都有自己唯一的标识符,因此这个文件的URI可能是:


site.xfm#frames(header=header.xhtml,menu=menu.xhtml,content=main.xhtml)

XFrames的浏览器提供了每个框架的内容与适当的URI,当用户单击链结并更改个别框架的内容时,整个页面的URI都会更改,所以它始终会显示用户正在查看的实际内容。至于“收藏”和“后退”按钮,则提供了准确的内容。


图形对象

XHTML 2.0工作草案的最后一个重要改变,就是用object卷标替代img卷标。object卷标实际上在HTML 4.01中就已经出现,但开发人员主要将它用于嵌入多媒体和 Java applet,因为它能够支持图像。使用object卷标的主要优点,是在于它被设计成向下链接。


换句话说,如果浏览器不能显示一个特定对象,那么它将显示该对象的内容。举例来说,遇到下列代码片段的浏览器会先试着装入电影;如果装入电影失败,便会装入图像;如果装入图像失败,那么它将只显示文本。


<object data="rides.mpeg" type="application/mpeg">
<object data="rollercoaster.jpg" type="image/jpg">
        Jack tries to expand his horizons on the racing coasters.
</object>
</object>

结语


XHTML 2.0工作草案中,并不能确定任何事情,但就在目前的草案和被作为建议书采纳的过程中,几乎可以肯定它将在某些方面发生变化,只不过强调结构和语义的目标还是维持现状。


基于这个原因,用户最好研究现在构建的页面,并开始养成适当使用结构和样式的习惯。再者,卷标是用来指定某些事物所代表的意义,而不是如何显示它们。总而言之,用户必须考虑文件的结构,以及它们的工作,而不是考虑如何将它们显示在页面上。


<本文数据由台湾IBM提供,数据由程裕翔整理,作者为Chase & Chase总裁,更多数据请参考IBM Taiwan开发者网站:http://www2.tw.ibm.com/developerWorks/>


延 伸 阅 读
这里有作者对XHTML 2.0所作的研究报告,以及一些工作日志,读者可以从本文见到XHTML 2.0轻松的一面。相关介绍请见「XHTML 2.0的Weblog」一文。
本篇文章的作者简易化了W3C的文件内容,并作了转档的动作,让IE6、Opera、Mozilla等用户都可以浏览其文件。你可在「XHTML 2.0的作业内容」一文中得到进一步的介绍。
本篇文章介绍了W3C所制定的XHTML 2.0的文件内容,并将一些新的观念和技术做简单的解释,让读者能够有初步的概念。在「XHTML 2.0的第一份文件」一文为你做了相关的评析。
相关组织网站
IBM的网站:本篇文章的原文
W3C官方网站:XHTML 2.0文件
研究XML和XHTML论坛网站
相关文章
SOAP - 让程式畅行于网路间
打造Web行动应用系统平台
数位家庭之互通关键 - UPnP应用分析
小世界的朋友网路 - FOAF
WWS发展现况之剖析
comments powered by Disqus
相关讨论
  相关新闻
» 仁大资讯Booster5让小店家也能做在地行销
» 中国国家邮政局:春节京东物流量占比最大
» 贸协携eBay打造台湾馆助MIT产品跨境销全球
» 京东携手Intel建立数字化零售联合实验室
» 2017 Q1台资安设备成长5.5% IDC:政府、教育与银行产业需求强劲


刊登廣告 新聞信箱 读者信箱 著作權聲明 隱私權聲明 本站介紹

Copyright ©1999-2024 远播信息股份有限公司版权所有 Powered by O3  v3.20.1.HK84R6SHWPWSTACUKF
地址:台北数位产业园区(digiBlock Taipei) 103台北市大同区承德路三段287-2号A栋204室
电话 (02)2585-5526 #0 转接至总机 /  E-Mail: webmaster@ctimes.com.tw