购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.5 XHTML基础

XHTML语言是在HTML语言基础上发展而来的,但是为了兼容数以万计的现存网页和不同浏览器,XHTML文档与HTML文档没有太大区别,只是添加了XML语言的基本规范和要求。

2.5.1 XHTML文档基本结构

完整的XHTML文档结构如下:

XHTML代码不排斥HTML规则,在结构上也基本相似,但如果仔细比较,它有两点不同。

1.定义文档类型

在XHTML文档第一行新增了<!DOCTYPE>元素,该元素用来定义文档类型。DOCTYPE是document type(文档类型)的简写,它设置XHTML文档的版本。使用时应注意该元素的名称和属性必须大写。

DTD(如xhtml1-transitional.dtd)表示文档类型定义,里面包含了文档的规则,网页浏览器会根据预定义的DTD来解析页面元素,并把这些元素所组织的页面显示出来。要建立符合网页标准的文档,DOCTYPE声明是必不可少的关键组成部分,除非你的XHTML确定了一个正确的DOCTYPE,否则页面内的元素和CSS不能正确生效。

2.声明命名空间

在XHTML文档根元素中必须使用xmlns属性声明文档的命名空间。xmlns是XHTML NameSpace的缩写,中文翻译为命名空间(也有人翻译为名字空间、名称空间)。命名空间是收集元素类型和属性名字的一个详细DTD,它允许通过一个URL地址指向来识别命名空间。

XHTML是HTML向XML过渡的标识语言,它需要符合XML规则,因此也需要定义名字空间。又因为XHTML 1.0还不允许用户自定义元素,因此它的命名空间都相同,就是“http://www.w3.org/1999/xhtml”。这也是为什么你发现每个XHTML文档的xmlns值都相同的缘故。

2.5.2 XHTML基本语法

XHTML是根据XML语法简化而来的,因此它遵循XML文档规范。同时XHTML又大量继承HTML语言语法规范,因此与HTML语言非常相似,不过它对代码的要求更加严谨。遵循这些要求,对于培养良好的XHTML代码书写习惯是非常重要的。

在文档的开头必须定义文档类型。

在根元素中应声明命名空间,即设置xmlns属性。

所有标签都必须是闭合的。在HTML中,你可能习惯书写独立的标签,如<p>、<li>,而不爱写对应的</p>和</li>来关闭它们。但在XHTML中这是不合法的。XHTML要求有严谨的结构,所有标签都必须关闭。如果是单独不成对的标签,应在标签的最后加一个"/"来关闭它,如<br/>。

所有元素和属性都必须小写。这与HTML不同,XHTML对大小写是敏感的,<title>和<TITLE>表示不同的标签。

所有的属性必须用引号""括起来。在HTML中,你可以不需要给属性值加引号,但是在XHTML中,它们必须被加引号,如<table height="80"></table>。特殊情况下,可以在属性值里使用双引号或单引号。

所有标签都必须合理嵌套。这是因为XHTML要求有严谨的结构,因此所有的嵌套都必须按顺序。

所有属性都必须被赋值,没有值的属性就用自身来赋值。例如:

错误写法:

    <td nowrap>

正确写法:

    <td nowrap="nowrap">

所有特殊符号都用编码表示,例如,小于号(<)不是元素的一部分,必须被编码为“<”;大于号(>)不是元素的一部分,必须被编码为“>”。

不要在注释内容中使用“--”。“--”只能出现在XHTML注释的开头和结束,也就是说,在内容中它们不再有效。例如:

错误写法:

    <!--注释----------注释-->

正确写法:

    <!--注释—————注释-->

XHTML规范废除了name属性,而使用id属性作为统一的名称。在IE 4.0及以下版本中应保留name属性,使用时可以同时使用id和name属性。

上面列举的几点是XHTML最基本的语法要求,习惯于HTML的读者,应克服代码书写中的随意,相信好的习惯会影响你的一生。

