実践Web Standards Designを読む(1)

先週末のことになりますが、真琴さんが執筆に参加された実践Web Standards Design[表紙画像]をようやく購入しました。

……ので、内容について突っ込んでみようと思います。今回は11ページの内容について。

id属性とclass属性」という表があるのですが、その中でid属性の「値に使用できる文字」について、

NAMEトークン*1であるため、

と書いてあるのが気になりました。少なくともXHTMLではid属性はID型だよな、という記憶があったので。

実際のところ、HTML 4.01 DTDでもid属性はID型(NAME型ではなく)でした。ただし仕様書の中のid属性の説明を見ると、

id = name [CS]
This attribute assigns a name to an element. This name must be unique in a document.

と、NAME型であるかのように書かれています。

このことに関しては、マークアップ言語に関して豊富な情報を持つSuikaWikiでも言及されていました。

HTML 4 仕様書では、本来 ID であるはずのものがなぜか name と書かれていたりします。 例えば id 属性の説明に。

仕様書の本文でなぜnameと書かれているのかは謎なのですが、

という点を考えると、ここは「ID型であるため、」と書いた方が良かったように思います。

* * *

id属性の「値に使用できる文字」の中で、もう一つ

(XMLにおけるID型の属性では日本語文字を含むことも可能。ただし、CSSのセレクタとして日本語文字は使えないため、使用しないほうがよい)

という説明が気になりました。実際にCSS2の仕様でそういう規則があるのだろうか、と。

試しに以下のような、id属性に日本語文字を使ったHTMLとCSSを作ってみました。

CSSでは3通りの書き方で一意セレクタを記述していますが、Validatorでは(文字化けしているものの)正当なCSSとして検証されます。

そこで、改めてCSS 2.1仕様の4.1.1 Tokenizationを確認してみました。以下に一意セレクタに関係するトークン及びマクロを抜き出してみます。

Token / macroDefinition
HASH#{name}
name{nmchar}+
nmchar[_a-z0-9-]|{nonascii}|{escape}
nonascii[^\0-\177]
escape{unicode}|\\[^\n\r\f0-9a-f]
unicode\\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?

nmcharescapeを含んでいるのでエスケープによるUnicode文字表現は可能だし、それよりもnonascii (\0 - \7F以外)も含んでいるというところで、日本語をそのまま書いてもよさそうに見えます。

ちなみに、Firefox 2, Opera 9, IE6 の各ブラウザとも、日本語文字の一意セレクタを3通りとも問題なく解釈するようでした。

……というわけで、一意セレクタに日本語文字を使うのは問題無いように思えるのですが、いかがでしょう。