Обратите внимание, что

  1. данный документ является переводом документа «3 Semantics, structure, and APIs of HTML documents — HTML5» и на данный момент находится на стадии перевода;
  2. данный документ может содержать неточности, опечатки и ошибки перевода;
  3. официальным документом по данной тематике является оригинальный документ на английском языке, расположенный на сайте W3C.

3 Семантика, структура и API HTML-документов


* * *

3.2 Элементы


* * *

3.2.5 Глобальные атрибуты


* * *

3.2.5.1 Атрибут id

Атрибут id задаёт элементу уникальный идентификатор (ID). [DOM]

Значение данного атрибута должно быть уникальным среди всех ID в домашнем поддереве элементов, а также должно содержать не менее одного символа. При этом значение не должно содержать пробельных символов.

Отсутствуют ограничения на то, какие значения может принимать ID, в частности, идентификаторы могут состоять только из цифр, начинаться с цифры, с символа подчеркивания, состоять только из знаков препинания и т.д.

уникальный идентификатор элемента может быть использован для различных целей, в первую очередь для установки якоря, в конкретной части документа используя идентификаторы фрагментов, потом как способ указания уникального имени элемента для работы с ним из скриптов, а так же для того чтобы установить CSS стиль для конкретного элемента.

IИдентификаторы являются непрозрачными строками. Особая смысловая нагрузка не должна быть получена от значения атрибута id.

3.2.5.2 Атрибут title

Атрибут title представляет справочную информацию для элемента, например, в виде всплывающей подсказки. При указывании атрибута в теге ссылки, он может выполнять роль названия или описания целевого ресурса; в изображении может выполнять роль альтернативы изображению или описание изображения; в теге абзаца может выполнять роль сноски или комментария к тексту; в цитате может выполнять роль дополнительной информации об источнике; в интерактивном содержимом может выполнять роль отметки или инструкции к использованию элемента; и так далее. В качестве значения данного атрибута может выступать любой текст.

Полагаться на атрибут title в настоящее время не рекомендуется, поскольку многие агенты пользователей не предоставляют атрибут в доступной форме в соответствии с требованиями настоящей спецификации (например, требуется указывающее устройство, такое как мышь, чтобы вызвать всплывающую подсказку, что исключает не только устройства, использующие только клавиатуру, но и устройства, использующие только сенсорное управление, такие как любой современный телефон или планшет).

Если этот атрибут опущен из элемента, то подразумевается, что атрибут title ближайшего предка являющегося HTML элементом с title атрибутом является также актуальным по отношению к данному элементу. Установка данного атрибута переопределяет это правило, прямо указывая, что справочная информация от любых родительских элементов больше не имеет отношения к этому элементу. Установка пустой строки в качестве значения данного атрибута означает, что у элемента отсутствует всплывающая подсказка.

Если значение title атрибута содержит «LF» (U+000A) символы, то содержание разделяется на несколько строк. Каждый «LF» (U +000A) символ во всплывающей подсказке представляет символ перевода строки.

Следует проявлять осторожность при переводе сроки в значениях title атрибутов.

Например, в следующем примере определение аббревиатурной расшифровки написано с разрывом строки:

<p>My logs show that there was some interest in <abbr title="Hypertext
	Transport Protocol">HTTP</abbr> today.</p>

Некоторые элементы, такие как link, abbr, и input, определяют дополнительную семантику для атрибута title за пределами семантики, описанной выше.

Справочная информация элемента является значением, которое возвращает следующий алгоритм, с алгоритмом который прерывается, как только возвращается значение. Когда алгоритм возвращает пустую строку, то справочная информация отсутствует.

  1. Если элемент является link, style, dfn или abbr элементом и: если элемент имеет атрибут title, то возвращается значение этого атрибута, в противном случае возвращается пустая строка.

  2. В противном случае, если элемент имеет атрибут title, то возвращается его значение.

  3. В противном случае, если элемент имеет родительский элемент, то возвращается справочная информация родительского элемента.

  4. В противном случае, возвращается пустая строка.

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


IDL атрибут title должен вернуть содержимое атрибута title.

3.2.5.3 Атрибуты lang и xml:lang