2.5.3 XHTML文档类型

XHTML 1.0支持3种DTD(文档类型定义)声明:过渡型(Transitional)、严格型(Strict)和框架型(Frameset)。

1.过渡型

这种文档类型对于标签和属性的语法要求不是很严格,允许在页面中使用HTML 4.01的标签(符合XHTML语法标准)。过渡型DTD语句如下:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w1.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

2.严格型

这类文档类型对于文档内的代码要求比较严格,不允许使用任何表现层的标签和属性。严格型DTD语句如下:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w1.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

在严格型文档类型中,以下元素将不被支持。

center:居中(属于表现层)。

font:字体样式,如大小、颜色和样式(属于表现层)。

strike:删除线(属于表现层)。

s:删除线(属于表现层)。

u:文本下划线(属于表现层)。

iframe:嵌入式框架窗口(专用于框架文档类型或过渡型文档)。

isindex:提示用户输入单行文本(与input元素语义重复)。

dir:定义目录列表(与dl元素语义重复)。

menu:定义菜单列表(与ul元素语义重复)。

basefont:定义文档默认字体属性(属于表现层)。

applet:定义插件(与object元素语义重复)。

在严格型文档类型中,以下属性将不被支持。

align(支持table包含的相关元素:tr、td、th、col、colgroup、thead、tbody、tfoot)。

language。

background。

bgcolor。

border(table元素支持)。

height(img和object元素支持)。

hspace。

name(在HTML 4.01 Strict中支持,在XHTML 1.0 Strict中的form和img元素不支持)。

noshade。

nowrap。

target。

text、link、vlink和alink。

vspace。

width(img、object、table、col和colgroup元素支持)。

3.框架型

这是一种专门针对框架页面所使用的DTD,当页面中含有框架元素时,就应该采用这种DTD。框架型DTD语句如下:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w1.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

使用严格的DTD来制作页面,当然是最理想的方式,但是,对于没有深入了解Web标准的网页设计者来说,比较适合使用过渡型DTD。因为过渡型DTD还允许使用表现层元素和属性,比较适合大多数网页制作人员使用。

对于大多数标准网页设计师来说,过渡型DTD(XHTML 1.0 Transitional)是比较理想的选择。因为这种DTD允许使用描述性的元素和属性,也比较容易通过W3C的代码校验。

2.5.4 DTD文档类型解析

在XHTML文档中,DOCTYPE是一个必要元素,它决定了网页文档的显示规则。DOCTYPE是Document Type的简写,中文翻译为文档类型。在网页中通过在首行代码中定义文档类型,用来指定页面所使用的HTML的版本类型。在构建符合标注的网页中,只有确定正确的DOCTYPE(文档类型),HTML文档的结构和样式才能被正常解析和呈现。

实际上,DTD是一套关于标签的语法规则。DTD文件是一个ASCII的文本文件,后缀名为.dtd。利用DOCTYPE声明中的URL可以访问指定类型的DTD详细信息。例如,对于XHTML 1.0过渡型DTD的URL为http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd,在Dreamweaver中打开XHTML 1.0过渡型DTD文档,代码显示如图2.4所示。

图2.4 XHTML 1.0过渡型DTD文档

一个DTD文档包含元素的定义规则,元素间关系的定义规则,元素可使用的属性、实体或符号规则。这些规则用于标签Web文档的内容。此外还包括了一些其他规则,它们规定了哪些标签能出现在其他标签中。文档类型不同,它们对应的DTD也不相同。

如果页面中没有显示声明DOCTYPE,则不同浏览器就会自动采用各自默认的DOCTYPE规则来解析文档中的各种标签和CSS样式码。因此,从浏览器兼容性来考虑,声明DOCTYPE是必需的。DOCTYPE声明必须放在(X)HTML文档的顶部,在文档类型声明语句的上面不能够包含任何HTML代码,也不能包括HTML注释标签。DOCTYPE声明语句的说明如图2.5所示。

