血統の森+はてな

旧はてなダイアリーの自動インポートによるアーカイブです。

HTML5のカスタムデータ属性data-*の属性名は、日本語であってもよい

日本語を含んだ属性名にするのが誰得なんだという疑問があるにせよ、仕様上はそうなっている(ように読める)のだから仕方ない。

カスタムデータ属性は、文字列"data-"で始まる名前空間のない名前をもつ属性であり、ハイフンの後に少なくとも1文字を持ち、XML互換であり、ASCII大文字を含まない。

HTML 5.1(2013-05-28) 3.2.3.9 data-*属性をもつカスタム非視覚データの埋め込み

XML互換というのはHTML 5.1仕様によると、

属性名がXMLで定義されたName生成物と一致し、":"(U+003A)文字を含まず、かつ最初の3文字の文字列がASCII大文字・小文字不区別で文字列"xml"に一致しない場合、属性名はXML互換であると言われる。

HTML 5.1(2013-05-28) 2.1.2 XML

とある。Name生成物はXML仕様に定義してあって、

[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)*

XML 1.0(Fifth Edition) Names and Tokens

ようは、data-の後に続く文字列がNameChar生成物に一致すればよい。ただし、HTML 5.1仕様の要請により、":"[A-Z]は除くと。ASCII大文字を除くにしても、ダイアクリティかリマーク付きの大文字が通ってしまったり、日本語までOKになってしまうのはどうなんだろうという疑問が…。

つまり、Validatorに次のようなHTMLを通しても、妥当なHTMLと判断される(し、現時点で妥当なHTMLである)。

<!DOCTYPE html>
<html data-てすと="test">
<head><title>test</title></head>
<body><p>test</p></body></html>

まあ、普通はそんなことせず、"-"[a-z][0-9]の範囲でどうにかするんだろうな、とかなんとか。

と、比較的どうでもいい仕様読みでした。