HTML与XHTML的区别
虽说XHTML向下兼容HTML4.01,但因为XHTML又应用了XML规则,所以XHTML在应用方面还是又几个比HTML4.01更严谨或不同之处。
1. XHTML文档必须具有良好完整的排版(well-formed)
编排良好性(Well-formedness)是XML引入的一个新概念。从本质上说,元素必须有结束标签,或者必须以特殊方式书写,而且元素必须嵌套。
尽管SGML规定重叠(overlapping)是非法的,但现有的浏览器普遍允许HTML重叠。
正确:嵌套元素(nested elements)√
不正确:层叠元素(overlapping elements)×
2. 元素和属性名必须小写
对于所有HTML元素和属性名,XHTML文档必须使用小写。 因为XML是大小写敏感的。如 <li> 和 <LI> 是不同的标签。
3. 对非空元素,必须使用结束标签
在基于SGML的HTML4中的一些隐含结束意义的元素允许忽略结束标签。XML不允许忽略结束标签。除了在DTD中被声明为空的元素,所有元素必须有结束标签。
正确:结束的元素(terminated elements)√
不正确:未结束的元素(unterminated elements)×
4. 属性值必须在引号中
所有的属性值必须在引号中,即使是数字形式的属性值
正确:在引号中的属性值(quoted attribute values)√
不正确:不在引号中的属性值(unquoted attribute values)×
5. 属性最小化
XML不支持属性最小化。属性-属性值必须完整成对的写出。像disabled,checked这样的属性名不能在不指定属性值的情况下出现。
正确:非最小化属性(unminimized attributes)√
6. 空元素
空元素必须有结束标签,或者起始标签必须以/>结束。例如,<br/>或<hr></hr>。参看W3C的HTML兼容性指导HTML Compatibility Guidelines中的信息,以保证向后兼容HTML 4用户代理程序。
正确:结束的空元素(terminated empty elements)√
7. 属性值中的空白字符处理
用户代理处理属性值时将根据XML的下面方法操作:
- 删去引导和后序空白符
- 将一个或多个空白符(包括换行)转换成单个字符间空间
8. Script and Style 元素
XHTML中,script和style元素被声明为#PCDATA内容形式,因此,<和&被看作是标识的开始,<和&等HTML实体将被XML处理器看作为实体引用而分别被认为是<和&。将script和style元素的内容隐蔽在CDATA标记中避免了这些实体的扩张,也就是使用了XML的CDATA section形式:
因此,以script元素为例,应使用下列形式:
<![CDATA[
... unescaped script content ...
]]>
</script>
CDATA部分被XML处理器识别,表现为文档对象模型中的一个结点。参看Section 1.3 的DOM LEVEL 1推荐标准[DOM].
在需要以text/html发送的文件中,为了能在不处理CDATA部分的浏览器中隐藏,CDATA部分的起始和结束标签需要标识成注释:
//<![CDATA[
... unescaped script content ...
//]]>
</script>
<style type="text/css">
/*<![CDATA[*/
... unescaped stylesheet content ...
/*]]>*/
</style>
虽然在XHTML中用XML的CDATA section形式,可以在script和style元素中使用<和&,但这对于大多数的当前浏览器来说,可能都有问题,因为它们无法解析CDATA,最聪明和最安全的方法就是把所有的CSS和JavaScript都移到外部文件中:
9. SGML排斥
SGML给作者的DTD可以指定在一个元素内部禁止出现的元素。这样的禁止(或常排斥)在XML中是不可能的。
例如,严格的HTML 4 DTD“禁止”任何层次的“a”元素对另一“a”元素的嵌套。在XML中无法写出这些的“禁止”。虽然这些禁止不能被定义在DTD中,但是一些元素不应该被嵌套。对不能被嵌套的元素Element Prohibitions的总结:
10. 具有“id”和“name”属性的元素
HTML4定义了name属性的元素有a、applet、form、frame、iframe、img and map。HTML4还引入了id属性。这两个属性都是被设计用为片段标识符。
在XML中,片段标识符是ID,每个元素只能有一个ID类型的属性。因此,在XHTML1.0中,id属性被定义为ID类型。为保证XHTML1.0文档是结构良好(well-structured)的XML文档,在定义一个片段标识符时,XHTML文档必须使用id属性,即使是对那些以前用name属性的元素,参看 HTML Compatibility Guidelines ,确保XHTML文档以text/html媒体类型使用时,这些"锚(anchors)"能向后兼容。
注意,在XHTML 1.0中,name属性是不赞成使用的,在以后的XHTML版本中将被删除。
11. 具有预定义值的属性
HTML 4和XHTML都有一些属性值为固定几个值的属性,比如input元素的type属性。在SGML和XML中,它们被称为列举属性。在HTML 4中,这些属性的属性值是不区分的小写的,所以type="TEXT"和type="text"都是可以的。而在XML中这些值是区分大小写的,在XHTML中它们也要小写。
12. 实体参考的十六进制值
SGML和XML都允许字符参考使用十六进制值, SGML中这些参考可以用“&#Xnn;”或“&#xnn;”表示;但在XML中必须小写,即“&#xnn;”
总结一下:
参阅:
什么是HTML
W3C的XHTML与HTML常见问题http://www.w3.org/MarkUp/2004/xhtml-faq
在W3C(www.w3.org)网站上校验XHTML的正确性http://validator.w3.org/
W3C XHTML1.0首页
W3C XHTML2.0首页