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

StackOverflow https://stackoverflow.com/questions/1569617

Вопрос

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

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


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

Это было полезно?

Решение

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top