您的位置:寻梦网首页编程乐园XML 编程>XHTML 1.0熟悉和入门
XML 编程

XHTML 1.0熟悉和入门
作者:Molly Holzschlag

还在用 HTML 编写文档?如果是的话,就不符合当前标准了。2000 年 1 月 26 日,XHTML 1.0 成为万维网联盟 (W3C) 的建议。根据 W3C,HTML 不再是 Web 标记标准。取而代之,XHTML 1.0 已替代旧宠儿,标志着通信技术令人兴奋的新时代已经来临。

那么,XHTML 1.0 到底是什么?对 Web 开发人员来说,它意味着什么?下面从 W3C 的描述讲起:XHTML 1.0 是 XML 应用程序的 HTML 再形成。这意味着,如果用 XHTML 1.0 编制文档,则将 XML 固有的规则和概念应用到 Web 标记。很自然,还有个摇摆的问题:现在可以用 XHTML 1.0 标记 Web 文档吗?答案很明确:“是的”。所要做的全部只是学会正确组织文档结构,选择所需的正确文档类型定义 (DTD),以及学会几种管理代码开发的新方法。

但是,XHTML 1.0 怎么会如此轻易上手呢?在编写文档时,您将看到,它使用您所熟悉的 HTML 作为其词汇。在方法上有较小的变化,而在思路上有主要的不同,XHTML 1.0 允许 Web 作者依据标准进行编码,并开始改变有关未来发展和更改的观点。

为什么需要另一种标记语言?
HTML 使用起来相当好。确实,我们一直受到提出确实管用的跨浏览器、跨平台解决方案的挑战。但是,在 Web 从 90 年代的早期形式发展到今天我们所知的充满活力的活动 Web 的过程中,也意味着在前进途中消耗、破坏甚至制造了新的 HTML 规则。

学过 HTML 4.0 准则的开发人员都知道,在 HTML 4.0 标准出现时,已经确定了改进 HTML 准则的最终目标。HTML 4.0 的一些主要考虑包括:

  • 通过将基本格式化与样式分离,来整理文档
  • 反对使用随心所欲或有问题的元素
  • 要求声明文档类型(并希望在声明中,作者遵循 HTML 4.0 的三个 DTD 中的规则)

这些原则都在 XHTML 1.0 中存在,但是它们与 XML 中的概念组合在一起,这些概念帮助改进标记超出只加强其基本语法的作用。XHTML 1.0 的目标很多,但是,包括以下几个:

  • 提供 Web 标记中可扩展性的基础
  • 通过过去、现在和将来的浏览器,提供相同或更好的互操作性
  • 通过即将来临的 XHTML 版本、其它 XML 应用和刚刚出现的技术(如无线和新型设备开发),使作者为不断发展的机遇作好准备。

采用 XHTML 1.0 最有说服力的理由恐怕是:开发人员(特别是通过 HTML 自学、或依靠可视设计工具来实现其目标的开发人员)可以通过学习该标准,来轻易地移至其它 XML 应用。然后,他们就可以看到 XML 和可扩展性的力量。因为过程相似:即 HTML 词汇加上一些新的结构和语法方法,所以,XHTML 1.0 使 XML 及其应用的领域不再令人畏惧。

通过使用熟悉的语言和一些新的概念,很容易转入不太熟悉的领域。例如,XHTML 1.0 的知识可以简化转移到即将出现的 XHTML 版本以及无线和其它应用的相关 XML 技术的过程(如 WML(无线标记语言)、SMIL(同步多媒体语言)和 SVG(可伸缩矢量图形))。

探询根源
探询 XHTML 根源有助于理解 XHTML 的基本原理及指引它的规则。XML 和 HTML 的根源相同,都是 SGML,即标准通用标记语言 (Standardized General Markup Language)。有一点很重要:SGML 本身不是一门语言。它是人们所知的元语言 -- 即包含开发其它语言所依据规则的语言。

XML 与其根源 SGML 一样,也是元语言。正如这样,其规则用于创建 XML 应用。而 XHTML 是将另一门 SGML 语言,HTML,用作其词汇的 XML 应用。

如果关系看起来有些复杂,那是因为它确实有些复杂。SGML 首先产生 HTML,然后是 XML。当觉察到 HTML 的担心和限制时,XML 规则就很明显地可以使 HTML 成长为帮助开发人员脱离这些限制的标记语言。

首先,需求
为了使 XHTML 1.0 文档符合其元语言 (XML),必须考虑几个需求和规则。如下所示:

  • 建议、但不要求使用 XML 声明将 XHTML 1.0 文档声明成 XML 文档。
  • 要求 XHTML 1.0 文档包含一个 DOCTYPE,指明这是 XHTML 1.0 文档,并指出该文档所用的 DTD。
  • XHTML 1.0 文档有一个根元素 <html>。该 HTML 元素的开始标记应该包含 XML 名称空间 xmlns 和该名称空间的合适值。
  • 文档的语法和结构必须符合 XHTML 语法规则。