Атрибут lang (без пространства имён) указывает основной язык содержимого элемента и любого из атрибутов элемента, содержащих текст. Его значение должно быть допустимым BCP 47 языковым тегом, или пустой строкой. Установка пустой строки в качестве атрибута указывает, что основной язык неизвестен. [BCP47]

XML атрибут lang в XML пространстве имён определён в XML. [XML]

Если данные атрибуты не указаны в элементе, то язык этого элемента совпадает с языком его родительского элемента, если таковой имеется.

Атрибут lang вне пространства имён может быть использован в любом HTML элементе.

Атрибут lang в XML пространстве имён может быть использован в HTML элементах в XML документах, а также в элементах других пространств имён, если позволяют это соответствующие технические характеристики (в частности, в MathML и SVG допускается использование lang атрибутов в XML пространстве имён указаных в их элементах). Если и атрибут lang не принадлежащий пространству имён и атрибут lang принадлежащий XML пространству имён указывается в одном элементе, то они должны иметь одинаковое значение без учёта ASCII регистра символов.

Авторы не должны использовать XML атрибут lang принадлежащий the XML пространству имён в HTML элементах HTML документов. Для облегчения перехода от XHTML, авторы могут указать атрибут не принадлежащий пространству имён без префикса и с буквальным локальным именем "xml:lang" в HTML элементах HTML документов, но такие атрибуты должны быть указаны только в случае, если для элемента уже указан атрибут lang не принадлежащий пространству имён, при условии, что оба этих атрибута имеют одинаковое значение без учёта ASCII регистра символов.

Атрибут вне пространства имён без префикса и с буквальным локальным именем "xml:lang" не влияет на обработку языка.


Для определения языка узла, агенты пользователей должны посмотреть на ближайший родительский элемент (в том числе и сам элемент, если узел является элементом), который имеет атрибут lang принадлежащий XML пространству имён или является HTML элементом, который имеет lang не принадлежащий пространству имён набора атрибутов. Данный атрибут задаёт язык узла (вне зависимости от его значения).

Если и атрибут lang не принадлежащий пространству имён и атрибут langпринадлежащий XML пространству имён задаются одному элементу, то агенты пользователей должны использовать атрибут lang принадлежащий XML пространству имён, а атрибут lang не принадлежащий пространству имён должен быть проигнорирован в целях определения языка элемента.

Если ни один узел, ни кто-либо из предков узла, включая корневой элемент, не имеет ни одного из данных атрибутов, но присутствует pragma-набор действий для установления языка по умолчанию, то это установленный таким образом язык является языком узла. Если нет pragma-набора действий для установления языка по умолчанию, то информация о языке, получается, от высокоуровневого протокола (например, HTTP), если таковой имеется, должен быть использован в качестве последнего резервного метода определения языка. В случае отсутствия какой-либо информации о языке, а также в случаях, когда протокол более высокого уровня предоставляет отчеты на нескольких языках, язык узла неизвестен и соответствующая метка языка является пустой строкой.

Если полученное значение является нестандартной меткой языка, то данное значение должно рассматриваться как неизвестный язык, имеющий данную метку языка отличающуюся от остальных языков. В целях кругооборота или общения с другими службами, которые ожидают языковые метки, web-браузеры должны оставить неизвестные метки языка без изменений, и пометить как языковые метки BCP 47, так чтобы впоследствии сервисы не интерпретировали данные как ещё один тип описания языка. [BCP47]

Так, например, элемент с lang="xyzzy" будет соответствовать селектору :lang(xyzzy) (например в CSS), но не будет соответствовать :lang(abcde) хотя оба они одинаково недействительны. Аналогично, если веб-браузер и программа чтения с экрана, работают совместно обмениваясь информацией о языке элемента, браузер должен будет сообщать программе чтения с экрана, что меткой языка является "xyzzy", даже если он знает, что данная метка неверна, это делается на всякий случай для того, чтобы узнать поддерживает ли программа чтения с экрана язык с подобной меткой. Даже если программа чтения с экрана одновременно поддерживает BCP 47 и другие синтаксисы для кодирования названий языков, и в этом другом кодировании синтаксис строки "xyzzy" является одним из способов обозначения белорусского языка, было бы неправильным для программы чтения с экрана начать обрабатывать текст как белорусский, потому что "xyzzy" в BCP 47 кодах не описывается как белорусский (в BCP 47 для обозначения белорусского языка используется код «be»).

