2009-10-14 7 views
0

Le project Je travaille sur prend des fichiers HTML aléatoires, les convertit au mieux XHTML et les enveloppe avec des métadonnées XML. Le DOCTYPE est supprimé car le fichier XML résultant n'est pas un document XHTML. Toutefois, lors de la récupération du XHTML encapsulé à partir du fichier XML, le DOCTYPE doit être réinséré.Pourquoi l'utilisation de la DTD du jeu de cadres provoque-t-elle un échec de validation?

Parce que ce sont des fichiers HTML aléatoires ils pourraient contenir tout contenu, mais je préférerais ne pas avoir à stocker ou déterminer la DTD originale. J'ai pensé que je devrais le DDSet Frameset DTD car il était juste un surensemble de la DTD de transition et serait valable pour tout le contenu. Toutefois, lorsque vous utilisez le W3C XHTML Validator avec le même document, l'utilisation des passes de DTD transitoires, mais l'utilisation de la DTD de jeu de cadres échoue.

J'ai réduit le document au minimum avec lequel je peux reproduire le problème. Voici la version 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> 


Et voici la version de transition:

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


S'il vous plaît expliquer pourquoi cela se passe, et comment je dois procéder.

Répondre

1

La DTD de frameset n'est pas un 'surensemble' de transition. Il s'agit d'une DTD spéciale utilisée uniquement pour la mise en page des cadres et non du contenu (sauf à l'intérieur de l'étiquette <noframes>). Il permet seulement <head> et <frameset> comme les enfants de <html> tag.

Here est la spécification.

Sauf si vous savez que votre page peut contenir des images, respectez les DTD de transition ou strictes.

0

Comme Chetan a souligné, la DTD Frameset ne doit être utilisé dans le cas où vous avez besoin d'images, et même alors, je recommanderai à l'aide de transition à la place. Si vous ne comptez pas sur les cadres, Strict est la voie à suivre.

Questions connexes