Почему использование Frameset DTD вызывает сбой проверки?
-
21-09-2019 - |
Вопрос
А проект Я работаю над тем, что принимает случайные 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 должен использоваться только в случае, если вам понадобятся кадры, и даже тогда я бы рекомендовал использовать переход. Если вы не полагаетесь на рамки, строго - это путь.