Если полученное значение является пустой строкой, то это значение должно быть интерпретировано как неизвестный язык узла.


Агенты пользователей могут использовать языковую метку для определения правильной обработки или визуализации (например, в выборе соответствующих шрифтов или произношения, для выбора словаря, или для пользовательских интерфейсов управления формой, таких как выбор даты).


IDL атрибут lang должен вернуть содержимое атрибута lang не принадлежащего пространству имён.

3.2.5.4 Атрибут translate

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

Ключевыми словами атрибута являются: пустая строка, yes, и no. Пустая строка и ключевое слово yes указывают на состояние – yes. Ключевое слово no указывает на состояние – no. Кроме того, существует еще и третье состояние, состояние наследования, которое является отсутствующим значением, выполняемым по умолчаниюнедопустимое значение по умолчанию).

Каждый элемент (даже не HTML-элементы) имеет режим перевода, который может находиться в состоянии поддержки перевода или в состоянии без поддержки перевода. Если атрибут translate HTML-элемента находится в состоянии yes, то режим перевода элемента находится в состоянии поддержки перевода; в противном случае, если translate атрибут элемента находится в состоянии no, то режим перевода элемента находится в состоянии без поддержки перевода. В противном случае, либо translate атрибут элемента наследует состояние, либо элемент не является HTML элементом и таким образом не имеет translate атрибут; в любом случае, режим перевода элемента находится в том же состоянии, что и его родительский элемент, если таковой имеется, или в состоянии поддержки перевода, если элемент является корневым элементом.

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

Когда элемент находится в состоянии без поддержки перевода, то значения атрибутов элементов (в том числе значения атрибутов перевода) и значения их дочерних Текстовых узлов должны быть оставлены, как есть в условиях, когда страница локализована, например, в виду того, что элемент содержит имя человека или название компьютерной программы.

Следующие атрибуты являются переводимыми атрибутами:


IDL атрибут translate должен вернуть true, если режим перевода элемента находится в состоянии поддержки перевода и false в противном случае. При использовании, он должен задать атрибуту значение "yes", если новое значение является true/правдой или в противном случае задать значение "no".

В данном примере, после локализации страницы, все её содержимое за исключением образца вводимого текста и образца результата работы программы должно быть переведено:

<!DOCTYPE HTML>
<html> <!-- по умолчанию в корневом элементе translate=yes -->
 <head>
  <title>Игра Пчёлы</title> <!-- подразумевается, что translate=yes наследуется от родительских элементов -->
 </head>
 <body>
  <p>Игра Пчелы представляет собой текстовую приключенческую игру на английском языке.</p>
  <p>При запуске игры, первое, что вы должны сделать, это набрать
  <kbd translate=no>поесть мёд</kbd>. Игра должна ответить:</p>
  <pre><samp translate=no>Ням ням! Это был очень хороший мёд!</samp></pre>
 </body>
</html>
3.2.5.6 Атрибут dir

Атрибут dir указывает направление текста элемента. Атрибут представляет собой перечисляемый атрибут со следующими ключевыми словами и значениями:

Ключевое слово ltr, которое является значением ltr

Указывает, что содержимое элемента имеет явно обособленное направление текста слева направо.

Ключевое слово rtl, которое является значением rtl

Указывает, что содержимое элемента имеет явно обособленное направление текста справа налево.

Ключевое слово auto, которое является значением auto

Указывает, что содержимое элемента имеет явно обособленное направление текста, но это направление должно быть определено программно, используя содержимое элемента (как описано ниже).

Эвристически используемое данное состояние очень примитивно (оно просто смотрит на первый символ с сильной направленностью, аналогично тому, как в пункте определения уровня алгоритма двунаправленного вывода). Авторам настоятельно рекомендуется использовать это значение в качестве последнего средства, в случае, когда направление текста действительно неизвестно, и когда эвристика не может быть применена на стороне сервера. [BIDI]

Для textarea и pre элементов, эвристика применяется на уровне абзацев.

Этот атрибут не имеет недопустимого значения по умолчанию и не отсутствующего значения по умолчанию.


