Действительные символы в имени настраиваемого атрибута данных в HTML5

Я создаю некоторые пользовательские атрибуты data-* на моем сайте, и мне трудно читать Spec здесь и Здесь.

Я могу сказать, что [a-z], [0-9] and '-' разрешены, но я не могу расшифровать что-либо еще.

Я также думаю, что "A-Z" будет автоматически преобразован в нижнее (Spec link 1) перед обработкой, но упоминает, что не использует их. (Spec link 2)

Вопросы:

1) Какие символы разрешены и не разрешены в пользовательском атрибуте data-*?

2) Разрешены ли специальные символы, например '_', '!', '$', etc.?

Спасибо.

Ответ 1

Из вашей ссылки spec 2 допустимые символы поступают из производной Name в XML, что, учитывая, что атрибут уже начинается с data-

":" | [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] | "-" |
"." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]

_ явно указан как OK

! (# x21) и $ (# x24) не разрешены

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