XHTML
一,概述
可扩展超文本置标语言(eXtensible HyperText Markup Language,XHTML),是一种置标语言,表现方式与超文本置标语言(HTML)类似,不过语法上更加严格。从继承关系上讲,HTML是一种基于标准通用置标语言(SGML)的应用,非常灵活,而XHTML则基于可扩展置标语言(XML),XML是SGML的一个子集。XHTML 1.0在2000年1月26日成为W3C的推荐标准。
XHTML是当前HTML版的继承者。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 Transitonal (过渡版)
XHTML 1.0 Strict (严格版)
XHTML 1.0 Frameset (框架版)
XHTML 1.1
XHTML基础
其中,“XHTML 1.0 Transitonal”是参照“HTML 4.01 Transitional”改编、“XHTML 1.0 Strict”是参照“HTML 4.01 Strict”改编、“XHTML 1.0 Frameset”是参照“HTML 4.01 Frameset”改编。
在微软Internet Explorer 5.0所新增的<ruby>小字注解标签,在XHTML 1.1得到支援(参看Ruby字符)。
三,语法
XHTML语言必须符合XML的格式,例如,<br>要写成<br />、使用了<p>之后必须有一个</p>以结束段落。而且,XHTML标签必须使用小写字母,如<br />不能写为 <BR />;每一个属性都必须使用引号包住,如必须使用<img src=“abc.jpg” />而不能使用<img src=abc.jpg>。这些做法的目的,是使一个XHTML网页能够被网页浏览器正确及较快地编译。
四,和HTML 4的区别
(翻译自W3C XHTML说明)这部分涉及内容广泛.
XHTML是XML的一种应用,基于这一事实。那些在以SGML为基础的HTML 4中完全合法的用法应当被改变。 [编辑]
文档应该是良构的
良构(Well-formedness)[1]是由XML[2] 引入的一个新概念。也就是说所有的元素都必须有结束标签或者以特殊的方式书写(如下所述),而且所有的标签必须合理地嵌套。
尽管如此,交叉使用在SGML中仍然是合法的,而且在现有的浏览器中也能够被广泛接受。
正确的:元素嵌套
<p><em>这是一个被强调的段落。</em></p>
错误的:元素交叉
<em><p>这是一个被强调的段落。</em></p>
[编辑]
元素名和属性必须统一小写
XHTML文档把所有的HTML元素名和属性名都小写。这个区别是必须的,因为XML是大小写敏感的。比如,<li>和<LI>是完全不同的两个标签。 [编辑]
对于非空标签,也需要结束标签
基于SGML的HTML 4里面,允许特定的标签省略结束标签;这些元素暗含有结束标记。XML不允许省略结束标记。所有元素包括在DTD中声明为 空的标签都必须有结束标签。在DTD中声明为空的元素可以用结束标签或者使用空元素速记法(参见空元素)。
正确的:结束的元素
<p>这是一个段落。</p><p>这是另一个段落。</p>
错误的:没有结束的元素
<p>这是一个段落。<p>这是另一个段落。
[编辑]
属性值必须总是使用引号包裹
所有的属性值都必须使用引号包含,包括那些以数值类型出现的。
正确的:属性值使用引号
<td rowspan="3">
错误的:属性值没有使用引号
<td rowspan=3>
[编辑]
属性简化
XML不支持属性简化,属性值对必须书写完整。属性名,像compact和checked在没有指定具体值的情况下不能够使用。
正确的:没有简化属性
<dl compact="compact">
错误的:简化属性
<dl compact>
[编辑]
空元素
空元素必须有一个结束标签,或者用/>来结束开始标签。例如,<br/>或者<hr></hr> 。
正确的:结束空标签
<br/><hr/>
错误的:没有结束空标签
<br><hr>
[编辑]
属性值中空白字符的处理
当客户端在处理属性时,它们依据的是XML的章节3.3.3
祛除前缀和后缀的空白字符。
将一个或多个空白字符序列映射为单个词间空格。
[编辑]
脚本和样式元素
在XHTML里面,脚本和样式的元素被声明为具有 #PCDATA 内容。因此,<和&会被认为是标记的开始,另外<和 &会被认为 XML 解释器认为是实体映射被分别解释成为<和&。从而将脚本或者样式元素包裹在 CDATA 标记的部分以避免这些实体扩展。
<script type=“text/javascript”>
<![CDATA[
… 没有转义处理的内容…
]]>
</script>
在文档对象模型中,CDATA部分被XML解释器认为是节点,参见文档对象模型 <a href=“http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-E067D597”>章节1.3</a>的第一级别推荐 [<a href=“http://www.w3.org/TR/xhtml1/#ref-dom”>DOM</a>] 。
一种替代方法就是使用外部的脚本和样式文件。
4.9. SGML 排斥
SGML赋予DTD作者将特定的元素排斥在某个元素之外的能力。此种限制(被称为排斥)在XML中是不可能的。
例如,HTML 4的严格文档类型描述禁止“a ”作为子元素嵌套在其他“a ”的内部。这在XML中是不可能检查出这种限制的。尽管这种限制无法在DTD中定义,也不要嵌套使用某些特定的元素。关于此类元素和不能嵌套使用的元素概览可以在标准的<a href=“http://www.w3.org/TR/xhtml1/#prohibitions”> 元素限制</a>里找到。
4.10. 拥有“ 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媒体类型使用时,确保此类锚点的向后兼容性信息参见<a href=“http://www.w3.org/TR/xhtml1/#guidelines”>HTML 兼容性指南</a>。
注意:在XHTML 1.0中,不赞成此类元素拥有name属性,在XHTML的后续版本中将被去掉。
4.11. 拥有预设值的属性
有一些属性在HTML 4和XHTML中都有一套预设值(比如input元素的type属性)。在SGML和XML中,这些被称为枚举属性。在HTML 4里这些值的解释是不分大小写的,所以值TEXT等同于text。在XML里,这些值的解析是区分大小写的,在XHTML1中,所有的这些值定义为小写。
4.12. 十六进制值的实体映射
SGML和XML都允许使用十六进制的数值来映射字符。在SGML里这些映射可以使用&#Xnn;或者&#xnn;。在XML文档中,必须使用小写的方式(比如,&#xnn;)。