Направленность элемента (любого элемента, а не только элемента HTML) имеет одно из двух состояний - 'ltr' или 'rtl', и определяется в соответствии с первым соответствующим набором действий из следующего списка:

Если атрибут dir элемента имеет значение ltr
Если элемент является корневым элементом и атрибут dir не имеет определенного состояния (т.е. он отсутствует или имеет недопустимое значение)
Если элемент является input элементом, чей атрибут type находится в состоянии Номера телефона, и атрибут dir не имеет определенного состояния (т.е. он отсутствует или имеет недопустимое значение)

Направленность элемента принимает значение 'ltr'.

Если атрибут dir элемента имеет значение rtl

Направленность элемента принимает значение 'rtl'.

Если элемент является input элементом, чей атрибут type имеет значение Text, Search, Telephone, URL или E-mail и атрибут dir находиться в состоянии auto
Если элемент является textarea элементом и атрибут dir находиться в состоянии auto

Если значение элемента содержит символ с двунаправленным характером типа AL или R, и нигде до этого в значение элемента нет символа двунаправленного характера типа L, то направленность элемента определяется как 'rtl'. [BIDI]

В противном случае, если значение элемента - не пустая строка, или если элемент является корневым элементом, направленность элемента принимает значение 'ltr'.

В противном случае, направленность элемента наследуется от направленности родительского элемента.

Если атрибут dir элемента имеет значение auto
Если элемент является bdi элементом и атрибут dir не имеет определенного состояния (т.е. он отсутствует или имеет недопустимое значение)

Находтся первый символ структуре дерева, который соответствует следующим критериям:

Если такой символ найден и имеет двунаправленный характер типа AL или R, направленность элемента принимает значение 'rtl'.

Если такой символ найден и имеет двунаправленный характер типа L, направленность элемента принимает значение 'ltr'.

В противном случае, если элемент является пустым и не является корневым элементом, направленность элемента такая же, как и направленность родительского элемента.

В противном случае, направленность элемента принимает значение 'ltr'.

Если элемент имеет родительский элемент и атрибут dir не имеет определенного состояния (т.е. он отсутствует или имеет недопустимое значение)

Направленность элемента наследуется от направленности родительского элемента.

Поскольку атрибут dir определяется только для HTML-элементов, он не может присутствовать в элементах из других пространств имён. Таким образом, элементы из других пространств имён всегда просто наследуют их направленность от родительского элемента, или, если они не имеют единственного значения по умолчанию - 'ltr'.

Данный атрибут имеет толкование требования, связанного с двунаправленным алгоритмом.


Атрибут направленности HTML-элемента, который используется, когда значение этого атрибута будет принято на исполнение в некотором образе, определяется, как и в первом соответствующем наборе действий из следующего списка:

Если атрибут направленности является работоспособным атрибутом и dir атрибут элемента находиться в состоянии auto

Нахождится первый символ (в логическом порядке) атрибута, который имеет двунаправленный характер типа L, AL, или R. [BIDI]

Если такой символ найден и имеет двунаправленный характер типа AL или R, направленность атрибут принимает значение 'rtl'.

В противном случае, направленность атрибута принимает значение 'ltr'.

В противном случае
Атрибут направленности имеет значение соответствующее направленности элемента.

Следующие атрибуты являются поддерживаемыми атрибутами направленности:


document . dir [ = value ]

Возвращает значение dir атрибутов html элемента, если таковые имеются.

Может быть установлено, "ltr", "rtl", либо "auto" для изменения значения dir атрибутов html элемента

Если html элемент отсутствует, то возвращается пустая строка, и игнорируются новые значения.

IDL атрибут dir должен вернуть содержимое dir атрибута элемента, ограничиваясь только известными значениями.

IDL атрибут dir в объекте Document должен вернуть содержимое dir атрибута html элемента, если таковой имеется, ограничиваясь только известными значениями. Если указанный элемент отсутствует, то атрибут должен вернуть пустую строку и не делать ни каких настроек.

Разработчикам настоятельно рекомендуется для указания направления текста использовать атрибут dir, а не прибегать к помощи CSS, потому что в этом случае их документы будут продолжать отображаться правильно, даже в отсутствии CSS (например, в интерпретации поисковых систем).

Это фрагмент разметки из чат сеанса.

