HTML 向 XHTML1.0 兼容性指导
1 处理说明
一些用户代理程序会显示处理说明。但是,注意当文档中没有XML声明时,文档只能用缺省的字符编码UTF-8 或 UTF-16。
2 空元素
在空元素结束符 / 和 > 前加一个空格,如 br />,hr /> 和 img src="karen.jpg" alt="Karen" />. 还有,使用最小化的标签语法,如br />,因为另一种XML允许的语法 br>/br> 在很多现有用户代理程序会导致不可靠的结果。
3 元素最小化和空元素内容
内容模型不是空的元素,在为空的场合(如空title或空段落),不要用最小化形式(如 用 p> /p>,不用 p />).
4 嵌入的样式表和Script
如果你的样式表使用 或 或 ]]> 或 --,用外部样式表。如果你的script用 或 或 ]]> 或 --,用外部script。 注意XML分析程序会在不告知的情况下除去注释的内容。因此,以前用注释的方法”隐藏”script和样式表的习惯使文档可以向后兼容,但是可能在基于XML的执行时不能按预期工作。
5 在属性值内部分行
在属性值中避免使用分行和多个空格符。用户代理程序处理这些情况时不一致。
6 Isindex
在文档的head部分不要使用超过一个 isindex 元素. isindex 元素不被赞成使用,赞成使用input元素。
7 lang 和 xml:lang 属性
在指定元素的语言时同时使用 lang 和 xml:lang 属性。xml:lang 属性在前。
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版本中,它将被去除。
9 字符编码
要指定文档中的字符编码,同时在xml声明中使用编码属性指定 (如. ?xml version="1.0" encoding="EUC-JP"?>) 和在meta中用 http-equiv 语句 (如 meta http-equiv="Content-type" content='text/html; charset="EUC-JP"' />).xml处理指令的编码属性值在前。
10 布尔属性
一些HTML用户代理程序在布尔属性以完全(非最小化)形式出现时不能解释它们,而这是XML1.0必须的。注意这个问题不会影响用户代理程序对HTML 4的兼容。包括以下一些属性: compact,nowrap,ismap,declare,noshade,checked,disabled,readonly,multiple,selected,noresize,defer.
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使元素成为可选的,而不是要由文档作者来插入外来元素。相应地,应用程序需要适应这一点。
12 在属性值中使用
在属性值中含有符号时,它必须用字符实体引用来表示 (即 ""). 例如,当一个元素的 href 属性指向一个接收参数的 CGI脚本时,它必须表示为http://my.site.dom/cgi-bin/myscript.pl?class=guestname=user,而不是 http://my.site.dom/cgi-bin/myscript.pl?class=guestname=user.
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规则。