用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
投稿

猜你喜欢

  • golang Gorm框架讲解

    2024-04-25 13:19:09
  • css网页下拉菜单制作方法(2):初步实现

    2007-02-03 11:39:00
  • 如何区分MySQL的innodb_flush_log_at_trx_commit和sync_binlog

    2024-01-19 19:38:30
  • 新Orcas语言特性-查询句法

    2010-07-16 12:58:00
  • Zabbix 2.4.5自带MySQL监控的配置使用教程

    2024-01-24 06:00:52
  • js图片随机显示技巧

    2007-08-19 20:20:00
  • js数组去重的11种方法

    2024-04-17 10:30:54
  • Django框架中方法的访问和查找

    2022-07-23 16:31:35
  • phpstorm断点调试方法图文详解

    2023-05-30 01:06:40
  • Pycharm中SQL语句提示SQL Dialect is Not Configured的解决

    2021-09-05 16:23:15
  • javascript轻松控制表格列样式的脚本代码

    2024-04-22 13:02:30
  • Python爬虫爬取杭州24时温度并展示操作示例

    2022-01-04 14:43:33
  • Keras 加载已经训练好的模型进行预测操作

    2021-07-04 15:15:10
  • Mysql的Table doesn't exist问题及解决

    2024-01-16 05:03:13
  • Django Admin中增加导出CSV功能过程解析

    2021-04-17 06:22:47
  • JavaScript获取URL汇总

    2024-02-24 10:40:07
  • 让sql2005运行在独立用户下出现 WMI 提供程序错误的解决方式

    2024-01-13 13:12:50
  • 你的like语句为什么没索引详解

    2024-01-13 14:16:18
  • python 实现倒计时功能(gui界面)

    2021-03-05 14:19:55
  • python中break、continue 、exit() 、pass终止循环的区别详解

    2023-03-08 15:59:52
  • asp之家 网络编程 m.aspxhome.com