HTML в профилях/Синтаксис

Спецификация HTML5 определяет требования к документам HTML и к пользовательским агентам на уровне объектной модели документа (ОМД; англ. Document Object Model, DOM.) Для выражения модели конкретного документа могут быть использованы различные представления, причем два таких представления — HTML и XHTML — определены непосредственно спецификацией.[1]

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

Пример документа

править

Ниже мы рассмотрим некоторые аспекты способов записи документов HTML на примере конкретного простого документа, приводимого ниже в обоих представлениях (HTML, XHTML.)

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru">
<title >Привет, мир!</title>
<p >Это &mdash; пример документа HTML5.

<html xmlns="http://www.w3.org/1999/xhtml" lang="ru">
  <head>
    <title >Привет, мир!</title>
  </head>
  <body>
    <p >Это &#8212; пример документа HTML5.</p>
  </body>
</html>

Объектная модель документа

править

Оба варианта выше являются действительными (англ. valid) представлениями одного и того же (с точностью до незначимых пробельных символов) документа HTML5, модель которого приведена на схеме ниже. (Над чертой — имя дочернего элемента, или @ для блока атрибутов.)

html
@

xmlns="http://www.w3.org/1999/xhtml"
lang="ru"



head
title

Привет, мир!





body
p

Это — пример документа HTML5.





Спецификация HTML5 требует[2] наличия в начале HTML-представления формы <!DOCTYPE html> (в одном из нескольких вариантов.) Эта форма препятствует использованию реализациями HTML режимов чтения документа, предшествующих HTML4, и не несет иной смысловой нагрузки.

При использовании XHTML-представления, эта форма допускается (в качестве обычного для XML объявления типа документа[3]), но не является необходимой с точки зрения HTML5.[4]

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

править

Документ XML может, в общем случае, содержать элементы, определяемые различными спецификациями (HTML5, SVG, XLink, etc.) Для различения элементов, относящихся к различным форматам, но имеющих одинаковые имена, XML предусматривает механизм пространств имен.[5]

Для элементов HTML5, спецификация предусматривает пространство имен http://www.w3.org/1999/xhtml.[6]

В случае документов в HTML-представлении — кроме случаев включения в документ формул MathML или изображений SVG, — механизм пространств имен не используется. Атрибут xmlns при этом допускается (в указанном значении), но не несет смысловой нагрузки. В примере выше этот атрибут был использован лишь чтобы обеспечить идентичность объектной модели документа таковой для XHTML-варианта.

Необязательные теги

править

Процедура разбора HTML позволяет — в строго определенных случаях — опускать закрывающие (например, для элемента p) и открывающие (head, body) теги.[7] Подчеркнем, что оба представления выше включают обязательные для HTML5 элементы head и body — несмотря на отсутствие в HTML-варианте соответствующих открывающих или закрывающих тегов.

Напротив, XML требует явной разметки для всех без исключения элементов.

В примере выше, открывающий тег элемента html в HTML-представлении также мог бы быть опущен, если бы не использовался для определения (через атрибут lang) языка документа.[8]

Именованные символы-ссылки

править

Частью синтаксиса HTML являются 2231 именованная символ-ссылка (англ. named character reference), кодирующая 1511 уникальных символов и последовательностей Unicode,[9] включая использованное в примере (и широко применяемое в русскоязычной типографике) эм-тире («—», &mdash;.)[10]

С другой стороны, XML (в отсутствие определения типа документа, или DTD) определяет лишь пять подобных конструкций (amp, lt, gt, apos, quot.)[11]

Поскольку спецификация не регламентирует использования какого-либо конкретного DTD для XHTML-представления документов HTML5,[4] в примере выше для эм-тире использована имеющая тот же смысл допускаемая XML числовая символ-ссылка (англ. numeric character reference) — &#8212;.[12]

Более формальное определение

править

Как для HTML-, так и для XHTML-представления, основными особыми (сигнальными) символами являются следующие два:

Кроме того, в зависимости от контекста, особым смыслом могут также наделяться символы >, ", '.

Ниже мы рассмотрим способы записи упомянутых единиц разметки более подробно.

Теги обозначают границы элементов, а равно и несут их атрибуты. В рассматриваемых представлениях используются теги следующих видов.[13][14]

Открывающий тег

Состоит из знака <; имени («типа») элемента; предваряемых одним или более пробельным символом необязательных атрибутов; необязательных пробельных символов; и знака >.

Пустой тег

Состоит из знака <; имени («типа») открываемого элемента; предваряемых одним или более пробельным символом необязательных атрибутов; необязательных пробельных символов; и знаков />.

NB: синтаксис HTML не предусматривает тегов данного вида. Однако, допускается запись в данной форме открывающих тегов пустых элементов.[15]

Закрывающий тег

Состоит из знаков </; имени («типа») закрываемого элемента; необязательных пробельных символов; и знака >.

Запись элементов

править

Общая форма записи элемента — ⟨открывающий тег⟩​⟨необязательное содержание⟩​⟨закрывающий тег⟩. В содержании могут, в свою очередь, находится другие элементы, например:

  • <section ><h3 >Пример заголовка</h3><p >Пример текста первого абзаца раздела.</p></section>раздел (англ. section), состоящий из заголовка третьего уровня (h3, от англ. heading) и единственного абзаца (p; от англ. paragraph);
  • <section><h3>Пример заголовка</h3><p>Пример текста первого абзаца раздела.</section> — то же, но опуская необязательный в HTML закрывающий тег элемента p (как последний в родительском элементе, отличном от a) и необязательные пробелы в открывающих тегах.

В HTML-представлении, ряд элементов считаются пустыми (англ. void) и не допускают использования закрывающего тега. Для их записи, однако, допустимо использовать совместимую с XML форму <имя /> открывающего тега (возможно — с включением атрибутов.)[15]

В представлении XHTML (как и в XML в целом), любой элемент, лишенный содержания, может быть записан как в форме особого пустого тега, так и в форме открывающего тега, за которым сразу же следует закрывающий.[14]

Пустые элементы HTML
  • area
  • base
  • br
  • col
  • embed
  • hr
  • img
  • input
  • keygen
  • link
  • meta
  • param
  • source
  • track
  • wbr

Атрибуты

править

В обоих представлениях, атрибуты могут быть записаны в виде разделенных пробельными символами пар имя='значение' или имя="значение", где значение не содержит буквальных символов ' и ", соответственно. (Эти символы, однако, могут быть включены в значение атрибута как символы-ссылки &apos; и &quot;.)

Кроме того, HTML-представление допускает использование необязательных пробельных символов вокруг знака =, а также следующих форм:

  • имя=значение — если значение не содержит пробелов и символов >, ', ";
  • имя — если значением атрибута является пустая строка.

Комментарии

править

Для комментариев предусмотрена форма <!-- комментарий -->, причем комментарий не должен включать -- в качестве подстроки.

Если комментарий не начинается с символа -, пробел после <!-- не является необходимым. Совершенно аналогично, если комментарий не заканчивается -, не является необходимым пробел перед -->.

Спецификация HTML5 не устанавливает никаких правил по интерпретации содержимого комментариев, однако не существует и запрета для программ, обрабатывающих HTML, наделять определенным образом оформленные комментарии особым смыслом.

Объявление типа документа

править

Из соображений совместимости (в том числе с построенным как приложение SGML языком HTML4), спецификация HTML5 подробно описывает процедуру разбора формы DOCTYPE объявления типа документа.[16]

Тем не менее, рекомендованой для документов HTML5 в представлении HTML является исключительно форма <!DOCTYPE html>.[2] Для использования формирующими HTML-вывод программами, не способными сформировать такое объявление, допускаются также следующие формы:

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

