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
area
base
br
col
embed
hr
img
input
keygen
link
meta
param
source
track
wbr
Атрибуты
[править]В обоих представлениях, атрибуты могут быть записаны в виде разделенных пробельными символами пар имя='значение'
или имя="значение"
, где значение не содержит буквальных символов '
и "
, соответственно. (Эти символы, однако, могут быть включены в значение атрибута как символы-ссылки '
и "
.)
Кроме того, 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 (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 г. - ↑ а б The DOCTYPE(англ.) HTML5. W3C (2014-10-28). —
A DOCTYPE is a required preamble.
Проверено 2014-12-19 г. - ↑ а б Prolog and Document Type Declaration(англ.) Extensible Markup Language (XML) 1.1. W3C (2006-09-29). Проверено 2015-01-02 г.
- ↑ а б 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 г. - ↑ Namespaces in XML 1.0(англ.). W3C (2009-12-08). Проверено 2014-12-19 г.
- ↑ Namespaces(англ.) HTML5. W3C (2014-10-28). Проверено 2014-12-19 г.
- ↑ Optional tags(англ.) HTML5. W3C (2014-10-28). Проверено 2014-12-19 г.
- ↑ The lang and xml:lang attributes(англ.) HTML5. W3C (2014-10-28). Проверено 2014-12-19 г.
- ↑ Named character references(англ.) HTML5. W3C (2014-10-28). Проверено 2014-12-19 г.
- ↑ Тире, минус и дефис, или Черты русской типографики .ру/ Ководство. Студия Артемия Лебедева (2003-01-15). Проверено 2014-12-19 г.
- ↑ Predefined Entities(англ.) Extensible Markup Language (XML) 1.1. W3C (2006-09-29). Проверено 2014-12-19 г.
- ↑ Character and Entity References(англ.) Extensible Markup Language (XML) 1.1. W3C (2006-09-29). Проверено 2014-12-19 г.
- ↑ Elements(англ.) HTML5. W3C (2014-10-28). Проверено 2015-01-02 г.
- ↑ а б Start tags(англ.) HTML5. W3C (2014-10-28). Проверено 2015-01-02 г.
- ↑ DOCTYPE state(англ.) HTML5. W3C (2014-10-28). Проверено 2015-01-02 г.
См. также
[править]- В Википедии: