请参考本文档的 勘误表 , 其中可能包含一些规范性的更正。 请浏览 本文档的翻译。
此文档也提供了这些非标准格式的版本: Multi-part XHTML file, PostScript version, PDF version, ZIP archive, and Gzip'd TAR archive.
版权所有 ©2002 W3C® (MIT, INRIA, Keio), 保留所有权利。 W3C 责任, 商标, 文档使用 和 软件授权 的相关规则。
XHTML 1.0是作为 XML 1.0应用而重新制定的HTML 4。本规范定义 XHTML 1.0第二版以及其中与HTML 4对应的3种文档类型定义(DTDs)。每个元素的语义和它们的属性已经在W3C Recommendation for HTML 4中定义,它们是将来XHTML扩展的基础。只要遵循一套简单的指导方针,XHTML文档就能和现存的HTML用户代理程序兼容。
本节描述本文档发布时的状况。其它的文档也许会取代本文档。W3C负责维护本文档系列的最新状况。
本文档是XHTML 1.0规范的第二版,整合了截至2002年8月1日的勘误表。 此版本和上一版本的区别在 差异标注版 中进行了标注。
XHTML 1.0第二版不是一个新版本(第一版发布于2000年1月26日)。 此文档的修订来自公众提出的修改意见和一直在进行的HTML工作组。 此版本没有实质性的改变——只是整合了各个勘误表。
此规范中已发现的错误,请参考: http://www.w3.org/2002/08/REC-xhtml1-20020801-errata。
如果发现本文档中的错误,请发送到 www-html-editor@w3.org (archive)。 关于HTML功能的公共讨论的邮件列表: www-html@w3.org (archive).
本文档作为 W3C HTML Activity 的一部分发布。HTML工作组 (members only) 的目标在 HTML Working Group charter中进行讨论。
在发布时,工作组认为没有任何专利与本规范有关。在工作组的 专利披露页面 中也许可以找到目前与本规范有关的专利。
目前 W3C 的推荐标准和其他技术文件,请参阅此页面: http://www.w3.org/TR。
lang
和xml:lang
属性本节是知识介绍。
XHTML是一系列当前和将来的文档类型和模块,它由HTML 4 [HTML4]再生和扩展而来,HTML 4是其子集。XHTML系列文档基于XML,最终被设计用来与基于XML的用户代理一起工作。XHTML系列的详情及其发展过程在[XHTMLMOD]一节中详述。
XHTML 1.0(本规范)是XHTML系列的第一个文档。它是将3种HTML 4文档类型应用到XML 1.0 [XML]之后重新形成的。其目的是,作为一种语言,它的内容既符合XML,并且如果依照一些简单的指导方针,也能被HTML 4用户代理识别。开发者将它们的文档移植成为XHTML 1.0,会得到以下好处:
XHTML系列是Internet发展的下一步。现在迁移到XHTML,开发者在确保他们的文档向前向后兼容的同时,还能享有XML带来的好处。
HTML 4 [HTML4]是SGML (标准通用标记语言)的一个应用,遵守国际标准ISO 8879,被广泛的当作World Wide Web上的标准出版语言。
SGML是一种描述标记语言,特别是用于电子文档交换,文档管理和文档发布。HTML是SGML定义的语言的一个实例。
SGML出现在20世纪80年代中期,一直保持稳定。稳定是因为它有丰富的特征和具有灵活性。但是,灵活性带来一定程度的复杂性,限制了它在多种环境下的适应性,包括World Wide Web。
HTML最初的构想是作为一种交换科学和其它技术文档的一种语言,供那些不熟悉书写文档的专家使用。HTML规定一小套结构语义标签,适于书写相对简单的文档,从而解决了SGML复杂性的问题。除了简化文档结构外,HTML还加入了对超文本的支持,后来还增加了媒体功能。
在非常短的时间内,HTML流行起来,并且迅速超过了它最初的目的。出现了很多新元素,被用在HTML(作为标准)内部,HTML也被改编以用于垂直的、高度专业化的市场。众多的新元素导致文档在跨平台时出现兼容问题。
XML™是Extensible Markup Language(可扩展标记语言)的缩写[XML]。
创造XML的目的是获得SGML的功能和灵活性,而去除其大部分复杂的内容。尽管是SGML衍生的一种受限制的格式,但是XML仍保留了SGML的大部分功能和丰富性,还保留了SGML的所有常用特性。
在保留这些有用的特性的同时,XML去掉了SMGL中很多更复杂的特性,这些特性使得书写文档和设计合适的软件既困难又昂贵。
上文已经叙述来了移植到XHTML的好处。一般来说,移植到XHTML的好处有:
本节是标准化的。
本规范要用到下面的词条。这些词条基于ISO/IEC 9945-1:1990 [POSIX.1]中类似的定义,并扩展定义在[RFC2119]中:
本节是标准化的。
本版本的XHTML定义了严格遵循XHTML的文档,必须使用XML和XHTML 1.0命名空间中的元素和属性。XHTML结合其他命名空间使用,如RDF表达的元数据,请参阅3.1.2节。
一个严格规范的XHTML文档是符合本规范描述的强制性功能的XML文档。必须符合以下所有条件:
文档的根元素必须是html
。
文档的根元素必须用xmlns
属性指定XHTML的命名空间[XMLNS]。XHTML的命名空间在http://www.w3.org/1999/xhtml
中定义。根元素示例如下:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN">
在根元素之前,必须有一个DOCTYPE声明。DOCTYPE声明中包含的公共标识符必须是DTDs中的3种DTD之一,每种DTD有各自的正式公共标识符。系统标识符可以修改以表明本地系统。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
DTD的子集不能覆盖DTD中的任何参数实体。
XML声明不是所有XML文档的必须部分;但是强烈建议XHTML文档作者在所有文档中使用XML声明。当字符编码不是默认的UTF-8或UTF-16时,这样的声明是必须的。这是一个包含了XML声明的XHTML示例:
<?xml version="1.0" encoding="UTF-8"?> <!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="zh-CN" lang="zh-CN"> <head> <title>Virtual Library</title> </head> <body> <p>Moved to <a href="http://example.org/">example.org</a>.</p> </body> </html>
在XHTML命名空间中可以使用其它XML命名空间[XMLNS],尽管这样文档不能严格遵循XHTML。W3C以后将解决多命名空间的问题。例如,请参阅[XHTML+MathML]。
下面的例子演示XHTML 1.0如何联合MathML推荐标准使用:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>A Math Example</title> </head> <body> <p>The following is MathML markup:</p> <math xmlns="http://www.w3.org/1998/Math/MathML"> <apply> <log/> <logbase> <cn> 3 </cn> </logbase> <ci> x </ci> </apply> </math> </body> </html>
下面的例子演示XHTML 1.0如何联合其它XML命名空间使用:
<?xml version="1.0" encoding="UTF-8"?> <!-- initially, the default namespace is "books" --> <book xmlns='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6' xml:lang="en" lang="en"> <title>Cheaper by the Dozen</title> <isbn:number>1568491379</isbn:number> <notes> <!-- make HTML the default namespace for a hypertext commentary --> <p xmlns='http://www.w3.org/1999/xhtml'> This is also available <a href="http://www.w3.org/">online</a>. </p> </notes> </book>
一个符合规范的用户代理必须满足以下所有条件:
ID
类型的属性(如多数XHTML元素的id
属性)识别成片段标识符。空白的处理按照以下规则。以下字符是[XML]定义的空白字符:
XML处理程序将不同系统的行结束符规格化为单个换行符(LINE FEED)传递给应用程序。
用户代理必须使用CSS的定义进行空白字符的处理[CSS2]. 注意:CSS2推荐标准没有明确解决非拉丁字符集(non-Latin)中的空白字符处理问题。在将来版本的CSS中将解决此问题,此处的引用将被更新。
请注意,一个标准的XHTML文件,必须符合上述规则,并且必须同时符合[XMLC14N]规则。
本节是知识介绍。
由于XHTML是XML的一个应用,一些在基于SGML的HTML 4 [HTML4]中完全合法的格式在XHTML中必须改变。
格式良好性(Well-formedness)是[XML]引入的一个新概念。从本质上说,这意味着元素必须有结束标签,或者以特殊方式书写(在下文说明),并且所有元素必须正确。
尽管SGML规定层叠非法,但现有的浏览器普遍允许层叠。 Although overlapping is illegal in SGML, it is widely tolerated in existing browsers.
正确:嵌套元素。
<p>here is an emphasized <em>paragraph</em>.</p>
错误:层叠元素
<p>here is an emphasized <em>paragraph.</p></em>
XHTML文档中的所有HTML元素和属性名必须使用小写。因为XML是大小写敏感的,所以必须遵守这个区别,如<li> 和 <LI> 是不同的标签。
在基于SGML的HTML 4中,一些隐含结束意义的元素允许省略结束标签。XNL不允许省略结束标签。除了在DTD中被定义为空(EMPTY
)的元素,所有元素必须有结束标签。在DTD中被定义为空(EMPTY
)的元素可以使用结束标签或使用空元素快速标签(参考 空元素)。
正确:结束了的元素
<p>一段话。</p><p>又一段话。</p>
错误:未结束的元素
<p>一段话。<p>又一段话。
所有的属性值必须用引号,即使是数字。
正确:在引号中的属性值
<td rowspan="3">
错误:不在引号中的属性值
<td rowspan=3>
XML不支持属性最小化。属性值对必须完整。像compact
和checked
这样的属性名不能不指定属性值而在元素中出现。
正确:没有最小化的属性
<dl compact="compact">
错误:最小化的属性
<dl compact>
空元素要么必须有结束标签,要么起始标签以/>
结束。例如,<br/>
或<hr></hr>
。请参阅HTML兼容性指导方针中的信息,以保证向后兼容HTML 4用户代理。
正确:结束的空元素
<br/><hr/>
错误:未结束的空标签
<br><hr>
在XHTML中,script和style元素声明为#PCDATA
内容。因此,<
和&
被看作是标记的开始,<
和&
这样的实体被XML处理程序看作为实体引用而分别被认为是<
和&
。将script和style元素的内容包含在CDATA
记号中避免了这些实体的扩张。
<script type="text/javascript"> <![CDATA[ ... unescaped script content ... ]]> </script>
CDATA部分被XML处理程序识别为文档对象模型中一个结点。请参阅1.3节 of DOM Level 1推荐标准[DOM]。
替代的方式是使用外部script和style文档。
SGML规定DTD的作者可以在一个元素内部排除特定的元素。这样的禁止(成为“排除”)在XML中是不可能的。
例如,严格版的 HTML 4 DTD 禁止任何深度的‘a
’元素对另一‘a
’元素的嵌套。在XML中无法写出这样的禁止。虽然这些禁止不能在DTD中定义,但是一些元素不应该被嵌套。标准化的元素的禁止用法中是这些元素和不能被这些元素包含的元素的汇总。
HTML 4定义了name
属性的元素有a
、applet
、form
、frame
、iframe
、img
和map
。HTML 4还引入了id
属性。这两个属性都是被设计作为片段标识符。
在XML中,片段标识符是ID
类型,并且每个元素只能有一个ID
类型的属性。因此,在XHTML 1.0中,id
属性被定义为ID
类型。为保证XHTML 1.0文档是结构良好的XML文档,对上述元素定义一个片段标识符时,XHTML文档必须使用id
属性。请参考HTML兼容性指导方针的信息,确保XHTML文档以text/html
媒体类型使用时,这些“锚”能向后兼容。
注意,在XHTML 1.0中,不赞成使用name
属性,在以后的XHTML版本中将被删除。
HTML 4和XHTML都有一些属性具有预定义值并且只可以使用有限的属性值(比如input
元素的type
属性)。在SGML和XML中,这种属性称为枚举属性。在HTML 4中,这些值是不区分大小写的,所以值TEXT
与值text
是相同的。在XML中,这些值是区分大小写的,并且在XHTML 1中所有这些值都定义为小写。
SGML和XML都允许使用十六进制值作为引用字符。在SGML中,这些引用可以使用&#Xnn;或&#xnn;。在XML中,必须使用小写形式(如&#xnn;)。
本节是标准化的。
虽然没有要求XHTML 1.0必须兼容现有的用户代理,但是实际上很容易就可以实现。创建兼容文档的指导方针请参考附录 C。
遵守附录 C中的指导方针的XHTML文档,按照“HTML兼容性指导方针”可以声明因特网媒体类型为“text/html”,用以兼容大部分HTML浏览器。这些文档和其他遵守规范的文档同样可以声明因特网媒体类型为“application/xhtml+xml”,此类型在[RFC3236]中进行了定义。如需关于XHTML使用媒体类型的更多的资料,请参考此节:[XHTMLMIME]。
本附录是标准化的。
这些DTD和实体构成了本规范的一个标准化的部分。本规范的完全DTD文件集以及XML声明和SGML开放目录包含在这个zip文件和这个gzip'd tar文件中。如果用户要使用DTD的本地拷贝,需要下载那些文件而不是使用下面的特定的DTD引用。
这些DTD与HTML 4的DTD类似。验证内容时,W3C推荐使用权威版本的DTD进行系统标识符定义。当DTD模块化之后,构件DTD使用的方法也许更能和HTML 4相对应。如果你要本地使用DTD,你需要下载这个版本中的一个。为了全面性,规范化的DTD版本如下:
此文件DTD/xhtml1-strict.dtd是本规范的一个标准化部分。此文件的包含注释的版本:separate section。
此文件DTD/xhtml1-transitional.dtd是本规范的一个标准化部分。此文件的包含注释的版本:separate section。
此文件DTD/xhtml1-frameset.dtd是本规范的一个标准化部分。此文件的包含注释的版本:separate section。
XHTML的实体集和HTML 4的相同,但是被修改成有效的XML 1.0实体声明。注意欧洲货币符号的实体(€
、€
或€
)是在特殊字符部分定义的。
此文件DTD/xhtml-lat1.ent是本规范的一个标准化部分。此文件的包含注释的版本:separate section。
此文件DTD/xhtml-lat1.ent是本规范的一个标准化部分。此文件的包含注释的版本:separate section。
此文件DTD/xhtml-symbol.ent是本规范的一个标准化部分。此文件的包含注释的版本:separate section。
本附录是标准化的。
下列元素禁止包含有些元素(参考 SGML的排除用法)。 这些禁止应用于所有深度的嵌套,即保括所有子元素。
a
a
元素。pre
img
、object
、big
、small
、sub
和sup
元素。button
input
、select
、textarea
、label
、button
、form
、fieldset
、iframe
和isindex
元素。label
label
元素。form
form
元素。本附录是知识介绍。
本附录为希望XHTML文档兼容现存的HTML浏览器的XHTML作者总结设计指导方针注意,此建议不定义符合HTML规范的用户代理如何处理HTML文档。也不定义因特网媒体类型text/html
的含义。对于这些定义,请分别浏览[HTML4]和[RFC2854]。
一些用户代理程序会显示处理说明。但是,注意当文档中没有XML声明时,文档只能用缺省的字符编码UTF-8 或 UTF-16。 必须认识到,处理说明呈现在一些用户代理上。并且,一些用户代理解释XML声明表示此文档是无法识别的XML而不是HTML,因此可能无法按照预期呈现出文档。为了兼容这些历史遗留的浏览器,你可能想避免使用处理说明和XML声明。但是要注意,当文档中没有XML声明时,改文件只能使用默认的字符编码UTF-8或UTF-16。
在空元素结尾的/
和>
前加一个空格,如<br />
、<hr />
和 <img src="karen.jpg" alt="Karen" />
。还有,使用最小化的标签语法,如<br />
,因为另一种XML允许的语法<br></br>
在很多现存的用户代理中会导致不可靠的结果。
内容模型不是EMPTY
的元素,在为空的场合(如空title或空段落),不要用最小化形式(如,用<p> </p>
,不用<p />
)。
如果你的样式表使用<
或&
或]]>
或--
,请用外部样式表。如果你的脚本使用<
或&
或]]>
或--
,请用外部脚本。注意XML解析器会在不告知的情况下除去注释的内容。因此,以前用注释的方法“隐藏”脚本和样式表的习惯使文档可以向后兼容,但是可能在基于XML的用户代理上不能按预期工作。
在属性值中避免使用换行和多个空白字符。用户代理在处理这些情况时不一致。
在文档的head
部分不要使用超过一个isindex
元素。不赞成使用isindex
元素,赞成使用input
元素。
lang
和xml:lang
属性当指定元素的语言时,同时使用lang
和xml:lang
属性。xml:lang
的属性值优先被采用。
在 XML中,以"#foo"
形式结束片段标识符的URI引用[RFC2396]不是指元素有一个属性name="foo"
;而是指元素有一个被定义为ID
类型的属性,如,HTML 4中的id
属性。很多HTML客户程序不支持ID
类型属性的这种用法,所以,可以将相同的值同时附给这两个属性,以保证最大程度的向后和向前兼容。(如<a id="foo" name="foo">...</a>
)。
此外,因为ID
类型属性的合法值集比CDATA
类型属性的值集小得多,name
属性被改为NMTOKEN
。这个属性被限制为只有和ID类型或XML 1.0 2.3节第5部分中的Name
同样的值。不幸的是,XHTML 1.0的DTD不能表示出这个限制。因为这个改变,在转换现有的HTML文档时要加以注意。如果在转换时值可能会改变,这些属性的值在文档中必须是唯一的,有效的,并且任何对这些片段标识符的引用(不管是内部还是外部)必须更新。
注意,在XML 1.0第2.3节第5部分收集的合法值远远大于HTML 4中定义的ID
和NAME
中允许使用的值。当定义能向后兼容的片段标识符时,只能使用匹配[A-Za-z][A-Za-z0-9:_.-]*
的字符。更多信息请参考:[HTML4]中的Section 6.2。
最后,注意XHTML 1.0不赞成在a
、applet
、form
、frame
、iframe
、img
、和map
元素中使用name
属性,在以后的XHTML版本中将移除。
过去,HTML文档的字符编码可以通过指定web服务器的HTTP Content-Type标头,或者通过文档内的meta
元素。而在XML文档中,字符编码通过指定XML声明(如,<?xml version="1.0" encoding="EUC-JP"?>
)。为了使用指定的字符编码发送当前文档,最好的方法是确保web服务器提供正确的标头。如果不能确保这点,一个文档如果想明确的设置字符编码必须包含XML的编码声明和meta
元素的http-equiv声明(如,<meta http-equiv="Content-type" content="text/html; charset=EUC-JP" />
)。在遵守XHTML的用户代理中,XML声明的编码声明优先采用。
注意:如果一个文档包含meta http-equiv声明,此文档总可以被HTTP服务器和/或用户代理作为声明中的因特网媒体类型解析。如果一个文档作为多媒体类型提供,此HTTP服务器必须设置文档的编码。
一些HTML用户代理不能解释布尔属性的完全(非最小化)形式,而这是XML 1.0必须的。注意这个问题不会影响用户代理对HTML 4的兼容。包括以下一些属性:compact
、nowrap
、ismap
、declare
、noshade
、checked
、disabled
、readonly
、multiple
、selected
、noresize
、defer
。
文档对象模型level 1推荐标准[DOM]定义了XML和HTML 4的文档对象模型的接口。 HTML 4文档对象模型规定HTML元素名和属性名以大写形式返回。XML文档对象模型规定元素名和属性名以它们被指定的形式返回。在XHTML 1.0中,元素和属性指定为小写形式。对这个显著的差别可以用两种方式处理:
text/html
因特网媒体类型提供的XHTML文档的用户代理可以使用HTML DOM,而且可以依赖这些接口返回的大写的元素名和属性名。text/xml
、application/xml
或application/xhtml+xml
因特网媒体类型提供的XHTML文档的用户代理也可以使用XML DOM。元素名和属性将以小写形式返回。并且,一些XHTML元素可以也可以不出现在对象树中,因为在内容模型中它们是可选的(如table
中的tbody
元素)。 在HTML 4中,一些元素可以允许被最小化以至于它们的开始标签和结束标签都被忽略(SGML的特性),所以会发生这种情况。但是在XML中不行。XHTML使元素成为可选的,而不是要由文档作者来插入外来元素。相应地,用户代理需要适应这一点。关于此主题的更多信息,请参考:[DOM2]在SGML和XML中,连接符(“&”)声明一个转义字符的开始(如,使用®表示注册商标“®”)。不幸的是,许多HTML用户代理已悄悄地忽略掉HTML中的不正确的连接符——不作为转义字符。基于XML的用户代理不会容忍这种错误的用法,并且任何错误地使用连接符的文档被识别为“无效”,而且当然不符合本规范。为了确保文档兼容历史遗留的HTML用户代理和基于XML的用户代理,文档中使用的连接符如果希望被作为普通的字符呈现,必须使用转义字符(如,“&
”)。例如,当一个a
元素的href
属性指向一个接收参数的 CGI脚本时,它必须使用http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user
,而不是http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user
。
层叠样式表level 2推荐标准[CSS2]定义了样式,用于解析HTML和XML文档的树形结构。解析时的不通将导致不同的视觉或听觉效果,这取决于使用的选择器。下面的技术可以减少对文档的这种影响,不用修改就可以用各自的媒体类型提供:
在HTML 4和XHTML中,style
元素可以用来定义文档内部的样式规则。在XML中,使用XML样式声明定义样式规则。为了兼容此习惯,style
元素应具有id
属性片段标识符,并且XML样式声明应引用此标识符。如:
<?xml-stylesheet href="http://www.w3.org/StyleSheets/TR/W3C-REC.css" type="text/css"?> <?xml-stylesheet href="#internalStyle" type="text/css"?> <!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" lang="en"> <head> <title>An internal stylesheet example</title> <style type="text/css" id="internalStyle"> code { color: green; font-family: monospace; font-weight: bold; } </style> </head> <body> <p> This is text that uses our <code>internal stylesheet</code>. </p> </body> </html>
有些字符在HTML文档中是合法的,但是在XML文档中是非法的。例如,在HTML中,进纸符(U+000C)被处理成一个空白字符,而在XHTML中,按照XML的字符定义,它是非法的。
命名字符'
(撇号,U+0027)在XML 1.0中进行了引进,但是在HTML中没有出现。因此作者应使用'
替代'
,以兼容HTML 4用户代理。
本节是知识介绍。
本规范由W3C HTML工作组成员参与编写。
在第二版发布时,全体成员如下:
在第一版发布时,全体成员如下:
本节是知识介绍。