Кроме того, следующие формы (с точностью до незначимых пробелов и взаимозаменяемости парных ' и "), регламентируемые предыдущими версиями спецификаций HTML и XHTML, также допускаются в документах HTML5, не лишая их действительности.

  • <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN">
  • <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN">
  • <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  • <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >
  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >

В представлении XHTML, применение формы DOCTYPE полностью определяется спецификацией XML.[3]

Совместимое представление

править

Благодаря ряду положений спецификации HTML5, существует возможность записывать определенный класс документов HTML в форме, которая одновременно удовлетворяет требованиям как к представлению HTML, так и к представлению XHTML.

Такое «совместимое» представление определяется набором необходимых условий ниже, обусловленных, в основном, небольшими различиями в интерпретации схожих конструкций этих представлений.

  1. В начале представления документа используется форма <!DOCTYPE html>. (Требование и ограничение HTML.)
  2. Корневой элемент html дополняется атрибутом xmlns="http://www.w3.org/1999/xhtml". Все элементы HTML явно отнесены к этому пространству имен.
  3. Определение и использование префиксов пространств имен (вида: <html:p xmlns:html="http://www.w3.org/1999/xhtml" >Привет!</html:p>) не допускается. Включаемые в HTML документы MathML и SVG используют соответствующие значения атрибута xmlns. (Ограничение HTML.)
  4. Псевдоэлемент noscript не допускается как «невозможный» в документах XML. (Ограничение XML.)
  5. Элементы style, iframe, script допускаются лишь если не содержат основных особых символов XML (&, <.)
  6. Все пустые (англ. void) элементы записываются одним тегом с обязательным /, подобно: <base href="http://example.com/" />.
  7. Для всех прочих элементов используются явные открывающий и закрывающий теги, — даже если элемент лишен содержимого. Подобно: <div id="example-id" ></div>.
  8. Именованные символы-ссылки (кроме amp, lt, gt, apos, quot) не используются.

Примечания

править
  1. HTML vs XHTML(англ.) HTML5. W3C (2014-10-28). — There are various concrete syntaxes that can be used to transmit resources that use this abstract language, two of which are defined in this specification.  Проверено 2014-12-19 г.
  2. а б The DOCTYPE(англ.) HTML5. W3C (2014-10-28). — A DOCTYPE is a required preamble.  Проверено 2014-12-19 г.
  3. а б Prolog and Document Type Declaration(англ.) Extensible Markup Language (XML) 1.1. W3C (2006-09-29). Проверено 2015-01-02 г.
  4. а б Writing XHTML documents(англ.) HTML5. W3C (2014-10-28). — XML documents may contain a DOCTYPE if desired, but this is not required to conform to this specification. This specification does not define a public or system identifier, nor provide a formal DTD.  Проверено 2014-12-19 г.
  5. Namespaces in XML 1.0(англ.). W3C (2009-12-08). Проверено 2014-12-19 г.
  6. Namespaces(англ.) HTML5. W3C (2014-10-28). Проверено 2014-12-19 г.
  7. Optional tags(англ.) HTML5. W3C (2014-10-28). Проверено 2014-12-19 г.
  8. The lang and xml:lang attributes(англ.) HTML5. W3C (2014-10-28). Проверено 2014-12-19 г.
  9. Named character references(англ.) HTML5. W3C (2014-10-28). Проверено 2014-12-19 г.
  10. Тире, минус и дефис, или Черты русской типографики .ру/ Ководство. Студия Артемия Лебедева (2003-01-15). Проверено 2014-12-19 г.
  11. Predefined Entities(англ.) Extensible Markup Language (XML) 1.1. W3C (2006-09-29). Проверено 2014-12-19 г.
  12. Character and Entity References(англ.) Extensible Markup Language (XML) 1.1. W3C (2006-09-29). Проверено 2014-12-19 г.
  13. Elements(англ.) HTML5. W3C (2014-10-28). Проверено 2015-01-02 г.
  14. а б Start-Tags, End-Tags, and Empty-Element Tags(англ.) Extensible Markup Language (XML) 1.1. W3C (2006-09-29). Проверено 2015-01-02 г.
  15. а б Start tags(англ.) HTML5. W3C (2014-10-28). Проверено 2015-01-02 г.
  16. DOCTYPE state(англ.) HTML5. W3C (2014-10-28). Проверено 2015-01-02 г.

См. также

править