<p dir=auto class="u1"><b><bdi>Студент</bdi>:</b> Как пишется "Как тебя зовут?" по-арабски?</p>
<p dir=auto class="u2"><b><bdi>Учитель</bdi>:</b> ما اسمك؟</p>
<p dir=auto class="u1"><b><bdi>Студент</bdi>:</b> Спасибо.</p>
<p dir=auto class="u2"><b><bdi>Учитель</bdi>:</b> Данное слово пишется как "شكرًا".</p>
<p dir=auto class="u2"><b><bdi>Учитель</bdi>:</b> А вы знаете, как пишется "Пожалуйста"?</p>
<p dir=auto class="u1"><b><bdi>Студент</bdi>:</b> "من فضلك", правильно?</p>

При наличии подходящих стилей и выравнивания, выставленных по умолчанию стилей для элемента p, а именно выравнивание текста по начальному краю абзаца, в результате выравнивание может выглядеть следующим образом:

Each paragraph rendered as a separate block, with the paragraphs left-aligned except the second paragraph and the last one, which would  be right aligned, with the usernames ('Student' and 'Teacher' in this example) flush right, with a colon to their left, and the text first to the left of that.

Как отмечалось ранее, значение auto не является панацеей. Последний абзац в этом примере отображается справа налево, так как он начинается с арабской вязи, которая располагает «правильно?» слева от арабского текста.

3.2.5.7 Атрибут class

Каждый HTML элемент может иметь атрибут class.

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

Классы, присваиваемые HTML элементу, только тогда являются набором, состоящим из всех классов, когда значение атрибута class разделено пробелами. (Повторения игнорируются.)

Присваиваемые элементу классы влияют на класс соответствующих CSS селекторов, метод getElementsByClassName() в DOM, и другие подобные функции.

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


IDL атрибуты className и classList, определенные в DOM спецификации, возвращают содержимое атрибута class. [DOM]

3.2.5.8 Атрибут style

Все HTML элементы могут иметь атрибут style. Этот атрибут является атрибутом CSS стилей, определённых спецификацией CSS Синтаксиса Атрибута Стиля. [CSSATTR]

В агентах пользователей, поддерживающих CSS, значение атрибута должно быть принято во внимание в том числе, когда элементу задаётся данный атрибут или изменяется значение уже заданного атрибута , в соответствии с правилами, заданными для стилевых атрибутов CSS. [CSSATTR]

Документы, которые используют атрибуты style в своих элементах, должны быть понятными и пригодными, даже в случае удаления этих атрибутов.

В частности, с помощью атрибута style можно скрывать и показывать содержимое элемента, а так же передавать смысл который из-за несоответствия мог бы и не быть включён в документ. (Для скрытия и отображения содержимого элемента используйте атрибут hidden.)


element . style

Возвращает CSSStyleDeclaration объект для элементов с атрибутом style.

IDL атрибут style определён в спецификации Объектной Модели CSS (CSSOM). [CSSOM]

В следующем примере, слова, которые относятся к цветам, размечены с помощью span элемента и атрибута style, чтобы придать данным словам соответствующие цвета в визуальных медиа.

<p>Мой тренировочный костюм <span style="color: green; background:
transparent">зелёного цвета</span>, а мои глаза <span style="color: blue;
background: transparent">синего цвета</span>.</p>
3.2.5.9 Внедрение скрытых пользовательских данных с помощью атрибутов data-*

Атрибут пользовательских данных является атрибутом вне пространства имён, имя которого начинается со строки "data-", сам он имеет, по крайней мере, один символ дефиса, является XML-совместимым, и не содержит прописных ASCII букв.

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

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

Эти атрибуты не предназначены для использования программным обеспечением, которое не зависит от сайта, на котором используются данные атрибуты.

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

<ol>
 <li data-length="2m11s">За морем</li>
 ...
</ol>

Однако, было бы неправильно, если бы пользователь использовал стороннее программное обеспечение, которое не связано с этим музыкальным сайтом, для поиска треков определенной длины по указанным данным.

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

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


element . dataset

Возвращает объект DOMStringMap для элементов с атрибутами data-*.

Комбинированные имена преобразуются с изменением регистра. Например, data-foo-bar="" становится element.dataset.fooBar.

