#html #validation
#HTML #проверка
Вопрос:
Средство проверки HTML, которое я нашел сегодня — http://html5.validator.nu / — говорит, что я неправильно использую <noscript>
элемент. Мой исходный код XHTML выглядит следующим образом:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<body>
<div id="head">
<noscript>
<p>JavaScript is disabled.</p>
</noscript>
...
Сообщение об ошибке от средства проверки является следующим:
Ошибка: элемент XHTML noscript не разрешен в качестве дочернего элемента элемента XHTML div в этом контексте. (Подавление дальнейших ошибок из этого поддерева.)
Контексты, в которых может использоваться элемент noscript:
- В элементе head HTML-документа, если нет элементов noscript-предка.
- Где в HTML-документах ожидается формулировка содержимого, если нет элементов noscript-предка.
Модель содержимого для элемента div:
- Содержимое потока.
Теперь я перешел к документации Mozilla и попытался понять, что это значит. Я нашел некоторую информацию о категориях контента, содержимом потока, формулировке содержимого, о том, какие элементы принадлежат к каждой категории (что бы точно ни означало «принадлежат») и как <noscript>
элемент может быть использован. (https://developer.mozilla.org/en/HTML/Element/noscript )
Теперь я знаю это: <div>
должен содержать содержимое потока. <noscript>
должно возникать при формулировке содержимого. Это, очевидно, не соответствует. Как я могу этим управлять? Однако многие элементы относятся к обеим категориям — flow и phrasing. Они, похоже, не являются дизъюнктными множествами, поэтому некоторые не могут решить, или я не понимаю.
Как спецификация HTML намеревается решить эту проблему?
Комментарии:
1. Я добавил элементы doctype и html, чтобы уточнить, что моя страница является XHTML, если это поможет в ее анализе. Я еще не играл с другими типами документов. Я уже некоторое время использую XHTML 1.1, но в будущем подумываю об использовании вместо него HTML5.
Ответ №1:
Вам не следует использовать средство проверки HTML5 для проверки вашего документа XHTML 1.1.
Спецификация HTML5 говорит о noscript
элементе:
noscript
Элемент не должен использоваться в XML-документах.
Таким образом, noscript
inside div
не допускается в XHTML5, но это разрешено в XHTML 1.1.
Ответ №2:
Вы не можете использовать «noscript» в документе XHTML / XML, потому что это отключает анализатор содержимого «noscript», а вы не можете сделать это в XML. Анализатор не может быть временно отключен.
Например, CSE HTML Validator генерирует это сообщение для документов XHTML: В документах XHTML не должен использоваться элемент «noscript». Это потому, что способ, которым «noscript» работает путем «отключения» синтаксического анализатора при включении сценариев, что невозможно сделать в XML. Кроме того, элемент «noscript» явно не разрешен в HTML5 по этой причине.
Если вы хотите правильно использовать «noscript», то вам нужно изменить тип документа на HTML5 (рекомендуется) или HTML4 вместо XHTML.
Комментарии:
1. Как ваша последняя рекомендация согласуется с окончанием вашей цитаты: «Кроме того, элемент «noscript» явно не разрешен в HTML5 по этой причине».?
Ответ №3:
Используйте официальный валидатор для проверки вашего HTML. Следующий код прошел проверку на отлично для меня:
<!DOCTYPE html>
<html>
<head>
<title>I AM YOUR DOCUMENT TITLE REPLACE ME</title>
</head>
<body>
<div id="head">
<noscript>
<p>JavaScript is disabled.</p>
</noscript>
</div>
</body>
</html>
РЕДАКТИРОВАТЬ: Интересно, что средство проверки W3C утверждает, что анализатор основан на средстве проверки по предоставленной вами ссылке.
‘Загруженный документ был успешно проверен как HTML5. Это означает, что рассматриваемый ресурс идентифицировал себя как «HTML5» и что мы успешно выполнили его формальную проверку. Реализации синтаксического анализатора, которые мы использовали для этой проверки, основаны на validator.nu (HTML5).’
Возможно, средство проверки в http://validator.nu является более старой версией. Редактировать редактировать: Нет, там тоже все нормально проверяется. Проверено как HTML5 и XHTML 1.0 Strict.
Комментарии:
1. Используйте документ HTML5. Будет выдана ошибка:
XHTML element noscript not allowed as child of XHTML element div in this context.
2.@Rob W: Я сделал, ошибок не было. Позвольте мне попробовать еще раз. редактировать ‘Этот документ был успешно проверен как HTML5!’
3. Обратите внимание, на плакате указано «XHTML». Возможно, они не используют HTML5 в качестве doctype и в XHTML 1/1.1 более строгий синтаксис, чем в HTML5?
4. @AndyE Я протестировал и подтвердил ошибку OPs. Однако я также могу проанализировать ваш тестовый пример как допустимый.