实现该目标的第一步是正确组织 XHTML 1.0 文档的结构。将从添加正确的声明和文档信息开始。

文档声明、类型和名称空间
XHTML 1.0 文档可以包含几个结构元素,以便被认为是正确的:一个 XML 声明、一个 DOCTYPE 声明,并包括名称空间。XML 声明允许作者将其文档声明成 XML,并包括文档所用的编码。

<?xml version="1.0" encoding="UTF-8"?>

如前面提到的,建议使用此声明,但这不是必需的。不强制使用的部分原因是:如果使用,则某些浏览器(包括 IE 4.5 for Mac 和 Netscape 4.0 for Windows)将显示不正确的 XHTML 页面。因此,大多数对互操作性感兴趣的 XHTML 1.0 作者不使用它。但是,因为编码信息在很多情况下很重要(特别在使用国际化文档时),所以,如果不使用 XML 声明,则鼓励在 meta 标记中添加编码信息(在后面的清单 2 中显示)。

在 XML 文档声明的下面 - 如果选择不使用它,则位于文档顶部 - 必须放置 DOCTYPE 声明。DOCTYPE 允许作者声明所用的文档类型。在本例中,文档类型是 XHTML 1.0,该文档要符合的特定 XHTML 1.0 DTD 为 strict。

XHTML 1.0 中只有三种 DTD。它们来自 HTML 4.0,其内容如下:

  • Strict:Strict 遵循最严格的 XHTML 规则。在以该类型编写的文档中,只允许出现当前元素、属性和字符实体。不允许出现 HTML 4.0 所反对的元素(如 fontcenter)。也不允许过时的元素。Strict 声明如下:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  • Transitional:transitional XHTML 1.0 文档更宽容一些,它允许作者使用所反对的和当前的方法。可以在 transitional 文档中使用 fontcenter,或任何其它所反对的标记,只要文档本身标记正确即可。不应该使用过时的元素。如果在用 XHTML 1.0 编写 transitional 文档,将包括以下声明:
     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  • Frameset: frameset DTD 只为 frameset 文档保留。符合该 DTD 的 frameset 文档可以使用 strict 或 transitional 标记。要以 XHTML 1.0 创建 frameset 文档,在文档顶部包括这个 DOCTYPE:
     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

确定了是否使用 XML 声明,并且添加了定义要遵循的标记规则的 DOCTYPE 声明之后,需要将 HTML 根添加到文档,并相应设置 XHTML 名称空间:

<html xmlns="http://www.w3.org/1999/xhtml">

此时,要添加一些必需的结构元素,如 headtitlebody。清单 1 显示包括 XML 声明的 XHTML 1.0 transitional 文档外壳。在清单 2 中,将看到不带 XML 声明的 transitional 文档,但是,有一个 meta 标记来声明所用字符集。

清单 1:带有 XML 声明的 Transitional DTD 格式的 XHTML 1.0 文档

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Transitional Document with XML Declaration</title>

</head>
<body>
 
 

</body> </html>


在清单 2 中,将看到不带 XML 声明的 transitional 文档,但是,有一个 meta 标记来声明所用字符集。

清单 2:不带 XML 声明的 Transitional DTD 格式的 XHTML 1.0 文档

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Transitional Document without XML Declaration</title> 
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>

</head>
<body>
 
 

</body>

</html>

语法事项
一旦 XHTML 文档包含必需的声明和结构信息,就可以检查由 XML 在 Web 标记上的影响而导致的语法更改。这些语法更改包括是否区分大小写、正确格式的标记元素、空和非空元素,以及引号的使用。

大小写
如您所知,HTML 不区分大小写。这意味着,HTML 元素和属性名称可以是大写、小写或大小写混合的。因此,可以写成:

<body background="my.gif">

<BODY BACKGROUND="my.gif">

甚至

<BoDy background="my.gif">

所有这些示例的功能相同。另一方面,XML 却是区分大小写的。因此,XHTML 要求有特定的大小写。在 XHTML 1.0 中,所有元素和属性名称必须是小写的:

<body background="my.gif">

除元素和属性名称之外,其它不必遵循 XHTML 1.0。请注意,属性值(例如 "my.gif")可以是大小写混合的。如果文件所在服务器的文件系统是区分大小写的,或者在应用中使用大小写混合的代码(例如那些用 Microsoft 的活动服务器页面 (ASP)、ASP+ 或 ColdFusion 编写的代码),则尤其如此。

良好的格式
虽然很多 HTML 浏览器很宽容,但是,很多 HTML 工具不符合标准。就这样,某些作者养成了坏习惯,如不正确的标记嵌套。下例在很多浏览器中可以使用:

<b><i>Welcome to MySite.Com</b></i>