IDL атрибут dataset предоставляет удобные средства доступа для всех data-* атрибутов элемента. При указании, IDL атрибут dataset должен вернуть DOMStringMap объект, связанный следующими алгоритмами, которые показывают данные атрибуты на своём элементе:

Алгоритм получения списка пар имя-значение
  1. Пусть списком будет пустой список пар имя-значение.
  2. Для каждого содержащегося в элементе атрибута первые пять символов являются строкой "data-" чьи остальные символы (если таковые имеются) не являются любыми прописными ASCII буквами, в том порядке, в котором эти атрибуты, перечисляются в списке атрибутов элемента, добавляют пару имя-значение в список, чьё имя является именем атрибута без первых пяти символов и значением которого является значение атрибута.
  3. Для каждого имени в списке с символом "-" (U+002D) в имени, за которым следует строчная ASCII буква, удаляется символ "-" (U+002D), а так же заменяется символ, который следовал за ним на такой же символ, преобразованный в ASCII символ верхнего регистра.
  4. Возвращает список.
Алгоритм установки имена некоторых значениях
  1. Пусть name будет именем переданным алгоритму.
  2. Пусть value будет значением переданным алгоритму.
  3. Если name содержит символ "-" (U+002D) сопровождаемый строчными ASCII буквами, выдаётся ошибка SyntaxError и отменяются следующие действия.
  4. Перед каждой прописной ASCII буквой в name, вставляется символ "-" (U+002D) и эта буква заменяется на такую же преобразованную ASCII букву только нижнего регистра.
  5. Строка data- вставляется в переднюю часть name.
  6. Установить значение атрибута с именем name, к значению value, заменив все предыдущие значения, если атрибут уже существует. Если setAttribute() выдаст ошибку, устанавливая атрибут с именем name, то на это должно быть выдано то же исключение/ошибку.
Алгоритм удаления имён
  1. Пусть name будет именем, передающимся в алгоритм.
  2. Перед каждой прописной ASCII буквой в name, вставляется символ "-" (U+002D) и эта буква заменяется на такую же преобразованную ASCII букву только нижнего регистра.
  3. Строка data- вставляется в переднюю часть name.
  4. Удаляется атрибут с именем name, если такой атрибут существует. В противном случае ничего не делается.

Этот алгоритм будет получать только вызванную WebIDL спецификацию для имён, которые даются ранее алгоритма для получения списка пар имя-значение. [WEBIDL]

Каждый раз должен возвращаться один и тот же объект.

Если бы на веб-странице необходимо было создать из элемента этой страницы космический корабль, например как часть какой-нибудь игры, то можно было бы использовать атрибут class наряду с атрибутами data-*:

<div class="spaceship" data-ship-id="92432"
     data-weapons="laser 2" data-shields="50%"

     data-x="30" data-y="10" data-z="90">
 <button class="fire"
         onclick="spaceships[this.parentNode.dataset.shipId].fire()">
  Огонь
 </button>
</div>

Обратите внимание, как в API название атрибута, написанное через дефис, преобразуется с изменением регистра некоторых символов.

Авторы должны настолько тщательно разработать подобные расширения, что бы в случае, когда атрибуты игнорируются и любые указываемые CSS перестают работать, страница всё еще была бы пригодна к использованию.

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

JavaScript библиотеки могут использовать атрибуты пользовательских данных, так как они считаются частью страницы, на которой они используются. Авторам библиотек, которые используются многими другими авторами, предлагается включить своё название в имена атрибутов, чтобы снизить риск совпадений. Там где это имеет смысл, в библиотеке также рекомендуется сделать название, используемое в именах атрибутов настраиваемым, так чтобы библиотеки, авторы которых неосознанно выбрали то же название, могли бы использовать эти имена на одной странице, а так же, что бы несколько версий конкретной библиотеки, могли бы быть использованы на той же странице, даже если эти версии являются не совместимыми.

Например, библиотека называемая "DoQuery" может использовать имена атрибутов, такие как data-doquery-range, а библиотека называемая "jJo" может использовать имена атрибутов, такие как data-jjo-range. Также в библиотеке jJo может быть предусмотрен свой API, который устанавливает собственную приставку для использования (например, J.setDataPrefix('j2') создаёт атрибуты, которые имеют название типа data-j2-range).