C、。HTML兼容性指南
本附录仅供参考。
本附录总结了希望在现有HTML用户代理上呈现XHTML文档的作者的设计指南。请注意,本建议并未定义HTML的一致性用户代理应该处理HTML文档。它也没有定义互联网媒体类型的含义文本/html
。有关这些定义,请参见[HTML4(高温ML4)]和[RFC2854协议]分别。
第1章。处理指令和XML声明
请注意,处理指令是在某些用户代理上呈现的。此外,一些用户代理将XML声明解释为文档是无法识别的XML而不是HTML,并且因此可能无法按预期呈现文档。为了与这些类型的旧浏览器兼容,您可能希望避免使用处理指令和XML声明。然而,请记住,当XML声明未包含在文档中时,文档只能使用默认字符编码UTF-8或UTF-16。
在尾部之前包含空格/
和>
空元素,例如。<br/>
,<小时/>
和<img src=“karen.jpg”alt=“karen”/>
此外,对空元素使用最小化标记语法,例如。<br/>
,作为替代语法<br></br>
XML允许在许多现有用户代理中产生不确定的结果。
C.3、。元素最小化和空元素内容
给定一个元素的空实例,该元素的内容模型不是空
(例如,空标题或段落)不要使用最小化形式(例如,使用<p></p>
而不是<p/>
).
如果样式表使用<
或&
或]]>
或--
。如果脚本使用<
或&
或]]>
或--
注意,允许XML解析器以静默方式删除注释的内容。因此,“隐藏”文字的历史实践而“注释”中用于使文档向后兼容的样式表在基于XML的用户代理中可能无法正常工作。
避免属性值中出现换行符和多个空格字符。用户代理对这些问题的处理不一致。
不包括多个i索引
文档中的元素头
. Thei索引
元素被弃用以支持输入
元素。
C.7款。这个朗
和xml:lang
属性
同时使用朗
和xml:lang
属性时指定元素的语言。的值xml:lang
属性优先。
在XML中,URI(URI)-参考文献[RFC2396协议]以表单的片段标识符结束“#foo”
不要引用具有属性的元素name=“foo”
; 相反,它们指的是具有定义为类型的属性的元素身份证件
例如身份证件
属性。许多现有的HTML客户端不支持使用身份证件
-以这种方式键入属性,以便为这两个属性提供相同的值以确保最大的向前和向后兼容性(例如。,<a id=“foo”name=“foo“></a>
).
此外,由于类型的属性的合法值集身份证件
比类型的要小得多CDATA(CDATA)
,的类型名称
属性已被已更改为NMTOKEN公司
。此属性受到约束,因此只能具有与类型相同的值身份证件
,或作为姓名
XML 1.0第2.3节中的生产,生产5。不幸的是,这个约束不能在XHTML1.0DTD中表达。由于此更改,在转换现有HTML文档时必须格外小心。这些值属性在文档中必须是唯一的、有效的,并且如果在转换过程中更改了值,则必须更新对这些片段标识符的任何引用(内部和外部)。
请注意,XML 1.0第2.3节产品5中的合法值集合比允许在身份证件
和名称
HTML4中定义的类型。当将片段标识符定义为向后兼容时,只有与模式匹配的字符串[A-Za-z][A-Za-z0-9:_.-]*
应该使用。请参见第6.2节第页,共页[HTML四]了解更多信息。
最后,请注意,XHTML 1.0已弃用名称
的属性一
,小程序
,形式
,框架
,iframe公司
,国际货币基金组织
、和地图
元素,它将在后续版本中从XHTML中删除。
历史上,HTML文档的字符编码要么由web服务器通过HTTP Content-Type头的charset参数指定,要么通过元
中的元素文档本身。在XML文档中,文档的字符编码在XML声明中指定(例如。,<?xml version=“1.0”encoding=“EUC-JP”?>
).为了可移植地显示具有特定字符编码的文档,最好的方法是确保web服务器提供正确的标题。如果不可能要显式设置其字符编码,必须同时包含XML声明、编码声明和元
http-equiv语句(例如。,<元http-equiv=“Content-type”Content=“text/html;charset=EUC-JP”/>
). 在符合XHTML的用户代理中,XML声明的编码声明的值优先。
注意:请注意,如果文档必须在meta-http-equiv语句中包含字符编码声明,则http服务器和/或用户代理可能始终将该文档解释为属于该声明中定义的互联网媒体类型。如果要将文档用作多种媒体类型,则必须使用HTTP服务器设置文档的编码。
当布尔属性以完整(非最小化)形式出现时,一些HTML用户代理无法解释布尔属性,这是XML1.0所要求的。请注意,此问题不会影响用户代理符合HTML 4。涉及以下属性:契约
,现在
,ismap公司
,声明
,无阴影
,已检查
,禁用
,只读的
,倍数
,挑选出来的
,禁止调整框架窗口尺寸
,推迟
.
文档对象模型1级建议[DOM公司]为XML和HTML4定义文档对象模型接口。HTML 4文档对象模型指定HTML元素和属性名称以大写形式返回。XML文档对象模型指定元素和属性名称在指定的情况下返回。在XHTML1.0中,元素和属性以小写形式指定。这种明显的差异可以通过两种方式解决:
- 访问作为Internet媒体类型的XHTML文档的用户代理
文本/html
通过DOM公司可以使用HTML DOM,并且可以依赖元素以及从这些接口以大写形式返回的属性名称。
- 访问作为Internet媒体类型的XHTML文档的用户代理
文本/xml
,应用程序/xml
,或application/xhtml+xml
也可以使用XML DOM。元素和属性将以小写形式返回。此外,一些XHTML元素可能会出现在对象树中,也可能不会出现,因为它们在内容模型中是可选的(例如表格主体
内的元素桌子
). 出现这种情况是因为在HTML4中,一些元素被允许最小化,从而省略了它们的开始和结束标记(SGML特性)。这不是可能在XML中。XHTML没有要求文档作者插入无关的元素,而是将这些元素设置为可选的。用户代理需要相应地适应这一点。有关的更多信息本主题,请参见[DOM2公司]
C.12款。在属性值(和其他位置)中使用与符号
在SGML和XML中,与号字符(“&”)表示实体引用的开头(例如,®;表示注册商标符号“®”)。不幸的是,许多HTML用户代理忽略了HTML文档中对与号字符的错误使用,将看起来不像实体引用的与号视为文字与号。基于XML的用户代理不会容忍这种不正确的用法,任何错误使用与号的文档都将“无效”,因此不符合本规范。为了确保文档与历史HTML用户代理和基于XML的用户代理兼容,文档中使用的要被视为文字字符的符号必须表示为实体参考(例如“&;
“)。例如,当href公司
的属性一
元素引用接受参数的CGI脚本,它必须表示为http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=用户
而不是作为http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user
.
C.13款。级联样式表(CSS)和XHTML
级联样式表第2级建议[CSS2系列]定义应用于HTML或XML的解析树的样式属性文件。根据所使用的选择器,解析中的差异将产生不同的视觉或听觉结果。以下提示将减少对未提供的文档的这种影响修改为两种媒体类型:
- XHTML的CSS样式表应使用小写元素和属性名称。
- 在表中,tbody元素将由HTML用户代理的解析器推断,而不是由XML用户代理的解析器推断。因此,如果tbody元素是在CSS选择器中引用。
- 在XHTML命名空间中,用户代理应该将“id”属性识别为id类型的属性。因此,样式表应该能够继续使用缩写“#”选择器语法,即使用户代理未读取DTD。
- 在XHTML名称空间中,用户代理需要识别“class”属性。因此,样式表应该能够继续使用速记“.”选择器语法。
- CSS为HTML和XML文档定义了不同的一致性规则;请注意,HTML规则适用于以HTML形式交付的XHTML文档,而XML规则适用于XML。
在HTML4和XHTML中风格
元素可用于定义文档内部样式规则。在XML中,XML样式表声明用于定义样式规则。为了成为与此约定兼容,风格
元素应该使用身份证件
属性,并且XML样式表声明应该引用这个碎片。例如:
<?xml-stylesheet href=“http://www.w3.org/样式表/TR/W3C-REC.css“type=”text/css“?><?xml样式表href=“#internalStyle”type=“text/css”?><!DOCTYPE htmlPUBLIC“-//W3C//DTD XHTML 1.0严格//EN”"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.DTD"><html xmlns=“http://www.w3.org/1999/xhtml“xml:lang=”en“lang=”en><头部><title>内部样式表示例<style type=“text/css”id=“internalStyle”>代码{颜色:绿色;font-family:单空间;font-weight:粗体;}</style></头><body><p>这是使用我们的<code>内部样式表</code>。</p></body></html>
C.15。HTML与XML中的空白字符
HTML文档中的某些合法字符在XML文档中是非法的。例如,在HTML中,由于XML对字符,这是非法的。
命名字符引用&载脂蛋白;
(撇号U+0027)在XML1.0中引入,但在HTML中没有出现。因此,作者应使用'
而不是&载脂蛋白;
在HTML4用户代理中按预期工作。