Главная -> Статьи о HTML5 -> Частые вопросы о html5: синтаксис html5

Частые вопросы о html5: синтаксис html5

Положит ли HTML5 конец спорам вокруг представления XHTML как text/html?

Да. В отличие от HTML4 и XHTML1, выбор между HTML и XHTML зависит исключительно от выбора типа документа, а не DOCTYPE.

Какой будет DOCTYPE?

В HTML:

<!DOCTYPE html>

В XHTML DOCTYPE не используется. Тем не менее Вы можете использовать его если Вам хочется.

<!DOCTYPE html SYSTEM "about:legacy-compat">

Заметьте, что за исключением строки "about:legacy-compat", DOCTYPE в HTML стал нечувствительным к регистру букв. В XHTML же он чувствителен к регистру и должен принимать один из следующих видов: <!DOCTYPE HTML> или <!doctype html>.

Эти варианты были выбраны исходя из следующих критериев:

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

При каких условиях следует использовать DOCTYPE в XHTML?

Вообще говоря использование DOCTYPE в XHTML не обязательно. Тем не менее вот следующие случаи, когда DOCTYPE лучше прописать и в XHTML документах:

  1. Документ разработан с учетом двух языков и может быть выполнен как в HTML так и в XHTML.
  2. Если Вы хотите объявить ссылки на сущности (entity) в документе.  Обратите внимание, что большинство браузеров считывают только внутреннюю часть документа и не обращают внимания на внешние сущности (entity).
  3. Если Вы хотите использовать DTD (Document Type Definition - Выбор типа документа) по своему усмотрению при валидации документа.

Как будут обрабатываться документы с версией языка ниже HTML5?

Все документы с типом данных text/html (включая документы с (или без) DOCTYPE версий HTML2.0, HTML3.2, HTML4, XHTML1) будут обрабатываться тем же парсером что и HTML5. Этот алгоритм полностью соответствует тому алгоритму, который используется для обработки документов сейчас. Кроме того, использование одного алгоритма хорошо повлияет на безопасность, ремонтопригодность и поможет разработчикам проще находить ошибки в коде.

Если у меня нет типа документа (DTD), как мне проверить мою страницу на наличие ошибок?

С помощью HTML5 валидатора

Что такое HTML-сериализация?

Сериализация HTML относится к синтаксису HTML документа описанному в спецификации HTML5. Такой синтаксис был выбран по аналогии синтаксису SGML ранних версий HTML и XML.

Любой документ, MIME которого определен как text/html рассматривается как HTML документ и должен быть обработан с помощью HTML парсера.

Что такое XML (XHTML)-сериализация?

Сериализация XML относится к синтаксису определённому в XML 1.0 и пространствах имен в XML 1.0. Ресурс, MIME которого определен как application/xhtml+xml или application/xml является XML документом, а если в нём используются пространства имен HTML, то документ определяется как XHTML. Если корневой элемент в пространстве имен HTML - тег <html>, то документ определяется как XHTML.

Какой тип MIME использует HTML5?

HTML документ должен использовать MIME "text/html".

XHTML документ должен использовать XML тип MIME такой как "application/xhtml+xml" или "application/xml". В отличие от XHTML1, тип MIME XHTML5 не может быть определен как "text/html".

Использование некорректного типа MIME в XHTML вызовет проблему того, что документ будет обработан по правилам HTML, а не XHTML. Другими словами, валидатор увидит "кашу" из тегов. Использование MIME типа XML - единственный способ убедиться, что обозреватель обработает документ как XML.

Как правильно закрывать пустые теги - с помощью /> или >?

Пустые элементы в HTML (например теги <br>, <img> или <input>) не требуют слеша перед закрывающейся скобкой, т.е. вместо <br /> Вы можете писать <br>. Все так же как и в HTML4. Тем не менее, из-за широкого распространения XHTML1, появилось огромное количество страниц, использующих слеш перед закрывающейся скобкой. И чтобы добиться лучшего перехода с XHTML1 на HTML5 - использование слеша было разрешено в последнем.

HTML5 также вводит возможность встраивать элементы MathML на страницу. Внутри тега <math> все элементы закрываются слешем как в XML.

Я очень хорошо слежу за синтаксисом в моём HTML документе, может ли он быть обработан с помощью XML парсера?

Да. Для этого прочтите руководство HTML или XHTML и руководство по созданию HTML документов совместимых с XHTML.

