代码之家  ›  专栏  ›  技术社区  ›  Reto Meier

doctype在常规XML中的角色

  •  0
  • Reto Meier  · 技术社区  · 15 年前

    就Web标准和页面验证而言,我知道doctype的用途(以及行中的每个url/identifier是什么),但我不确定在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文档结构的一部分,还是像“提示”这样的注释被记录然后剥离?

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

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

    2 回复  |  直到 15 年前
        1
  •  6
  •   Kornel    15 年前

    doctype是从sgml“继承”来的(它应该指向解释如何解析文件的DTD文件),但是自解释的XML语法和名称空间使得它在很大程度上不相关。XML中doctype/dtd的唯一真正用途是定义允许的命名实体(例如 &nbsp; )

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

    DTD是 quite poor for purpose of validation (很难为多个嵌套级别指定规则,无法指定超出几个预定义类型的属性类型)。模式,放松可以更精确。

    DTD也不完全支持名称空间,这导致了类似于 XHTMLplusMathMLplusSVG DOCTYPE .

    在Web浏览器中,某些文档类型具有 triggering standards-compliant rendering mode . 这是一个比预期使用的doctypes更多的黑客。

    • 如果您使用的是真正的XHTML( application/xhtml+xml _“在IE中根本不打开的那个),然后根本不使用doctype(这是XHTML 5的建议)。XML模式将触发符合标准的呈现,而不管doctype是什么。

    • 如果你在用 文本/ HTML 模式,然后使用 <!DOCTYPE html> . 这是HTML5doctype,它是一个最短的类型,能够在所有浏览器中触发尽可能好的渲染。浏览器不将doctype用于任何其他用途,因此您不会遗漏任何内容。

    • 如果使用XML解析器(外部浏览器)处理XHTML文件,那么 拜托 不要忘记正确设置DTD目录,否则您的解析器可能 DoS-ing w3.org 每次都试图获取DTD。如果不能使用DTD目录,那么在解析器中禁用“externals”,或者省略doctype,而不使用命名实体(即使用 &#160; 而不是 &nbsp; )

        2
  •  2
  •   Greg Campbell    15 年前

    doctype是XML规范的一部分(请参见相关小节 here )并且可以包含到 DTD “内部”DTD声明,或同时声明两者。然而,XML的许多“现代”用法根本不使用doctype,正如Pornel提到的,XML模式和松弛都是指定文档语法的更强大的方法。见 this Tim Bray blog post 为了更多的背景。