XHTMLでは大文字のid属性でも大丈夫

よはくのところ。XHTML でない理由(Strict ののろい)にて、XHTMLに移行しない理由として(HTMLにおけるid属性問題について、今更ながらを参照しつつ)「id属性を大文字にしている」ことを理由に挙げられていたのですが、結論から言えばXHTMLでid属性を大文字で書くのは全然問題ないです。

根拠を仕様から求めるのは少々ややこしいですが……

  1. XHTML仕様においては、id属性の型は、(XML仕様で言うところの)ID型と定義されている。
  2. 参照先をXML仕様に移して、ID型の定義は以下のように定められています。
    • 生成規則Nameに従う
    • IDの値は要素を一意に特定しなければならない。
  3. さらに生成規則Nameの定義は……

という風にに定義を次々と辿っていくと、BaseCharの定義の辺りで途方に暮れそうになってしまいますが、要は生成規則Nameには大文字([#x0041-#x005A] はAからZのこと)もちゃんと含まれているので大丈夫、ということになります。

※ 実のところ、XHTMLならid属性に漢字も使えたりします(HTML4では不可)。 → サンプル

また、HTMLにおけるid属性問題について、今更ながらで取り上げていた問題というのは、かいつまんで言うと以下のようなことです。

  1. XHTMLでないHTML(HTML4, ISO-HTML)において、
  2. id属性値を小文字で書いた文書があった場合、(例: <a id="foo">)
  3. そのidを持つ要素をURI fragmentで参照するには、
  4. 小文字を大文字に変換して参照しなければならない。(例: <a href="#FOO">)

つまり参照先がHTML4かISO-HTMLの場合に関係のある問題なので、id属性が大文字で書かれたHTMLをXHTMLに移行する分には、外からのリンクが切れることを気にする必要はないです。(追記: 小文字の場合についての考察を、に記しました)

* * *

HTMLにおけるid属性問題について、今更ながらで参照していたページがリンク切れになっていたため、修正しました。