【问题标题】:Why does the use of the Frameset DTD cause a validation failure?为什么使用 Frameset DTD 会导致验证失败?
【发布时间】:2010-12-06 21:04:15
【问题描述】:

我工作的project 采用随机HTML 文件,尽可能将它们转换为XHTML,并用一些XML 元数据包装它们。由于生成的 XML 文件不是 XHTML 文档,因此删除了 DOCTYPE。但是,当从 XML 文件中检索包装的 XHTML 时,应该重新插入 DOCTYPE。

因为这些是随机的 HTML 文件,它们可以包含任何内容,但我宁愿不必存储或确定原始 DTD。我认为我应该使用 Frameset DTD,因为它只是 Transitional DTD 的超集,并且对所有内容都有效。但是,当将W3C XHTML Validator 与同一文档一起使用时,使用Transitional DTD 会通过但使用Frameset DTD 会失败。

我已将文档精简到可以重现问题的最低限度。这是框架集版本:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/1999/xhtml">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Make The Move</title>
</head>

<body style="background: none;">
    <h3 id="why">Why should I move to Linux?</h3>
</body>

</html>


这是过渡版本:

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

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Make The Move</title>
</head>

<body style="background: none;">
    <h3 id="why">Why should I move to Linux?</h3>
</body>

</html>


请解释为什么会发生这种情况,以及我应该如何进行。

【问题讨论】:

    标签: validation xhtml dtd doctype frameset


    【解决方案1】:

    正如 Chetan 所指出的,Frameset DTD 应该只在您需要框架的情况下使用,即便如此,我还是建议使用 Transitional。如果您不依赖框架,那么 Strict 就是您的最佳选择。

    【讨论】:

      【解决方案2】:

      Frameset DTD 不是过渡的“超集”。它是一种特殊的 DTD,仅用于布局框架,而不是内容(&lt;noframes&gt; 标签内除外)。它只允许&lt;head&gt;&lt;frameset&gt; 作为&lt;html&gt; 标签的子标签。

      Here 是规范。

      除非您知道您的页面可能有框架,否则请坚持过渡或严格的 DTD。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多