Validation 为什么使用框架集DTD会导致验证失败?

Validation 为什么使用框架集DTD会导致验证失败?,validation,xhtml,dtd,doctype,frameset,Validation,Xhtml,Dtd,Doctype,Frameset,我所做的工作是获取随机HTML文件,尽可能地将它们转换为XHTML,并用一些XML数据包装它们。DOCTYPE被剥离,因为生成的XML文件不是XHTML文档。但是,当从XML文件检索包装好的XHTML时,应该重新插入DOCTYPE 因为这些是随机的HTML文件,它们可以包含任何内容,但我更希望不必存储或确定原始DTD。我想我应该使用框架集DTD,因为它只是过渡DTD的超集,对所有内容都有效。但是,当对同一文档使用时,使用过渡DTD会通过,但使用框架集DTD会失败 我已将文件精简到最低限度,以便重

我所做的工作是获取随机HTML文件,尽可能地将它们转换为XHTML,并用一些XML数据包装它们。DOCTYPE被剥离,因为生成的XML文件不是XHTML文档。但是,当从XML文件检索包装好的XHTML时,应该重新插入DOCTYPE

因为这些是随机的HTML文件,它们可以包含任何内容,但我更希望不必存储或确定原始DTD。我想我应该使用框架集DTD,因为它只是过渡DTD的超集,对所有内容都有效。但是,当对同一文档使用时,使用过渡DTD会通过,但使用框架集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>

行动
我为什么要转向Linux?

以下是过渡版本:

<!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>

行动
我为什么要转向Linux?


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

框架集DTD不是过渡的“超集”。它是一种特殊的DTD,仅用于布局框架,而不用于布局内容(标签内部除外)。它只允许
作为
标记的子项

这是规格


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

正如Chetan所指出的,框架集DTD应该只在您需要框架的情况下使用,即使如此,我还是建议使用过渡DTD。如果你不依赖于框架,严格是一条路要走