9

许多 doctype 使用 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 文件位于实时网址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版本(哪个浏览器或验证器的版本?),这是 处理文档。

例如,指定文档的 doctype 允许您使用诸如标记验证器之类的工具来检查 (X)HTML 的语法。如果这些工具不知道您使用的是哪种文档,它们将无法工作。

但最重要的是,对于大多数浏览器系列来说,一个 doctype 声明会使很多猜测变得不必要,从而触发“标准”渲染模式。

4

3 回答 3

14

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

理论上,doctype 用于说明文档使用的标准版本。浏览器通常不使用此信息,除了在怪癖和标准模式之间切换<!DOCTYPE html>为此,所有现代浏览器都接受最简单的文档类型,没有 URL 或版本信息;正因为如此,HTML5采用了这个作为推荐的文档类型。

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

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

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

于 2009-12-31T19:36:49.167 回答
2

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

于 2009-12-31T19:37:59.133 回答
0

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

于 2009-12-31T19:39:47.650 回答