请对本文勘误,其中可能包含官方的修正。 也请参考对本文档的 翻译。
本文档也有非标准格式:Multi-part XHTML文件 ,PostScript 版本,PDF 版本,ZIP 存档和 Gzip'd TAR 存档。
©2002 W3C® (MIT, INRIA, Keio)版权所有。 W3C 责任义务,商标, 文档使用和软件许可 规则约束。
在第二版本的定义中,XHTML 1.0 基于XML 1.0 应用并重构了HTML 4,而且相应的重塑了三个DTD文档。W3C的HTML 4 中已经定义了XHTML的元素和属性的语义,在此支持下,XHTML未来将得到更多的扩展。所以,尽量兼容HTML 4 用户代理来提供XHTML规范方面的帮助。
此节描述发布时的文档状态,其他文档也可能代替本文档。本文档系列的最终状态由W3C支持维护。
本文档是截至2002年8月1日以来纠正了勘误变化的XHTML 第2版标准文档。本版本文档和前一版本的区别已被标记,请参考: 含有区别标志的版本。
第2版的XHTML 1.0 不一定是最新的(第1版在2000年1月26日出版),各种不同版本的区别和差异已经被HTML工作小组收集和整理,本文档综合了各种勘误,不会再出现更新。
本标准中一些显著的错误问题列在:http://www.w3.org/2002/08/REC-xhtml1-20020801-errata。
勘误本文档错误请邮: www-html-editor@w3.org (归档). HTML 4 特性的公众讨论请加入邮件列表: www-html@w3.org (归档)。
本文档已经成为 W3C HTML Activity 的一部分 . HTML 工作组 (仅会员) 的目标谈论在: HTML Working Group charter.
发布之时,工作组相信不会出现版权揭发,关于本规范现行的版权揭发请参考工作组的 版权揭发页面。
了解W3C标准和其他技术文档请参考:http://www.w3.org/TR。
lang 和 xml:lang 属性
This section is informative.
HTML 4 经过重写、规范和扩展,形成了具有现行和未来文档类型和模块的XHTML家族。XHTML家族文档的类型基于XML,并且它被开发的目的也最终是与基于XML的用户代理协同工作。谈论关于XHTML家族的详情和发展请参考[XHTMLMOD]。
XHTML 1.0(本规范)是XHTML家族中的第一个文档类型。它将3个HTML 4文档类型重写为基于XML 1.0 [XML]的应用 。它被确认是一种与XML和兼容HTML 4指南guidelines内容一致的语言。开发者实现到XHTML 1.0的移植,可以得到下受益:
XHTML将是互联网下一步的发展。XML的不断发展将使XHTML不断壮大,使迁移到XHTML平台的客户得到更多的受益,但值得注意的是:XHTML在向后兼容性方面仍然存在问题。
HTML 4 [HTML4]是与互联网标准 ISO 8879一致的SGML (标准通用标记语言) 的应用。
SGML是描述标记语言的语言,它特别被用在电子文档交换、文档管理和文档发布中。HTML是SGML语言定义的一个例子。
SGML自是19世纪80年代中期发展起来,至今它非常稳定。语言的稳定源自于它丰富的特性和灵活性。但这种灵活性的代价是复杂性,约束了它在多样环境中的适应力,包括万纬网。
HTML最初的构想是面向科学和技术文档的交换,对非文档专家非常适合,HTML通过指定一套结构和含有语义的标签来创建相关联的简单文档,这种办法解决了SGML复杂性的问题。除了指定文档结构,HTML随后又加入了超文本、多媒体等。
相当短的时间内,HTML广泛的流行起来并迅速成长而不局限于它的初衷。HTML发展一开始,很多支持HTML元素的(作为标准)就被创建,使HTML适应纵向、高专业性的市场。但HTML过多新元素导致文档在不同平台上不能协同的问题。
XML™是可扩展标记语言 [XML]的缩写。
XML设计之初是为了除去SGML复杂性,恢复SGML的灵活性。尽管受到SGML的约束,XML还是保持了SGML更多更丰富的特性,并保留了SGML普通的特性。
保留了SGML有利特性的同时,XML移除了SGML更多的综合性,SGML的综合性使适合软件的编写和设计变得更加困难和昂贵。
移植到XHTML 1.0 除了上述受益外,还有:
This section is normative.
本规范中使用下列术语,这些术语定义在[RFC2119],他们基于类似ISO/IEC 9945-1:1990 [POSIX.1]中的定义。
This section is normative.
本版本的HTML提供严格一致的XHTML 1.0文档定义,此定义通过 XML 和 XHTML 1.0的命名空间约束元素和属性,在XHTML中使用其他命名空间情参考 3.1.2,例如:通过XHTML文档在资源描述框架中
一份严格一致XHTML文档就是一份XML文档。本规范中,它强制定义了所需的元素和属性。这样的文档必须符合下面的标准:
文档的根元素必须是 html。
文档根元素必须为XHTML命名空间[XMLNS]包含一个xmlns声明。XHTML的命名空间定义必须是http://www.w3.org/1999/xhtml。下面是根元素命名例子:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
文档根元素之前必须有DOCTYPE声明。DOCTYPE声明内的公共标识符必须指向各自的3个官方公共标识符DTDs中的1个。系统标识符会变为反映本地系统的规则。
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"/DTD/xhtml1-strict.dtd">
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"/DTD/xhtml1-frameset.dtd">
在DTD中,DTD子集不能引用其他任何的参数实体。
所有XML文档不一定需要这种XML声明,但强烈建议所有XHTML文档应用这种声明。这种声明使用的情况还包括:当文档需要引用其他字符编码(非 默认编码如: UTF-8 或 UTF-16)时,和更高级别协议无法决定使用是否使用编码时。下面是XHTML文档的一个例子,XML声明被包含其中:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Virtual Library</title>
</head>
<body>
<p>Moved to <a href="http://example.org/">example.org</a>.</p>
</body>
</html>
按照[XMLNS],XHTML的命名空间可以其他的XML命名空间,尽管上节没有定义如此不严格一致的文档,但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]中的规则必须应用于文档中。
This section is informative.
因为XHTML是XML的应用,所以基于SGML的HTML 4 [HTML4]必须被改变。
[XML]介绍了格式完好这个新的概念。本质上,这就意味着所有的元素必须有他们结束标记或书写为特殊形式(下节中描述),并且所有的元素必须正确的镶套。
尽管在SGML中,元素重叠是非法的,但现行的浏览器却广泛的容忍行为。
正确: 元素镶套
<p>here is an emphasized <em>paragraph</em>.</p>
不正确: 元素重叠
<p>here is an emphasized <em>paragraph.</p></em>
HTML的元素和属性名称在XHTML文档中必须小写。这区别是因为XML大小写敏感。例如<li> 和 <LI>是不同的标记。
基于SGML的HTML 4允许某些元素忽略结束标记,即:下一个元素的开始意味着上一个元素已结束。XML不允许忽略结束标记。除了 在DTD中声明为 EMPTY的元素以外,所有元素必须有结束标记。DTD中声明为 EMPTY的元素也有他们的结束标记或者用空元素的缩写(参考空元素)。
正确:元素被终止
<p>here is a paragraph.</p><p>here is another paragraph.</p>
不正确:元素未被终止
<p>here is a paragraph.<p>here is another paragraph.
所有的属性值不管是否数字,他们必须被引号引用。
正确: 属性值被引用
<td rowspan="3">
不正确: 属性值未被引用
<td rowspan=3>
XML不支持属性最小化。成对属性值必须全写。诸如 compact,checked的属性名称如果不写出指定属性值,他们在元素中不会发生。
正确: 非最小化属性
<dl compact="compact">
不正确: 最小化的属性
<dl compact>
空元素必须有他们自身的结束标记或者必须以 />结尾标记的开始。例如,<br/> 或者 <hr></hr>。请参考HTML兼容性指南来确保其兼容HTML 4用户代理的向后兼容性。
正确: 终止的空元素
<br/><hr/>
不正确: 未终止的空元素
<br><hr>
当用户代理处理属性时,他们遵守 [XML]的Section 3.3.3
在XHTML中,script 和style元素的具有#PCDATA的属性内容。作为结果,< 和 &会被做为标记的开始,实体 <和 &会被XML处理器相应的理解为< 和&的实体参数。所以请用CDATA标记来包裹脚本内容和样式元素,从而避免出现脚本和样式表中的实体。
<script type="text/javascript"> <![CDATA[ ... unescaped script content ... ]]> </script>
XML处理器识别CDATA部分为文档对象模型的节点,请参考:DOM 级别1 规范[DOM] 1.3节 Section
1.3
这种选择用来引用外置的脚本和样式表文档。
SGML给予DTD一种权利,使文档中不能存在他没有宣告的元素。但这种禁止(排它性)在XML中不可能存在。
例如:HTML 4 严格的DTD禁止在 'a' 元素中镶套其他的'a' 元素。这样的禁止规范在XML中没有,即使这种禁止规范没有在DTD中定义,这种镶套行为也不应该发生。此类元素不能镶套其他元素的描述请参考元素禁止规范。
HTML 4为 a, applet, form, frame, iframe, img和 map元素定义了name属性。HTML 4 同样介绍了id属性,两种属性都被设计用来做为片断标识符。
在XML中,片段标识符是ID类型的一种,并且,一个元素只能具有一个 ID类型的属性。因此,id 属性被定义为ID的类型。为了确保XHTML 1.0是格式完好的XML文档,当在上列元素中定义片断标识符时,XHTML 1.0文档必须使用 id属性。当伺服XHTML文档text/html时,为请参考HTML兼容性指南来确保代码的向后兼容性。
注意:这些元素的name属性被正式的弃用,并且将在XHTML随后的版本中去除。
在HTML 4 和XHTML 中有一些属性具有预定的和有限的属性值(例如:input元素的type 属性)。在SGML和XML中被称之为列举属性。在HTML 4 中,这些值大小写不敏感,所以TEXT和text是同等的。在XML中,大小写敏感,在XHTML中,所有这些属性值被必须定义为小写。
SGML和XML中,允许使用十六进制数值参考,在SGML中这些参数形式可能为:&#Xnn; 或者 &#xnn;。在XML中必须用小写来表示实体参数,例如(&#xnn;)
This section is normative.
尽管不需要保持XHTML 1.0对现有浏览器的兼容,但从实践来讲,这也很容易实现。创建兼容性文档的指南情请参考附录 C。
因为XHTML文档兼容大多数HTML浏览器,所以他们遵循附录 C "HTML 兼容性指南"的原则,被网络媒体类型"text/html" [RFC2854]标注,与这个规范一致那些文档和其他文档也可能被标注[RFC3236]定义的网罗媒体类型 "application/xhtml+xml" 。更多有关在XHTML中使用媒体类型的资料,情参考 [XHTMLMIME]。
This appendix is normative.
本节DTDs和实体设置定义来自本规范的一部分。本规范中全套附带XML声明的DTD文件和SGML开放目录被囊括在zip文件和gzip'd tar 文件中。用户通过下载这些存档文件到本地来进行工作而不是引用下面的DTDs参考。
这些DTDs类似HTML 4的DTDs。当验证文档内容时,W3C推荐您使用这些定义了SYSTEM标识符DTDs权威的版本。如果你本地工作时需要这些 DTDs,你应该下载本版本存档文件中的一个。为了完整性,官方版本的DTDs罗列如下:
DTD/xhtml1-strict.dtd 文件是本规范的标准化部分,为了完整性,带注解内容文件情参考 独立章节 。
DTD/xhtml1-transitional.dtd文件是本规范的标准化部分,为了完整性,带注解内容文件情参考独立章节 。
DTD/xhtml1-frameset.dtd文件是本规范的标准化部分,为了完整性,带注解内容文件情参考独立章节。
XHTML 实体设置与 HTML 4相同,但已经被修改,使之能被XML 1.0 实体声明验证。注意,欧洲货币符号的实体
(€ 或 € 或 €) 也被定义为特殊字符的一部分。
DTD/xhtml-lat1.ent 文件是本规范的标准化部分,为了完整性,带注解内容文件情参考 独立章节 。
DTD/xhtml-special.ent文件是本规范的标准化部分,为了完整性,带注解内容文件情参考独立章节。
DTD/xhtml-symbol.ent文件是本规范的标准化部分,为了完整性,带注解内容文件情参考独立章节。
This appendix is normative.
下列元素能否镶套其他元素遵循元素禁止规范 (请参考: SGML Exclusions)。本规范应用于所有深层镶套的元素,也就是它包含所有的子孙元素。
a
a元素。
pre
img, object, big, small, sub, 或者 sup元素。
button
input, select, textarea, label, button, form, fieldset, iframe 或者 isindex元素。
label
label元素。
form
form元素。This appendix is informative.
此附录内容总结编写者如何设计出能在现行HTML用户代理中显示的XHTML文档。注意,本规范不定义HTML一致的用户代理如何处理HTML文档,也不定义text/html网络媒体类型的定义。更多的定义,请分别参考[HTML4]和 [RFC2854] 。
注意:处理指令在某些用户代理中被呈现,同样,某些用户代理认为XML声明是意味着文档不认知XML,因此文档的表现不是你所期望的。为了更好的兼 容这些老类型的浏览器,你也许可以避免使用处理指令和XML声明。记住,尽管文档中没有进行XML声明,但文档仍然可以使用默认的UTF-8 或者 UTF-16字符编码。
在空元素尾部 / 和 > 键入一个空格,例如:<br />, <hr /> 和 <img
src="karen.jpg" alt="Karen" />。同样,可以为空元素应用最小化标签语法,例如:<br />。;另一种XML中可供选择的语法<br></br>在现行的用户代理中会造成不确定的结果。
可以放置内容模型非空(not EMPTY)元素的空白实例(例如, 一个空的标题或段落),但不能用其最小化形式(如可以写成 <p> </p>而不能写成<p />)。
如果你的样式表使用< 或 &或]]>或--,请使用外部样式表。如果你的脚本使用< 或 &或]]>或--,请使用外部脚本。注意:XML分析器会默认允许删除其中的这些内容和注释。因此,历史上用注释的方法隐藏样式表和脚本来使文档向后兼容的方法在基于XML的用户代理中行不通。
避免在属性值内使用断行和连续的空格。他们在用户代理中会被不一致的处理。
不要在文档head中指定一个以上的 isindex 元素。不赞成使用 isindex 元素,赞成使用 input元素。
lang 和 xml:lang 属性用 lang 和xml:lang 属性指定元素的语言,并且xml:lang具有优先权。
XML中, URI-参考[RFC2396]以 "#foo"为形式的片断标识符结束不代表元素中有name="foo"的属性。当然,这也指元素拥有一个类型为 ID的属性,例如:HTML中的id属性。许多现有的HTML客户端不支持用这种ID类型属性的用法。所以,同一数值也许被这两种属性支持来保持最大的向前和向后兼容性。
进一步,因为类型为ID的属性的合法值相比 CDATA类型要小的多,所以 name 属性被改变为NMTOKEN。这样做是因为它只能和 ID类型有相同的值,或者 Name是XML 1.0 Section 2.3产生的。不幸的是,此约束在XHTML 1.0 DTDs中没有被表达 。因为有这样的变化, 当转换现存的HTML文档时,不会发生。在文档中,这些属性的值必须是唯一的、有效的,并且转换中片段标识符的参考必须更新 。
注意,在XML 1.0 Section 2.3, production 5中的合法值的集合远远多于HTML 4中 ID 和 NAME类型定义里所允许使用的 。
最后,XHTML 1.0不赞成在 a, applet, form, frame, iframe, img, 和 map元素中 name属性的用法,并且在随后的XHTML版本中,它将被除去。
历史上,HTML的字符编码由网络服务器通过HTTP Content-type头部的charset参数指定,或通过文档内部的 meta元素来指定,在XML文档中,字符编码通过XML声明来指定 (例如: <?xml version="1.0" encoding="EUC-JP"?>)。为了正确地表示文档所应用的编码,最好的办法是确保网站服务器提供正确的头部代码,如果这个不能实现,必须在XHTML文档内设置XML字符编码声明和 metahttp-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.
文档对象模型 第1级[DOM]标准 为XML和HTML定义了文档对象模型接口,HTML 4 的文档对象模型指定元素和属性返回值为大写。而XML文档对象模型元素和属性的返回值是他们在文档中所书写的。在XHTML 1.0 中,元素和属性的返回值是小写的,解决这个问题的办法有两种:
text/html的用户代理能使用HTML DOM,并且通过接口返回大写的元素和属性的。 text/xml、application/xml和application/xhtml+xml的用户代理能使用XML DOM,元素和属性返回为小写。一些XHTML元素可能或不可能出现在对象树中,因为在内容模型中,他们不是必须的(例如. thetable中的tbody元素)。这种情况的发生是因为在HTML 4 中,某些元素允许最小化,它们的开始和结束标记被忽略了(SGML语言的特性)。在XML中不可能发生。用户代理需要适应这种情况。有关本主题更多的补充资料,请参考 [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。
层叠样式表 第2级[CSS2] 定义了应用于XHTML或HTML文档语法树的样式,语法的不同会造成视觉和听觉结果上的差异,根据选择器用途,下面的规则可以减少这种差别:
在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="http://www.ui163.com/html.html#internalStyle" type="text/css"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"/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中, Formfeed字符(U+000C) 会被当作空格来显示,而在XML中因为未定义,所以是不合法的。
XML 1.0 中引用了命名字符参考',但HTML中没有对它的引用,编写者为了更好的支持浏览器,请用'代替命名字符参考'。
This appendix is informative.
本标准由W3C工作组众多成员编写。
第2版的编写成员有:
第1版的编写成员有:
This appendix is informative.