2009-10-14 12 views
0

project Я работаю над случайными HTML-файлами, преобразует их в XHTML как можно лучше и обертывает их некоторыми метаданными XML. DOCTYPE лишен, так как полученный XML-файл не является документом XHTML. Однако при извлечении обернутого XHTML из файла XML DOCTYPE следует повторно вставить.Почему использование DTD Frameset приводит к сбою проверки?

Поскольку это случайные файлы HTML, они могут содержать любой контент, но я бы предпочел не хранить или не определять исходный DTD. Я решил, что должен использовать DTD Frameset, поскольку это был просто набор Transitional DTD и был бы действителен для всего контента. Однако при использовании W3C XHTML Validator с тем же документом использование Transitional DTD проходит, но с использованием DTD Frameset происходит сбой.

Я разделил документ до минимума, с помощью которого я могу воспроизвести проблему. Вот версия 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> 


Пожалуйста, объясните, почему это происходит, и как мне действовать.

ответ

1

Frameset DTD не является «надмножеством» переходного периода. Это специальный DTD, используемый только для раскладки кадров, а не контента (кроме тега <noframes>). Он позволяет только <head> и <frameset> в качестве детей <html> тегов.

Here - спецификация.

Если вы не знаете, что ваша страница может иметь рамки, придерживайтесь переходных или строгих DTD.

0

Как указал Четан, DTD Frameset следует использовать только в том случае, если вам нужны кадры, и даже тогда я бы рекомендовал вместо этого использовать Transitional. Если вы не полагаетесь на фреймы, Strict - это путь.