图2.5 DOCTYPE结构图

DOCTYPE声明中各个部分说明如下。

顶级元素:指定DTD中声明的顶级元素类型,这与声明的SGML文档类型相对应。HTML文档默认顶级元素为html。

可用性:指定正式公开标识符(FPI)是可公开访问的对象(PUBLIC)还是系统资源(SYSTEM)。默认为PUBLIC,SYSTEM系统资源包括本地文件或URL。

注册:指定组织是否由国际标准化组织(ISO)注册。“+”(默认)表示组织名称已注册,“-”表示组织名称未注册。W3C是属于非注册的ISO组织,所以显示为“-”符号。

组织:指定在!DOCTYPE声明引用的DTD(文档类型定义)的创建和维护的团体或组织的名称。HTML语言规范的创建和维护组织为W3C。

类型:指定公开文本的类,即所引用的对象类型。HTML默认为DTD。

标签:指定公开文本的描述,即对所引用的公开文本的唯一描述性名称,后面可附带版本号。HTML默认为HTML,XHTML默认为XHTML,后面跟随的是语言版本号。

定义:指定文档类型定义,包含Frameset(框架集文档)、Strict(严格型文档)和Transitional(过渡型文档)。Strict(严格型文档)禁止使用W3C规范中指定将逐步淘汰的元素和属性,而Transitional(过渡型文档)可以包含除frameset元素以外的全部内容。

语言:指定公开文本的语言,即用于创建所引用对象的自然语言编码系统。该语言定义已编写为ISO 639语言代码(两个字母要大写),默认为EN(英语)。

URL:指定所引用对象的位置。

从上面的结果分析,可以看到DOCTYPE声明语句的写法是严格遵循一定的规则的,只有这样浏览器才能够调用对应文档类型的规则集来解释文档中的标签。所谓的文档类型规则集也就是W3C公开发布的一个文档类型定义(DTD)中包含的规则。

2.5.5 名字空间

在XHTML文档中,读者还需要注意另一个容易忽略的问题:给<html>标签定义名字空间。例如:

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

xmlns是html元素的一个特殊属性。这个xmlns属性是XHTML Name Space的缩写,中文翻译为名字空间,该属性声明了html顶级元素的名字空间。那么名字空间在文档中是必需的吗?它有什么作用呢?

在标准设计中,名字空间是必须设置的一个属性,用来定义该顶级元素以及其包含的各级子元素的唯一性。名字空间声明允许用户通过一个网址指向来识别文档内标签的唯一性。

由于XML语言允许用户自定义标签,这样就可能存在用户定义的标签与别人定义的标签名称发生冲突。虽然标签名称不同,但是标签所表示的语义可能相同。当这些文档在网上自由传播或者相互交换文件时,由于名称相同可能会发生语义冲突。为此需要为各自的文档指定其语义的限制空间,于是xmlns属性就派上了用场。

【示例】 为张三和李四两个人分别定义的文档。

文档的根元素都是document,同时文档中包含有很多相同的元素名。如果文档都在网上共享就会发生语义冲突。如果使用xmlns分别为它们定义一个名字空间,就不会发生冲突。例如:

在上面代码中,张三的文档名字空间为http://www.mysite.cn/zhangsan,而李四的名字空间为http://www.mysite.cn/lisi,虽然他们的文档存在相同的标签,但是借助顶级元素中定义的名字空间,相互之间就不会发生语义冲突。通俗地说,名字空间就是给文档做一个标签,标明该文档是属于哪个网站的。对于HTML文档来说,由于它的元素是固定的,不允许用户进行定义,所以指定的名字空间永远为“http://www.w1.org/1999/xhtml”。 IAQeSqXpiZ5v1Pc63cRaa9IvYYA2+G4AiPZRkrrQtb8CPwYgdUq7hXZoMi64zccT

点击中间区域
呼出菜单
上一章
目录
下一章
×