Почему использование DTD набора фреймов вызывает сбой проверки?

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

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


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


person jwaddell    schedule 14.10.2009    source источник


Ответы (2)


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

Здесь это спецификация.

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

person Chetan S    schedule 15.10.2009

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

person arturopuente    schedule 15.10.2009