2009-10-14 93 views
0

我工作的project需要隨機的HTML文件,儘可能地將它們轉換爲XHTML,並用一些XML metdata包裝它們。由於生成的XML文件不是XHTML文檔,DOCTYPE被剝離出來。但是,當從XML文件檢索包裝的XHTML時,應該重新插入DOCTYPE。爲什麼使用Frameset DTD會導致驗證失敗?

因爲這些是隨機的HTML文件,它們可能包含任何內容,但我寧願不必存儲或確定原始的DTD。我認爲我應該將Frameset DTD作爲Transitional DTD的超集,並且對所有內容都有效。但是,在同一文檔中使用W3C XHTML Validator時,使用過渡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> 


請解釋爲什麼發生這種情況,我應該如何着手。

回答

1

框架集DTD不是過渡的「超集」。它是一種專門用於佈局幀的特殊DTD,不包含內容(<noframes>標籤內除外)。它只允許<head><frameset>作爲<html>標記的子代。

Here是規範。

除非你知道你的頁面可以有框架,否則堅持過渡或嚴格的DTD。

0

正如Chetan指出的那樣,Frameset DTD只能用於需要幀的情況,即使如此,我還是會建議使用Transitional。如果你不依賴框架,嚴格是要走的路。

相關問題