用doctype激活浏览器模式(4)

作者:秦歌 来源:随网之舞 时间:2009-06-15 19:02:00 

相关链接

补遗:对XML的实现者和规范作者的恳求

请不要把doctype嗅探带到XML。

doctype嗅探是用签杂烩汤似的方法解决一个标签杂烩汤问题。doctype嗅探是在HTML4和CSS2规范发布后设计的一种试探方法,它从文档中区分出过时文档以符合其作者可能期望的行为。

偶尔有人建议在XML上使用doctype嗅探来调度不同的处理、识别正在使用的词汇表或激活特性。这是个坏主意。调度和词汇表识别应该是基于名字空间的,而特性激活应该是基于明确的处理指令或元素。

良构(well-formedness)的整个思想是介绍允许XML的无DTD解析,且推广无doctype文档。在正式情况下,两个XML文档有相同的规范形式且应用不同地处理它们(且不同之处并非因为没有选择处理外部实体),这个应用或许被破坏了。在实践情况下,如果两个XML文档导致同样的内容被报告(qnames忽略)给SAX2内容处理器且应用不同地处理文档,这个应用或者被破坏了。考虑到作为 Web作者无法相信每个人都会使用解决额外实体的XMLprocessor来解析其页面(即使一些浏览器看起来这样做,因为它们会映射一定公共的标识符到一个有删节的定义实体的DTD),插入doctype到XML中用于Web是毫无意义的且通常会导致货运崇拜(cargo cultish)习惯。(您仍然使用W3C验证器的DTD覆盖功能来对一个DTD进行验证,虽然W3C验证器会说结果仅仅是暂时有效。或更好的是,你可以用放宽NG验证,它不会污染模式引用的文档。)为了嗅探而要求doctype是非常愚蠢的,即使那是在HTML实践中的解决方法。

此外,当低级别的规范定义两个相等的东西时,高级别的规范不应该尝试给它们不同的含义。请考虑<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">。如果删除公共标识符,依旧指定了同样的DTD,因此doctype <!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">表示和前面的doctype一样。应该不同地嗅探它们么?可以进一步理论。假设复制给example.com一个叫foobar.dtd的DTD:<!DOCTYPE html SYSTEM "http://example.com/foobar.dtd">。这该如何嗅探?应该是同一个意思。甚至整个DTD可以贴在文档中。

换句话说,如果有#include “foo.h”,你不应该给名字foo.h绑定任何black magic,因为它应该允许复制foo.h的内容到文档中或复制foo.h到bar.h中且表示#include “bar.h”。

我不担心HTML和SGML构造相同的参数的原因是Web浏览器不会使用真正的SGML解析器去解析HTML,所以我认为伪装成SGML进行处理是没有用的。无论如何,如果你还不相信,请看W. Eliot Kimber关于此事的文章 comp.text.sgml

附录:text/html中一些doctype的处理方式

下表中,怪癖模式、标准模式和几乎标准分别表示为Q、S和A。当浏览器仅有两种模式时,如果表格单元格的行高和Mozilla的标准模式表现一致时,标准模式标记为“S”,如果表格单元格的行高和Mozilla的几乎标准模式表现一致时,则标记为“A”。

请注意使用XML内容模型提供服务的XHTML在XML模式下渲染。

本表的目的并不是说表中所有的doctype都是新建页面的合理选择。本表的目的是为了展示我的推荐是依据什么样的数据。

下列的简写符号是用于列标题:

  • NS6

  • Mozilla 0.6…0.9.4 和 Netscape 6.0…6.2.3

  • Old Moz

  • Mozilla 0.9.5 到 1.1 alpha 和 Mozilla 1.0

  • Moz & Safari & Opera 10 & HTML5

  • Mozilla 1.0.1, Mozilla 1.1 beta和更高版本, Firefox 到 Netscape 7, Safari 0.9 到 Safari 4.0 beta, Opera 10, Chrome, Konqueror 3.5, HTML5指定的行为

  • Opera 9.0

  • Opera 9.0…9.20

  • IE 8 & Opera 9.5

  • 无 X-UA-Compatible和兼容模式覆盖的默认IE8(该情况下“A”意味着IE8几乎标准模式)、 Opera 7.5…8.54 和 9.5…9.6

  • IE 7 & Opera 7.10

  • IE7、兼容模式且无X-UA-Compatible覆盖的IE8(这种情况下“A”意味IE7模式)和Opera 7.10…7.23

  • IE 6 & Opera 7.0

  • Windows IE 6 和 Opera 7.0…7.03

  • Mac IE 5

  • Mac IE 5.0…5.2.3

  • Konq 3.2

  • Konqueror 3.2.2…3.3 (也可能包括 3.1…3.2.1; 我尚未确定)

运行代码框


标签:doctype,内容,浏览器,Firefox,模式
0
投稿

猜你喜欢

  • 学习 YUI3 中的沙箱机制

    2010-04-12 12:52:00
  • 让验证码友好一点

    2007-10-20 13:45:00
  • XMLHTTP自动判断远程网页字符编码

    2007-12-28 13:41:00
  • 如何实现优惠打折?

    2010-06-03 10:27:00
  • 实例讲解实现SQL下的字符串拆分具体方法

    2008-12-09 14:55:00
  • asp中使用js的encodeURIComponent

    2008-10-13 09:19:00
  • 谈切图优化加速图片显示—淘宝实例

    2008-01-30 12:24:00
  • swfupload上传使用代码说明ASP版

    2011-11-27 09:34:32
  • 将多宿主计算机配置为SQL Server访问

    2011-01-04 16:17:00
  • SqlServer表死锁的解决方法分享

    2011-09-30 11:16:16
  • 提一个懒人需求——找遥控器的电视

    2009-03-23 18:16:00
  • ASP用户登录验证代码

    2008-05-15 12:49:00
  • 用户体验 保守的使用下拉菜单

    2008-01-15 20:00:00
  • YUI学习笔记(4)

    2009-03-10 18:25:00
  • Mootools 1.2教程(20)——选项卡效果(Tabs)

    2008-12-26 18:19:00
  • 在IE浏览器下面指定表单编码方式

    2009-10-02 16:47:00
  • JS限制textarea字数

    2009-09-28 14:41:00
  • ASP技巧:ASP中三个常用语句的使用技巧

    2008-10-16 10:56:00
  • 再谈 MySQL 数据库备份恢复和乱码问题

    2009-08-19 09:35:00
  • CSS实例教程:复合型CSS条状图表(上)

    2010-01-23 12:43:00
  • asp之家 网络编程 m.aspxhome.com