XHTML
可扩展超文本标记语言(英语:eXtensible HyperText Markup Language,XHTML),是一种标记语言,表现方式与超文本标记语言(HTML)类似,不过语法上更加严格。从继承关系上讲,HTML是一种基于标准通用标记语言(SGML)的应用,是一种非常灵活的置标语言,而XHTML则基于可扩展标记语言(XML),XML是SGML的一个子集。XHTML 1.0在2000年1月26日成为W3C的推荐标准。
扩展名 |
.xhtml, .xht, .html, .htm |
---|---|
互联网媒体类型 |
application/xhtml+xml |
开发者 | World Wide Web Consortium |
格式类型 | 标记语言 |
扩展自 | XML, HTML |
标准 | 1.0 (Recommendation), 1.1 (Recommendation), |
XHTML1.1为XHTML最后的独立标准,2.0止于草案阶段。XHTML5则是属于HTML5标准的一部分,且名称已改为“以XML序列化的HTML5”,而非“可扩展的HTML”。在今日(2017年),XHTML5比起HTML5仍远远并非主流。
概述
编辑XHTML是“3种HTML 4文件根据XML 1.0标准重组”而成的[1]。而W3C亦继续建议使用HTML 4.01和积极地研究HTML5及XHTML的计划。于2002年8月发表的XHTML 1.0的建议中,W3C指出XHTML家族将会是Internet的新阶段。而转换使用XHTML可以令开发人员接触XML和其好处,并可以确保以XHTML开发的网页于未来的兼容性。
HTML语法要求比较松散,这样对网页编写者来说,比较方便,但对于机器来说,语言的语法越松散,处理起来就越困难,对于传统的电脑来说,还有能力兼容松散语法,但对于许多其他装置,比如手机,难度就比较大。因此产生了由DTD定义规则,语法要求更加严格的XHTML。
大部分常见的浏览器都可以正确地解析XHTML,即使老一点的浏览器,XHTML作为HTML的一个子集,许多也可以解析。也就是说,几乎所有的网页浏览器在正确解析HTML的同时,可兼容XHTML。当然,从HTML完全转移到XHTML,还需要一些过程。
跟CSS(Cascading Style Sheets,层叠式样式表)结合后,XHTML能发挥真正的威力;这使实现样式跟内容的分离的同时,又能有机地组合网页代码,在另外的单独文件中,还可以混合各种XML应用,比如MathML、SVG。
从HTML到XHTML过渡的变化比较小,主要是为了适应XML。最大的变化在于文档必须是结构良好的,所有标签必须闭合,也就是说开始标签要有相应的结束标签。另外,XHTML中所有的标签必须小写。而按照HTML 2.0以来的传统,很多人都是将标签大写,这点两者的差异显著。在XHTML中,所有的参数值,包括数字,必须用双引号括起来(而在SGML和HTML中,引号不是必须的,当内容只是数字、字母及其它允许的特殊字符时,可以不用引号)。所有元素,包括空元素,比如img、br等,也都必须闭合,实现的方式是在开始标签末尾加入斜扛,比如<img ... />
、<br />
。省略参数,比如<option selected>
,也不允许,必须用<option selected="selected">
。两者的详细差别,可通过W3C XHTML说明 (页面存档备份,存于互联网档案馆)来查阅。
版本
编辑至现时为止,XHTML共有以下几个版本:
- XHTML 1.0 Strict(严格版)是参照“HTML 4.01 Strict”改编,但不包括被弃用的元素。其文件类型描述为:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- XHTML 1.0 Transitional(过渡版)是参照“HTML 4.01 Transitional”改编,包括已于Strict版本被弃用的呈现性元素(例如
<center>
,<font>
等)。其文件类型描述为:
<!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">
- XHTML 1.1。其文件类型描述为:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
- XHTML Basic。其文件类型描述为:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">
另外,在Microsoft Internet Explorer 5.0所新增的<ruby>
小字注解标签,在XHTML 1.1得到支持(参看旁注标记)。
而第二版的XHTML 1.0于2002年8月成为W3C推荐的文件类型。[2]
2.0止于草案。
XHTML5不需要DTD。
有效的XHTML文件
编辑一个符合(附合)XHTML标准的文件即可称为有效。此可以确保XHTML文件代码的协调,亦能令文件的更容易被处理,而不需确保各种浏览器编译的一致性。而W3C验证服务则可以验证文件是否有效。而实际上,很多网站开发工具(例如Dreamweaver)都支持以W3C标准验证文件。
语法
编辑XHTML语言必须符合XML的格式,例如,<br>
要写成<br />
、使用了<p>
之后必须有一个</p>
以结束段落。而且,XHTML标签必须使用小写字母,如<br />
不能写为<BR />
;每一个属性都必须使用引号包住,如必须使用<img src="abc.jpg" alt="" />
而不能使用<img src=abc.jpg alt="">
。这些做法的目的,是使一个XHTML网页能够被网页浏览器正确及较快地编译。
和HTML 4的区别
编辑(翻译自 W3C XHTML说明 (页面存档备份,存于互联网档案馆))这部分涉及内容广泛。
XHTML是XML的一种应用。基于这一事实,那些在以SGML为基础的HTML 4中,不完全合法的用法,应被改写。
文档应该是结构良好的
编辑良好结构(Well-formed)[3]是由XML[4]引入的一个新概念。也就是说所有的元素都必须有结束标签或者以特殊的方式书写(如下所述),而且所有的标签必须合理地嵌套。
尽管如此,交叉使用在SGML中仍然是合法的,而且在现有的浏览器中也能够被广泛接受。
- 正确:元素嵌套
<p><em>这是一个要强调的段落。</em></p>
- 错误:元素交叉
<em><p>这是一个要强调的段落。</em></p>
元素名称和属性必须小写
编辑XHTML文件要求所有的HTML元素名称和属性名称都要小写。因为XML本身大小写意义不同,因此必须区分开来。比如,<li>
和<LI>
是完全不同的。
要有结束标签
编辑基于SGML的HTML 4里面,允许特定的标签省略结束标签;这些元素暗含有结束标记。XHTML不允许省略结束标记。所有元素(包括在DTD中声明为空的标签),都必须有结束标签。在DTD中声明为空的元素可以用结束标签或者使用空元素速记法(参见空元素 (页面存档备份,存于互联网档案馆))。
- 正确的:结束的元素
<p>这是一个段落。</p><p>这是另一个段落。</p>
- 错误的:没有结束的元素
<p>这是一个段落。<p>这是另一个段落。
属性值必须总是使用引号包裹
编辑所有的属性值都必须使用引号包含,包括那些以数值类型出现的。
- 正确的:属性值使用引号
<td rowspan="3">
- 错误的:属性值没有使用引号
<td rowspan=3>
禁止属性简化
编辑XML不支持属性简化,属性值对必须书写完整。属性名,像compact和checked在没有指定具体值的情况下,不能够使用。
- 正确的:没有简化属性
<dl compact="compact">
- 错误的:简化属性
<dl compact>
空元素
编辑空元素必须有一个结束标签,或者用/>
来结束开始标签。例如,<br />
或者<hr />
。
- 正确的:结束空标签
<br /><hr />
- 错误的:没有结束空标签
<br><hr>
属性值中空白字符的处理
编辑当客户端在处理属性时,它们依据的是XML的章节3.3.3
- 祛除前缀和后缀的空白字符。
- 将一个或多个空白字符序列映射为单个词间空格。
脚本和样式元素
编辑在XHTML里面,脚本和样式的元素被声明为具有#PCDATA内容。因此,<
和&
会被认为是标记的开始,另外<
和 &
会被XML解释器认为是实体映射被分别解释成为<
和&
。从而将脚本或者样式元素包裹在CDATA标记的部分以避免这些实体扩展。
<script type="text/javascript">
<![CDATA[
...没有转义处理的内容...
]]>
</script>
在文档对象模型中,CDATA部分被XML解释器认为是节点,参见文档对象模型章节1.3 (页面存档备份,存于互联网档案馆)的第一级别推荐DOM (页面存档备份,存于互联网档案馆)。
一种替代方法就是使用外部的脚本和样式文件。
SGML排斥
编辑SGML赋予DTD作者将特定的元素排斥在某个元素之外的能力。此种限制(被称为排斥)在XML中是不可能的。
例如,HTML 4的严格文档类型描述禁止“a”作为子元素嵌套在其他“a”的内部。这在XML中是不可能检查出这种限制的。尽管这种限制无法在DTD中定义,但是某些特定的元素也不能嵌套使用。关于此类元素和不能嵌套使用的元素概览可以在标准的元素限制 (页面存档备份,存于互联网档案馆)里找到。
拥有“id”和“name”属性的元素
编辑HTML 4定义了a, applet, form, frame, iframe, img, and map元素的name属性。HTML 4还引入了id属性。这两个属性被设计用作片段标识符。
在XML里面,片段标识符是ID类型的,而且每个元素只能拥有单一的ID类型的属性。所以,在XHTML 1.0中id属性被定义为ID类型。为了确保XHTML 1.0文档是构建优良的XML文档,XHTML 1.0文档在为以上所列元素定义片段标识符时必须使用id属性。当XHTML文档作为text/html媒体类型使用时,确保此类锚点的向后兼容性资讯参见兼容性指南 (页面存档备份,存于互联网档案馆)。
注意:在XHTML 1.0中,不赞成此类元素拥有name属性,在XHTML的后续版本中将被去掉。
拥有预设值的属性
编辑有一些属性在HTML 4和XHTML中都有一套预设值(比如input元素的type属性)。在SGML和XML中,这些被称为枚举属性。在HTML 4里这些值的解释是不分大小写的,所以值TEXT等同于text。在XML里,这些值的解析是区分大小写的,在XHTML1中,所有的这些值定义为小写。
十六进制值的实体映射
编辑SGML和XML都允许使用十六进制的数值来映射字符。在SGML里这些映射可以使用&#Xnn;或者&#xnn;。在XML文档中,必须使用小写的方式(比如,&#xnn;)。
XHTML5
编辑XHTML5并非可扩展HTML的后继语言,而是对XML序列化的HTML5的称呼,延续了一部分原本XHTML的精神而加入HTML5,成为HTML5规格的一部分。
参考文献
编辑- ^ http://www.w3.org/TR/xhtml1/#xhtml (页面存档备份,存于互联网档案馆) 'What is XHTML?' section in XHTML™ 1.0 The Extensible HyperText Markup Language (Second Edition) A Reformulation of HTML 4 in XML 1.0 W3C Recommendation 26 January 2000, revised 1 August 2002
- ^ 存档副本. [2008-09-30]. (原始内容存档于2008-09-11).
- ^ 存档副本. [2005-04-17]. (原始内容存档于2008-11-14).
- ^ 存档副本. [2005-04-17]. (原始内容存档于2008-11-14).
外部链接
编辑- XHTML 1.0可扩展超文本标记语言(第二版) (页面存档备份,存于互联网档案馆)
- XHTML基础 (页面存档备份,存于互联网档案馆)
- W3C验证服务 (页面存档备份,存于互联网档案馆)
- XHTML 1.1 - 基于模块的XHTML (页面存档备份,存于互联网档案馆)
- XHTML 2.0(草案) (页面存档备份,存于互联网档案馆)
- 中文的XHTML教程
- W3C HTML首页 (页面存档备份,存于互联网档案馆)