在宽容的浏览器中,它将显示粗体和斜体。但是,如果拿起笔来,从粗体的开始标记到其结束标记画一个弧,然后,再从斜体的开始标记到其结束标记画一个弧,将看到,两条弧线相交。这展示了不正确的标记嵌套,我们认为,这是坏格式。

在 XHTML 1.0 中,不接受这样的坏格式标记。必须在“每个元素必须正确嵌套”方面符合良好格式的概念。前面示例用 XHTML 1.0 表示为:

<b><i>Welcome to MySite.Com</i></b>

现在,再画弧,将看到,弧线不再相交。这些标记以正确顺序放置,并被认为是正确的格式。

非空和空元素
非空元素包含一个元素和一些内容:

<p>This is the content within a non-empty element.</p>

相反,空元素没有内容,只有元素及其属性,如 <hr>、<br> <img>

XML 规则指出,空元素和非空元素必须完全关闭。在 HTML 中,可以看到非空元素通常有一些可选的结束标记。上段可以这样写:

<p>This is the content within a non-empty element.

在 HTML 中,认为这是正确的。XHTML 1.0 要求,非空元素要完全关闭。另一个例子是 <li>(列表项)元素。在 HTML 中,可以写成:

<li>The first item in my list.
<li>The second item in my list.

<li>The first item in my list. </li>
<li>The second item in my list. </li>

在 XHTML 1.0 中,只允许后一种方法。

在 XML 中,用斜杠终止空元素。因此,<br> 变成 <br/>。由于某些习惯于解释 HTML 的浏览器在使用该方法时有问题,所以,引入了替代方法,即在斜杠之前添加一个空格:<br />

这是一个图像元素的 XHTML 示例,它是空元素:

<img src="my.gif" height="55px" width="25px" border="0" alt="picture of me" />

其它要注意的空元素是 metalink

引号
HTML 中的引号是任意的,即,可以在属性值前后使用引号,也可以不使用,并且不会导致太多麻烦。没有规则说:不用引号将值括起为非法。下例在 HTML 中完全可接受:

<table border=0 width="90%" cellpadding=10 cellspacing="10">

尽管有些属性值用引号括起,有些没有,但浏览器将正确显示该标记。但是,如果要遵循 XHTML 1.0,则必须将所有属性值用引号括起。

<table border="0" width="90px" cellpadding="10px" cellspacing="10">

如您可见,这些更改都不大。还有点儿烦,是的,但是,一旦开始使用这种方法,将会发现,这种标记要方便得多。一致性是使 XHTML 1.0 如此吸引人的原因之一 -- 它提供了构建未来结构的坚实基础。

XHTML 的未来
既然 XHTML 如此易用,为什么这么长时间才被采用呢?这是很多关心标准的人在问的问题。该问题的部分原因可能是宣传得不够 -- 没有太多人了解 XHTML 1.0。甚至即使听说过,也可能没意识到:现在使用它有多简单。

另一个原因是:目前用于 HTML 开发的软件工具(如 Adobe GoLive、Macromedia Dreamweaver、Microsoft FrontPage 等)不支持 XTHML,很多喜爱这些工具或必须在工作中使用这些工具的 Web 作者对此感到担心。

但是,尽管有这些困难,XHTML 1.0 正在前进。事实上,下一版本,XHTML 1.1,已经相当完善,并包含 Web 标记作者某些新的、不同的概念。模块化(将语言分成彼此独立的模块)是 XHTML 1.1 的主要部分。而且,更多类似于 XML 的优势在发挥作用。例如,为 XHTML 文档编写自己的 DTD 或者使用模式 (schema) 的能力将带来真正的可扩展性。

XHTML 1.0 是当今的 Web 标记标准。如果还没使用它,至少应该好好尝试一下。在与 XML 相关的技术领域发生的进展(特别是无线领域)强有力而令人信服地表明:标记语言的作者越灵活,其前景就越被看好。XHTML 1.0 是开阔您眼界的极佳方法。够熟悉,就有意义;够强大,可以帮助您创建适用于今天、更为明天激动人心的机遇作好准备的稳定、可互操作的 Web 站点。

参考资料

关于作者
作为作家、讲师和设计人员,Molly E. Holzschlag 将其观点和热情带入书籍、杂志和 Web 站点。被 Webgrrls 评为 Web 上最有影响的 25 位女性之一,Molly 在联机世界已工作 10 年之久。她写了 15 本关于 HTML 和 Web 设计与开发主题方面的书籍,包括即将出版的 Que 的 Special Edition Using XHTML 1.0、最畅销的 Special Edition Using HTML 4.0 和得到国际上普遍赞誉的 Web by Design。她的流行栏目,Integrated Design,每月出现在 WebTechniques 杂志。她还是 Web Review 的执行编辑,也是 Adobe Magazine、Builder.Com、DesignShops.com、Digital Chicago、Digital New York、IBM developerWorks、MacWorld、MSDN、PlanetIT 的作家,还是其它开发人员资源的成员之一。可以造访她的 Web 站点
http://www.molly.com/