我工作的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>
请解释为什么会发生这种情况,以及我应该如何进行。
答案 0 :(得分:1)
框架集DTD不是过渡性的“超集”。它是一种特殊的DTD,仅用于布局帧,而不是内容(除了<noframes>
标签内)。它仅允许<head>
和<frameset>
作为<html>
标记的子项。
Here是规范。
除非您知道您的网页可能有框架,否则请坚持过渡或严格的DTD。
答案 1 :(得分:0)
正如Chetan所指出的,Frameset DTD只应该用于需要框架的情况,即便如此,我还是建议使用Transitional。如果您不依赖于框架,那么Strict就是您的选择。