为什么使用Frameset DTD会导致验证失败?

时间:2009-10-14 23:52:56

标签: validation xhtml dtd doctype frameset

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

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

我已将文档剥离到最低限度,以便我可以重现问题。这是Frameset版本:

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


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

2 个答案:

答案 0 :(得分:1)

框架集DTD不是过渡性的“超集”。它是一种特殊的DTD,仅用于布局帧,而不是内容(除了<noframes>标签内)。它仅允许<head><frameset>作为<html>标记的子项。

Here是规范。

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

答案 1 :(得分:0)

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