Следует заметить, что Вам нужно очень аккуратно следить за синтаксисом документа. Гораздо проще будет использовать перекодировщик из HTML в XML. Благодаря ему Вы сможете использовать нормальный HTML и возможности XML.

Как объявляются пространства имен?

Чтобы объявить пространство имен в XHTML нужно написать следующую строчку:

<html xmlns="http://www.w3.org/1999/xhtml">

В HTML атрибут xmlns разрешен для всех элементов, но только если его значение равно "http://www.w3.org/1999/xhtml". Эта возможность не дает ничего нового - она только упрощает переход с XHTML1. Вообще говоря в HTML пока нет поддержки пространств имен.

Будет ли введена поддержка пространств имен в HTML?

HTML5 был определен в терминах DOM и в процессе обработки документа типа text/html, все HTML элементы будут автоматически отправляться в пространство имен HTML http://www.w3.org/1999/xhtml. Тем не менее, в отличие от XHTML, в сериализации HTML не предусмотрены пространства имен. Другими словами, Вам не нужно объявлять пространство имен в синтаксисе HTML документа как Вы делаете это в XHTML документах - Вам только разрешено использовать атрибут xmlns  в тегах HTML (читайте предыдущий вопрос).

В добавок ко всему сказанному, синтаксис HTML обеспечивает способ подключения MathML и SVG в документ. Элементы, находящиеся внутри тегов <math> и <svg>, при обработке будут автоматически пересылаться парсером в пространства имен MathML и SVG. Вам не нужно явно указывать пространство имен, но в любом случае Вы можете использовать атрибут xmlns.

В заключение повторимся, что пока HTML5 не поддерживает XML синтаксиса для объявления пространств имен, все же есть инструменты для подключения элементов MathML и SVG. Кроме них Вы можете явно указать xmlns атрибут у любого тега, как это разрешает модель DOM.

Как мне указать кодировку своей страницы?

Для HTML документов строго рекомендуется указывать кодировку в HTTP заголовке Content-Type. Если же у Вас нет доступа к настройкам сервера, то можно использовать следующих meta тег:

<meta charset="UTF-8">

Следующие ограничения накладываются на объявление кодировки документа:

  • Имя кодировки символов должно быть тем же что используется для сериализации документа.
  • Значение должно быть правильным названием кодировки.
  • Объявление кодировки символов должна быть сериализована без использования ссылок на символы.
  • Meta элемент с описание кодировки символов должен быть описан в первых 512 байтах документа. Очень хорошо, если описание кодировки является первых наследником тега head, т.е. находится так близко к началу документа, насколько это возможно.

Заметьте, что этот meta тег отличается от meta тега в HTML4, хотя он поддерживается большинством браузеров.

Для документов, которые будут обрабатываться как HTML так и XHTML парсерами, можно использовать этот же meta тег, но только если кодировка - UTF-8.

Для обеспечения более простого перехода с HTML4 на HTML5, Вы можете использовать следующую конструкцию:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

В XHTML документах кодировка символов определяется так же как в XML. Никогда не используйте meta теги для объявления кодировки XHTML документа. Лучше всего использовать HTTP заголовок Content-Type.

<?xml version="1.0" encoding="UTF-8"?>

В противном случае, используйте UTF-8 или UTF-16. Рекомендуем Вам использовать UTF-8.

Какие отличия между HTML и XHTML?

Прочтите список различий на вики странице whatwg.

Как лучше всего писать документы, совместимые как с HTML DOM, так и с XHTML DOM?

Несмотря на то, что WHATWG пытается сделать так, чтобы HTML и XHTML производили идентичные DOM, все же между ними остались некоторые различия:

Чувствительность к регистру:

  • По возможности, избегайте конструкции Element.tagName и Node.nodeName (или используйте функцию toLowerCase()).

Пространства имен:

  • Указывайте явно пространство имен при создании элемента: Document.createElementNS(ns, elementName).

Почему в HTML5 допускается "tag soup"?

На самом деле это не так. Это недоразумение берет начало от путаницы между требованиями соответствия между документами и требованиями пользовательских обозревателей.

Для того, чтобы поддерживать устаревший код, спецификация должна указывать каким образом обрабатывать весь HTML. Кроме того спецификация должна описывать как обозреватель должен вести себя при обработке ошибочного кода.

Например, спецификация описывает алгоритм действий, если в коде есть синтаксическая ошибка, которая нарушает модель DOM.