С тех пор, как этот вопрос был задан, сеть эволюционировала совсем немного. Вероятно, что авторы веб-компонентов (пользовательских элементов) приземляются здесь, пытаясь узнать, какие допустимые имена можно использовать при определении атрибутов для пользовательских элементов.
Здесь есть несколько ответов, которые являются частично правильными, поэтому я попытаюсь объединить их и обновить их на основе последних спецификаций.
Во-первых, в HTML5 имена атрибутов могут начинаться с большинства символов и являются гораздо более разрешающими, чем в предыдущих версиях HTML. Ответ @ S.Lott верен для HTML 2 и XHTML, но не для HTML5.
Для HTML5: ( spec )
Имена атрибутов должны состоять из одного или нескольких символов, отличных от пробелов, U + 0000 NULL, U + 0022 ОТМЕТКА ЦИТАТЫ ("), U + 0027 APOSTROPHE ('), U + 003E ЗНАК БОЛЬШЕ, ЧЕМ (>) , U + 002F SOLIDUS (/) и U + 003D EQUALS SIGN (=) символы, управляющие символы и любые символы, которые не определены в Unicode. В синтаксисе HTML имена атрибутов, даже те, которые используются для внешних элементов, могут быть записывается с любым сочетанием строчных и прописных букв, которые ASCII не чувствительны к регистру, совпадают с именем атрибута.
При этом другие комментаторы здесь верны: когда вы используете атрибут встроенного элемента, которого нет в списке допустимых атрибутов, вы технически нарушаете спецификацию. Тем не менее, авторы браузеров терпимо относятся к этому, поэтому на практике это не приносит (много?) Вреда. Многие библиотеки используют это для улучшения обычных тегов HTML, что вызывает некоторую путаницу, поскольку это технически недопустимый HTML. HTML5 предоставляет механизм для пользовательских данных в атрибутах, используя соглашение об именовании атрибутов данных.
Эти правила отличаются для пользовательских элементов.
Авторы пользовательских элементов могут реализовывать любые атрибуты, которые им нравятся, в их элементах, хотя имена атрибутов более строгие, чем в HTML5. Фактически, spec требует, чтобы имя атрибута соответствовало ограничениям XML Name :
Символы ASCII и знаки пунктуации вместе с довольно большой группой символов символов Unicode исключаются из имен, поскольку они более полезны в качестве разделителей в тех случаях, когда имена XML используются вне документов XML; предоставление этой группы дает этим контекстам жесткие гарантии того, что не может быть частью имени XML. Символ # x037E, GREEK QUESTION MARK, исключен, поскольку при нормализации он становится точкой с запятой, что может изменить значение ссылок на сущности.
Имена и токены
[4] NameStartChar :: = ":" | [A-Z] | "_" | [a-z] | [# xC0- # xD6] | [# xD8- # xF6] | [# xF8- # x2FF] | [# x370- # x37D] | [# x37F- # x1FFF] | [# x200C- # x200D] | [# x2070- # x218F] | [# x2C00- # x2FEF] | [# x3001- # xD7FF] | [# xF900- # xFDCF] | [# xFDF0- # xFFFD] | [# X10000- # xEFFFF]
[4a] NameChar :: = NameStartChar | "-" | "" | [0-9] | # xB7 | [# x0300- # x036F] | [# X203F- # x2040]
[5] Name :: = NameStartChar (NameChar) *
[6] Имена :: = Имя (# x20 Имя) *
[7] Nmtoken :: = (NameChar) +
[8] Nmtokens :: = Nmtoken (# x20 Nmtoken) *
Таким образом, для имен пользовательских элементов вы можете использовать верхний / нижний буквенно-цифровой символ "_", подчеркивание ":", двоеточие или любой из символов Unicode, вызванных в спецификации, в качестве начального символа, а затем тире "-" точки ".", альфа и т. д. ... как символы тела.