就 Web 标准和页面验证而言,我知道 DOCTYPE 的用途(以及该行中的每个 url/标识符是什么),但我不确定它在 XML 文档的上下文中实际上“是什么”。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
    <title>My Page</title>
  </head>
  <body>
    <p>Hello</p>
  </body>
</html>

它是实际 XML 文档结构的一部分,还是某种类似注释的“提示”,被注释后被删除?

“!”的意义是什么。名字之前?这是否表示一种特殊类型的“元素”?他们叫什么?

我发布的示例是用于 Web 的 XHTML,但是 DOCTYPE 是否也用于通用 XML 文档?

有帮助吗?

解决方案

DOCTYPE 是从 SGML“继承”的(它应该指向解释如何解析文件的 DTD 文件),但是不言自明的 XML 语法和命名空间使其在很大程度上无关紧要。XML 中 DOCTYPE/DTD 的唯一真正用途是定义允许的命名实体(例如 &nbsp;).

XML 规范甚至允许“非验证”解析器完全忽略 DTD 文件(Web 浏览器使用此类解析器,除非您陷入了 text/html 陷阱,在这种情况下根本不使用 XML 解析器)。

DTD 是 对于验证来说相当差 (很难为多于一层的嵌套指定规则,无法指定超出少数预定义类型的属性类型)。Schema,RelaxNG 可以更加精确。

DTD 也不完全支持名称空间,这会导致荒谬的解决方法,例如 XHTMLplusMathMLplusSVG DOCTYPE.

在网络浏览器中,某些 DOCTYPE 具有理想的副作用: 触发符合标准的渲染模式. 。这更像是一种黑客行为,而不是预期的 DOCTYPE 用途。

  • 如果您使用真正的 XHTML (application/xhtml+xml – 根本无法在 IE 中打开的类型),那么就根本不要使用 DOCTYPE(这是 XHTML 5 的建议)。无论 DOCTYPE 是什么,XML 模式都会触发符合标准的渲染。

  • 如果您正在使用 text/html 模式,然后使用 <!DOCTYPE html>. 。这就是 HTML 5 DOCTYPE,它是最短的 DOCTYPE,可以在所有浏览器中触发最佳渲染效果。浏览器不会将 DOCTYPE 用于任何其他目的,因此您不会错过任何内容。

  • 如果您使用 XML 解析器(浏览器外部)处理 XHTML 文件,那么 不要忘记正确设置 DTD 目录,否则您的解析器可能会 攻击 w3.org 每次都尝试获取 DTD。如果您无法使用 DTD 目录,请在解析器中禁用“externals”或省略 DOCTYPE 并且不要使用命名实体(即使用 &#160; 而不是 &nbsp;)

其他提示

DOCTYPE是XML规范的一部分(请参阅相关小节此处)并且可以包含指向 DTD 的链接,<!>;内部<!> QUOT; DTD声明,或两者兼而有之。许多<!> quot; modern <!> quot;但是,XML的使用根本不使用DOCTYPE,正如前面提到的,XML Schema和RelaxNG都是指定文档语法的更强大的方法。请参阅此Tim Bray博客文章为了更多的背景。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top