XHTML的组成

1. XML声明
由于XHTML是以XML文件规则为基础的HTML,所以文件内容的开头必须加入XML声明:

<?xml version="1.0" encoding="gb2312"?>
其中version="1.0"指明XML的版本,encoding="gb2312"指明文档的编码。
W3C强烈建议XHTML使用XML声明,尤其当文件编码类型不是默认的UTF-8或UTF-16时。例如,当文件编码是简体中文时可以指定编码为gb2312。此外,还要注意指定内容的大小写,依照XML的规则,大些与小写字母是被视为不同的文字。

有一些较旧的浏览器对XML声明会有兼容性的问题,最快的方式就是在文件中同时加入XML声明与meta标签,以保证各种浏览器都能正确显示。

Windows下的IE(6.0及以前的版本)不能识别XHTML的XML声明,只要在DTD之前出现任何文本,它就会回到怪异模式。XHTML文档包含一条XML声明无疑是绝对正确的,但却会导致一大批网站访问者看到的网页是以过时的模式显示的。在你努力使用CSS实现具有跨浏览器的页面表现时,这真的很恼人。因此,建议不要添加XML声明,尽管某些XML纯粹主义者可能感到不爽。

2. 文档类型声明。
在XML声明后,接着加入DTD声明,W3C也为XHTML提供了3种声明:

Transitional DTD

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
要求非常宽松的DTD,允许继续使用HTML4.0的标签,淡仍要符合XML的编写要求。

Frameset DTD

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
针对框架页面的DTD,如果页面中包含框架,则可采用这种声明。

Strict DTD

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
要求严格的DTD,不能含有任何表现层的标签,例如br,甚至还去除了某些元素的属性,例如h1元素的align属性。

HTML标签属性
在HTML中<HTML>标签可以不带任何属性,但在XHTML中,<HTML>标签则需要加上属性设置。

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

xmlns(XML namespace,XML名称空间属性),由于XML允许用户自定义标签,用户自定义的标签有可能与他人定义的相同,但代表的意义与目的不同,XML名称空间属性设置的目的就是为了确保一个DTD使用的名称不与其他用户自定义的标签或者其他DTD中定义的标签相冲突,以避免文件交换或共享时产生错误。因为XHTML1.0不允许用户自定义标签,所以xmlns属性值是固定的(见http://www.w3.org/1999/XHTML)。

在XHTML中要使用指定文件内容所使用的语言,则必须使用XML的xml:lang属性。为了与既有的HTML兼容可以再加入lang属性。

综上所属的XML声明、文档类型声明与HTML标签,一个基础的XHTML文件结构如下:

<?xml version="1.0" encoding="gb2312"?> <!-- XML声明 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!-- 文档类型声明 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <!-- HTML标签属性 -->
<head>

</head>
<body>

</body>
</html>

代码中绿色标记标出了XHTML文档的结构。

参阅:
什么是HTML

W3C的XHTML与HTML常见问题http://www.w3.org/MarkUp/2004/xhtml-faq
在W3C(www.w3.org)网站上校验XHTML的正确性http://validator.w3.org/
W3C XHTML1.0首页
W3C XHTML2.0首页