id属性値が小文字のHTML4をXHTMLへ移行する場合

私の中で HTML4 と XHTML がもめているにて、

小文字を大文字に変換して参照しなければならない。(例: <a href="#FOO">) のなら、もし参照した文書が HTML4 から XHTML になった時、その参照の仕方を <a href="#foo"> の記述に直さねばならない、ということになったりするのだろうか(XHTML はまだよくわかっていないことが沢山)?

と述べられていたので、に引き続き「id属性値を小文字で書いたHTML4文書をXHTMLへ移行する」場合について考えてみます。

まず、HTML4およびISO-HTMLではHTMLにおけるid属性問題について、今更ながらで述べたような問題(仮にHTML id case問題と呼ぶことにします)があることはあるのですが、これはあくまで仕様を厳密に解釈した上での問題です。

実際に存在するブラウザの実装がどうなっているかと言えば、

  1. XHTMLでないHTML(HTML4, ISO-HTML)において、
  2. 小文字で書かれたid属性値をを持つ要素がある場合、(例: <p id="foo">)
  3. それを小文字のfragmentで参照しても、(例: <a href="#foo">)
  4. 問題なく参照できてしまう。

という風になっているのが大半かと思います。逆にfragmentを大文字に変えてしまうと、FirefoxやOperaでは参照できなかったりします。(サンプルHTML)

そんなわけで、ブラウザの実装も仕様を厳密に反映していないので、リンクを張ろうとする人は、ほとんどの人が小文字で書いてあるidをそのままURL参照のfragmentとして利用するのではないかと思います。

(そもそもHTML id case問題を知る人、またそれを気にしてリンクを張る人自体、滅多にいないようにも思いますが……)

また、LSCの29aにて、

フラグメント識別子はリソースを指定するわけではないので、URIの一部ではありません

なので、id属性値が変わっても無問題。と思ってたんですが実際どうなんだろう?

という言及がありましたが、そこからの連想で「例えfragmentが要素を正しく参照できなくても、対象のHTML文書そのものは取得できる」ということが言えるかと思います。つまりページが取得できてさえいれば、あとは読む人の判断でリンク先の箇所を探すこともできるわけで、fragmentが多少違っていたとしてもさほど致命的な問題ではない、と考えることもできるんじゃないでしょうか。

以上からすると、id属性値を小文字で書いたHTML4文書をXHTMLに移行してもそんなに大した影響は無い、という気がしますがいかがでしょう。

* * *

なお、fragmentについて細かいことを言うと、確かにRFC 2396ではfragmentはURIに含まれていなかったのですが、URIの仕様はRFC 3986で更新されており、URIはfragmentも含むものと定義が変更されています。