以前在网上零零碎碎的看过一些关于xhtml的文章,但总觉得不踏实,感觉学习不够系统。今日特在w3c上翻出了这篇介绍xhtml1.0的文章,配合网上部分中文翻译版本,详细的读了一遍.为加深印象,先总结于此:
1,什么是XHTML?XHTML有什么优点?
XHTML系列文档基于XML,最终被设计用来与基于XML的用户代理程序一同工作。它是由HTML4再生和发展而来。
XHTML1.0是xhtml家族的第一个成员,它是将HTML4的三种文档应用到XML1.0发展而来。作为一种语法,它的内容既符合XML,又能被HTML4的用户代理程序所识别。开发这将其文档转换为XHTML有如下益处:
1,XHTML文档遵从XML,这样用标准的XML工具很容易查看,编辑,检验它们。
2,XHTML可以在HTML4用户代理程序中使用,也能在新的XHTML用户代理程序中使用,而且
可以在后者中达到与前者相同或更好的显示效果。
3,XHTML中的程序可以是HTML的DOM,也可以是XML的DOM。
4,随着XML的发展,XHTML1.0文档更有可能运用到各种XHTML环境中。
2,XHTML的标准定义:
1,它必须经过W3C关于XHTML1.0的三种DTD之一(如下所示)的验证。
<! 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" >
2,文档的根元素必须是<html>.
3,文档的根元素必须用xmlns属性指明其名字空间(namespace),XHTML的名字
空间在http://www.w3.org/1999/xhtml
中定义。
4,根元素之前必须有一个DOCTYPE声明,DOCTYPE中声明的标识符必须引用以上三种DTD中的一种。
3,与HTML4的区别:
1,文档编排良好,元素必须适当的嵌套。
正确:嵌套元素。
<p>here is an emphasized <em>paragraph</em>.</p>
不正确:层叠元素。
<p>here is an emphasized <em>paragraph.</p></em>
2,元素和属性名称必须小写。
对所有HTML元素和属性名,XHTML 文档必须使用小写。 因为XML是大小写敏感的,所以这个差别是必须的。如 <li> 和 <LI> 是不同的标签。
3,对于非空元素,必须使用结束标签。
在基于 SGML的 HTML 4 中,一些隐含结束意义的元素允许忽略结束标签。而在基于XML的XHTML中,这种忽略不被允许。除了在DTD中被声明为空的元素,所有元素必须有结束标签。
正确:结束了的元素。
<p>here is a paragraph.</p><p>here is another paragraph.</p>
不正确:未结束元素。
<p>here is a paragraph.<p>here is another paragraph.
4,属性值必须在引号中。
所有的属性必须用引号,即使是数字。
正确:在引号中的属性值
<table rows="3">
不正确:不在引号中的属性值。
<table rows=3>
5,每个属性必须包含一个属性值。
XML 不支持属性最小化. 属性值对必须写全。象compact,checked这样的属性名不能不指定属性值而在元素中出现。
正确:没有最小化的属性
<dl compact="compact">
不正确:最小化属性
<dl compact>
6,空元素起始标签必须以“/>”结束。
空元素要么必须有结束标签,要么起始标签以/>结束
. 例如,<br/>或<hr></hr>
. 请参看HTML兼容性指导 HTML Compatibility Guidelines 中的信息,以保证向后兼容HTML 4用户代理程序
7,Style和Script元素内容应该用“<![CDATA[”和“]]>”记号包含或使用外部文件。
在XHTML中,script和style元素声明为
#PCDATA
内容形式,因此,<
和 &
被看作是标识的开始,<和&
这样的实体被XML处理程序看作为实体引用而分别被认为是<
和 &
. 将script和style元素的内容包裹在CDATA记号部分中避免了这些实体的扩张。
<script>
<![CDATA[
... unescaped script content ...
]]>
</script>
CDATA
部分被 XML 处理程序识别,是文档对象模型中一个结点。请参看1.3节Section 1.3的DOM LEVEL 1推荐标准[DOM]。
替代的方式是使用外部script和style文档。
8,具有 'id' 和 'name' 属性的元素。
HTML 4 定义了name属性的元素有 a,applet,form,frame,iframe,img,and map. HTML 4还引入了 id 属性. 这两个属性都是被设计作为片段标识符。
在XML中,片段标识符是ID类型,每个元素只能有一个ID类型的属性。因此,在XHTML1.0中,id属性被定义为ID类型。为保证XHTML1.0文档是结构良好的XML文档,在定义一个片段标识符时,XHTML文档必须使用id属性,即使是对那些以前用name属性的元素。请参看 HTML Compatibility Guidelines 的信息,确保XHTML文档以text/html媒体类型使用时,这些”锚”能向后兼容。
注意,在XHTML 1.0中,name 属性不被正式支持,在以后的XHTML版本中将被删除。
4,HTML兼容性指导(原文摘录)
================================
C.1 处理说明
一些用户代理程序会显示处理说明。但是,注意当文档中没有XML声明时,文档只能用缺省的字符编码UTF-8 或 UTF-16。
C.2 空元素
在空元素结束符
/
和 >
前加一个空格,如 <br />,<hr /> 和 <img src="karen.jpg" alt="Karen" />. 还有,使用最小化的标签语法,如<br />,因为另一种XML允许的语法 <br></br> 在很多现有用户代理程序会导致不可靠的结果。
C.3 元素最小化和空元素内容
内容模型不是空的元素,在为空的场合(如空title或空段落),不要用最小化形式(如 用 <p> </p>,不用 <p />).
C.4 嵌入的样式表和Script
如果你的样式表使用
<
或 &
或 ]]>
或 --,
用外部样式表。如果你的script用 <
或 &
或 ]]>
或 --,
用外部script。 注意XML分析程序会在不告知的情况下除去注释的内容。因此,以前用注释的方法”隐藏”script和样式表的习惯使文档可以向后兼容,但是可能在基于XML的执行时不能按预期工作。
C.5 在属性值内部分行
在属性值中避免使用分行和多个空格符。用户代理程序处理这些情况时不一致。
C.6 Isindex
在文档的head部分不要使用超过一个
isindex
元素. isindex
元素不被赞成使用,赞成使用input
元素。
C.7
lang
和 xml:lang
属性
在指定元素的语言时同时使用
lang
和 xml:lang
属性。xml:lang
属性在前。
C.8 片段标识符
在 XML中,以
"#foo"形式结束片段标识符
URI [RFC2396] 不是指元素有一个属性name="foo"
,而是指元素有一个被定义为ID类型的属性,如,HTML 4中的id属性。很多HTML客户程序不以这种方式支持ID类型属性,所以,可以将相同的值同时附给这两个属性,以保证最大程度的向后和向前兼容。(如 <a id="foo" name="foo">...</a>).
此外,因为ID类型属性的合法值集比CDATA类型属性的值集小得多,name属性被改为NMTOKEN。这个属性被限制为只有和ID类型或XML1.0 2.5节中的Name产品同样的值。不幸的是,XHTML的DTD不能表示出这个限制。因为这个改变,在转换现有的HTML文档时要加以注意。 如果在转换时值可能会改变,这些属性的值在文档中必须是唯一的,有效的,任何对这些
片段标识符的引用(不管是内部还是外部)必须更新。
最后,注意不赞成在
a
,applet
,form
,frame
,iframe
,img
,和 map
元素中使用name属性,在以后的XHTML版本中,它将被去除。
C.9 字符编码
要指定文档中的字符编码,同时在xml声明中使用编码属性指定 (如. <?xml version="1.0" encoding="EUC-JP"?>) 和在meta中用 http-equiv 语句 (如 <meta http-equiv="Content-type" content='text/html; charset="EUC-JP"' />).xml处理指令的编码属性值在前。
C.10 布尔属性
一些HTML用户代理程序在布尔属性以完全(非最小化)形式出现时不能解释它们,而这是XML1.0必须的。注意这个问题不会影响用户代理程序对HTML 4的兼容。包括以下一些属性:
compact
,nowrap
,ismap
,declare
,noshade
,checked
,disabled
,readonly
,multiple
,selected
,noresize
,defer
.
C.11 文档对象模型和 XHTML
文档对象模型 level 1 推荐标准 [
DOM] 定义XML和HTML 4的文档对象模型。 HTML 4 文档对象模型规定HTML元素名和属性名以大写形式返回。XML文档对象模型规定元素名和属性名以它们被指定的形式返回。在 XHTML 1.0中,元素和属性指定为小写形式。对这个显著的差别可以用两种方式处理:
- 通过DOM访问text/html internet媒体类型XHTML文档的应用程序可以使用HTML DOM,还可以依赖这些界面返回的大写的元素名和属性名。
- 通过DOM访问text/xml或application/xml internet媒体类型XHTML文档的应用程序也可以使用XML DOM. 元素名和属性名将以小写形式返回。 并且,一些 XHTML 元素可以也可以不出现在对象树中,因为在内容模型中它们是可选的(如table中的
tbody
元素). 在HTML 4中,一些元素可以允许被最小化以至于它们的开始标签和结束标签都被忽略(SGML特性),所以可以发生。但是在XML中不行。XHTML使元素成为可选的,而不是要由文档作者来插入外来元素。相应地,应用程序需要适应这一点。
C.12 在属性值中使用 &
在属性值中含有&符号时,它必须用字符实体引用来表示 (即 "
&
"). 例如,当一个元素的 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
.
C.13 层叠样式表和XHTML
层叠样式表 level 2推荐标准 [
CSS2] 定义style的属性,用于分析HTML和XML文档的树形结构。分析时的不通将导致不同的视觉或听觉效果,这依赖于使用的选择器。下面的技术可以减少对文档的这种影响,而用不修改这两中媒体类型:
- XHTML的CSS样式表应该用小写的元素和属性名。
- 在table中,tbody 元素会被HTML用户代理程序的分析器推断出,但是XML用户代理程序的分析器不会这么做。所以如果在CSS选择器中要被引用到,你应该总是明晰地加上tbody元素。
- 在XHTML 名址空间,用户代理程序将把”id”属性认作为一个ID类型的属性。因此,即使用户代理程序不能认出DTD,样式表也应该能够继续使用”#”简化选择器语法。
- 在XHTML 名址空间,用户代理程序将识别class属性,因此,样式表应该能构继续使用”.”简化选择器语法。
- CSS 定义HTML和XML文档的不同一致性标准; 在XHTML文档以HTML表达时,用HTML规则,在XHTML文档以XML表达时,用XML规则。