【问题标题】:Does every html page with doctype need internet connection to render page properly?每个带有 doctype 的 html 页面都需要互联网连接才能正确呈现页面吗?
【发布时间】:2010-12-31 12:06:25
【问题描述】:

许多文档类型使用 url 链接

喜欢这个

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

而且这个 dtd 文件在 live url http://www.w3.org/TR/html4/strict.dtd 上

这个在线直播 dtd 有什么用,以及任何页面(使用这个 doctype)如何根据这个 doctype 正确呈现而无需访问这个 url(我的意思是如果互联网访问不可用?)

更新:我从维基百科http://en.wikipedia.org/wiki/System_identifier找到这个信息

在 HTML 和 XML 中,系统标识符 是一个无片段的 URI 引用。它 通常出现在文档类型中 宣言。在这种情况下,它是 旨在识别文档类型 它专门用于一个 应用程序,而公共 标识符是用来标识一个 可能跨越超过 一个应用程序。

在以下示例中,系统 标识符是包含的文本 引号内:

更新 2: 仅用于验证器吗? Dreamweaver 等软件如何提供离线验证?

更新 3: 我从 w3c 网站http://www.w3.org/QA/Tips/Doctype找到此信息

为什么要指定文档类型?因为它 定义您的 (X)HTML 版本 文档实际上是使用 (version 适用于什么浏览器或验证器?),以及 这是一个关键的部分 某些工具所需的信息 (哪些工具?除了验证器还有其他工具吗?)处理文档。

例如,指定文档类型 您的文档允许您使用工具 例如要检查的标记验证器 (X)HTML 的语法。此类工具 如果他们不这样做,将无法工作 知道你是什么类型的文件 使用。

但最重要的是 对于大多数浏览器系列,一个 doctype 声明会做很多 猜测是不必要的,因此会 触发“标准”渲染模式。

【问题讨论】:

  • 我希望 url 并没有真正使用,但它是 doctype 定义的一部分,所以它应该在那里。但是,如果没有互联网连接,它仍然可以正常工作。
  • 我的回答是否还没有解决您在更新 3 中添加的问题?浏览器不关心,除了用于怪癖/标准模式切换的特定文档类型。验证器通常会关心,但通常不会下载 DTD。其他工具可能关心也可能不关心;您可以通过询问相关工具获得更好的答案,因为没有万能的答案。

标签: html xhtml w3c doctype


【解决方案1】:

不,没有浏览器实际获取或验证文档类型。请参阅DTDs Don't Work on the Web,了解为什么获取和验证 DTD 是一个坏主意。

理论上,doctype 用于说明文档使用的标准版本。除了switch between quirks and standards mode,浏览器一般不会使用这些信息。所有现代浏览器都接受最简单的文档类型,没有 URL 或版本信息,&lt;!DOCTYPE html&gt;,用于此目的;因此,HTML5 已将其作为推荐的文档类型。

验证器有时使用此信息来判断要验证的 DTD,但嵌入在文档中的 DTD 实际上并不是指定验证信息的好方法。针对文档中引用的 DTD 进行验证的问题在于,该文档的使用者并不真正关心文档是否自洽,而是它是否遵循消费者知道如何可靠解释的模式。相反,通常最好使用更强大的架构语言(如 RELAX NG)针对外部架构进行验证。

当验证器使用此信息时,他们经常将 URI 仅用作 标识符,而不用作 定位器。这意味着验证器已经知道所有常见的 HTML 文档类型,并使用这些知识进行验证,而不是从引用的 URI 下载。这部分是为了避免每次都必须下载 DTD 的问题,也因为 DTD 实际上并没有指定足够的信息来提供非常好的验证和错误消息,所以验证器的某些部分可能在自定义代码中指定或更强大的模式语言。有关详细信息,请参阅 Henri Sivonen's thesis 他对 validator.nu HTML5 一致性检查器的实现。

某些验证器也可能会下载然后缓存 DTD,因此它们需要在线一次才能下载它,但稍后会从缓存的版本开始工作。

【讨论】:

  • 但是如果 xhtml 文件具有此系统标识符,那么任何没有 Internet 连接的浏览器如何将怪癖更改为严格模式
  • 浏览器实际上并没有加载引用的 DTD 以便在怪癖和标准模式之间切换;他们只是对&lt;!DOCTYPE ...&gt; 声明进行字符串匹配。没有(流行的、现代的)浏览器会真正加载引用的 DTD。大多数验证器也没有。他们只是将其用作标识符。请注意,我的答案中第二个链接中列出的许多文档类型甚至都没有 URI,它们只是使用 FPI(正式的公共标识符 en.wikipedia.org/wiki/Formal_Public_Identifier),例如“-//W3C//DTD HTML 4.01//EN”。
  • 使用 systemId 作为 quirks 模式指示符是一种浏览器 hack,它与 systemId 定位 DTD 外部子集的正确目的无关。浏览器之所以选择执行此检查,是因为错误的 systemId 是需要怪癖的人,但 systemId 本身并没有什么神奇之处。
【解决方案2】:

URI 用于唯一标识文档类型 - 它不用于检索,任何浏览器(或其他软件)都不应依赖该网址中存在的文档。

【讨论】:

  • 它实际上更像是一个 URI 而不是 URL。它的目的是识别文档类型——这也有助于实际定位它是偶然的。
  • 它非常适合检索。包含外部实体的解析器,例如验证解析器(浏览器不是)将需要 DTD 外部子集;如果它没有本地副本,则必须将系统 ID 取消引用为 URI。不过,您希望大多数工具都具有可通过其公共 ID 访问的知名 HTML DTD 的本地副本。
  • 它可能意味着用于检索,但这并不意味着依赖它是一个好主意。有关原因,请参阅 RSS 0.91 惨败。如果您的应用程序由于用户离线、托管 DTD 的服务器离线或存在某种连接问题而无法运行,那么您的应用程序就会损坏。外部实体在 SGML、XML 或 HTML 中都是一个坏主意,这就是浏览器做出正确决定并且不检索外部 DTD 的原因。再次,请参阅hsivonen.iki.fi/no-dtd
【解决方案3】:

我自己也曾对此感到疑惑。但是如果你有自己的 HTTP 服务器,很容易证明它没关系。只需将电缆拉到外部世界,看看您是否仍然可以打开服务器上的页面。

【讨论】:

  • 见鬼,只需拉下电缆并查看硬盘上保存的 HTML 页面。
  • 我们不需要任何服务器来证明只是一个 html 文件
  • 取决于您对浏览器对本地文件的行为与从网络上下载的文件的行为相同的信任程度。
猜你喜欢
  • 1970-01-01
  • 2021-09-09
  • 2017-10-16
  • 2023-03-10
  • 2018-08-23
  • 2012-01-27
  • 1970-01-01
  • 2017-11-17
  • 1970-01-01
相关资源
最近更新 更多