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 >Это — пример документа HTML5.
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru">
<head>
<title >Привет, мир!</title>
</head>
<body>
<p >Это — пример документа HTML5.</p>
</body>
</html>
Объектная модель документа
[править]Оба варианта выше являются действительными (англ. valid) представлениями одного и того же (с точностью до незначимых пробельных символов) документа HTML5, модель которого приведена на схеме ниже. (Над чертой — имя дочернего элемента, или @ для блока атрибутов.)
html |
| |||||||||||||||||||||
DOCTYPE
[править]Спецификация 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] включая использованное в примере (и широко применяемое в русскоязычной типографике) эм-тире («—», —.)[10]
С другой стороны, XML (в отсутствие определения типа документа, или DTD) определяет лишь пять подобных конструкций (amp, lt, gt, apos, quot.)[11]
Поскольку спецификация не регламентирует использования какого-либо конкретного DTD для XHTML-представления документов HTML5,[4] в примере выше для эм-тире использована имеющая тот же смысл допускаемая XML числовая символ-ссылка (англ. numeric character reference) — —.[12]
Более формальное определение
[править]Как для HTML-, так и для XHTML-представления, основными особыми (сигнальными) символами являются следующие два:
<— начинает тег, комментарий, инструкцию обработки (в случае XML), или объявление типа документа;&— начинает символ-ссылку.
Кроме того, в зависимости от контекста, особым смыслом могут также наделяться символы >, ", '.
Ниже мы рассмотрим способы записи упомянутых единиц разметки более подробно.
Теги
[править]Теги обозначают границы элементов, а равно и несут их атрибуты. В рассматриваемых представлениях используются теги следующих видов.[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
areabasebrcolembedhrimginputkeygenlinkmetaparamsourcetrackwbr
Атрибуты
[править]В обоих представлениях, атрибуты могут быть записаны в виде разделенных пробельными символами пар имя='значение' или имя="значение", где значение не содержит буквальных символов ' и ", соответственно. (Эти символы, однако, могут быть включены в значение атрибута как символы-ссылки ' и ".)
Кроме того, 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.
Такое «совместимое» представление определяется набором необходимых условий ниже, обусловленных, в основном, небольшими различиями в интерпретации схожих конструкций этих представлений.
- В начале представления документа используется форма
<!DOCTYPE html>. (Требование и ограничение HTML.) - Корневой элемент
htmlдополняется атрибутомxmlns="http://www.w3.org/1999/xhtml". Все элементы HTML явно отнесены к этому пространству имен. - Определение и использование префиксов пространств имен (вида:
<html:p xmlns:html="http://www.w3.org/1999/xhtml" >Привет!</html:p>) не допускается. Включаемые в HTML документы MathML и SVG используют соответствующие значения атрибутаxmlns. (Ограничение HTML.) - Псевдоэлемент
noscriptне допускается как «невозможный» в документах XML. (Ограничение XML.) - Элементы
style,iframe,scriptдопускаются лишь если не содержат основных особых символов XML (&,<.) - Все пустые (англ. void) элементы записываются одним тегом с обязательным
/, подобно:<base href="http://example.com/" />. - Для всех прочих элементов используются явные открывающий и закрывающий теги, — даже если элемент лишен содержимого. Подобно:
<div id="example-id" ></div>. - Именованные символы-ссылки (кроме
amp,lt,gt,apos,quot) не используются.
Примечания
[править]- ↑ HTML vs XHTML (англ.). HTML5. W3C (28 октября 2014). — «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.» Дата обращения: 19 декабря 2014.
- ↑ а б The DOCTYPE (англ.). HTML5. W3C (28 октября 2014). — «A DOCTYPE is a required preamble.» Дата обращения: 19 декабря 2014.
- ↑ а б Prolog and Document Type Declaration (англ.). Extensible Markup Language (XML) 1.1. W3C (29 сентября 2006). Дата обращения: 2 января 2015.
- ↑ а б Writing XHTML documents (англ.). HTML5. W3C (28 октября 2014). — «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.» Дата обращения: 19 декабря 2014.
- ↑ Namespaces in XML 1.0 (англ.). W3C (8 декабря 2009). Дата обращения: 19 декабря 2014.
- ↑ Namespaces (англ.). HTML5. W3C (28 октября 2014). Дата обращения: 19 декабря 2014.
- ↑ Optional tags (англ.). HTML5. W3C (28 октября 2014). Дата обращения: 19 декабря 2014.
- ↑ The lang and xml:lang attributes (англ.). HTML5. W3C (28 октября 2014). Дата обращения: 19 декабря 2014.
- ↑ Named character references (англ.). HTML5. W3C (28 октября 2014). Дата обращения: 19 декабря 2014.
- ↑ Тире, минус и дефис, или Черты русской типографики. .ру/ Ководство. Студия Артемия Лебедева (15 января 2003). Дата обращения: 19 декабря 2014.
- ↑ Predefined Entities (англ.). Extensible Markup Language (XML) 1.1. W3C (29 сентября 2006). Дата обращения: 19 декабря 2014.
- ↑ Character and Entity References (англ.). Extensible Markup Language (XML) 1.1. W3C (29 сентября 2006). Дата обращения: 19 декабря 2014.
- ↑ Elements (англ.). HTML5. W3C (28 октября 2014). Дата обращения: 2 января 2015.
- ↑ а б Start tags (англ.). HTML5. W3C (28 октября 2014). Дата обращения: 2 января 2015.
- ↑ DOCTYPE state (англ.). HTML5. W3C (28 октября 2014). Дата обращения: 2 января 2015.
См. также
[править]- В Википедии: