2004-01-10

ちょっと長めです。

ID属性値は大文字で??

<TAG> の ID 属性の値 `XXXX` には小文字を含めないようにしましょう。

[引用: Another HTML-lint: Explanation より]

Another HTML-lint でISO-HTML及びHTML4の検証を行うと、ID属性値に小文字が指定されていたら警告されるようになりました。

さて、ISO/IEC 15445:2000User's Guide to ISO/IEC 15445:2000 には、次のような記述があります。

The case sensitivity of the ID attribute is controlled by the SYNTAX NAMING NAMECASE GENERAL YES rule [8879 13.4.5] of the SGML declaration used with ISO-HTML.

[引用: User's Guide to ISO/IEC 15445:2000: 13.1 The A element type - Source and target anchors より]

SGML宣言の SYNTAX NAMING NAMECASE GENERAL YES 規則に基くということは、ISO-HTMLに限らずHTML4(SGML Declaration of HTML 4)にも共通することだと言えます。

では、controlled by the SYNTAX NAMING NAMECASE GENERAL YES rule とは、どういうことでしょうか?

Authors should take a conservative approach. Do not assume that the values PiZZa and pizza will match; if they are to match, write both as PIZZA.

[引用: User's Guide to ISO/IEC 15445:2000: 13.1 The A element type - Source and target anchors より]

例えば PiZZapizza は、大文字小文字以外に区別がないので、一意性の点で不正であり同じ PIZZA として解釈されることになります(YES とは、大文字に置き換えて解釈することを意味します)。

以下に例を挙げると・・・

<a id="pizza">

上記は、下記の様に解釈される。

<a id="PIZZA">

即ち、ID属性値が小文字のアンカーを参照する場合には、Another HTML-lint の 結果の解説には、次の例の様にしなければならないとあります。

ここで注意しなければならないのは、

<a id="foo">

を参照するには

<a href="#FOO">

としなければならないということです。

[引用: Another HTML-lint: Explanation より]

では、次の様な場合にはどうなるのでしょうか?

次の例は、A要素に同時にNAME属性とID属性が出現する場合。但し、当然ながら下記の事に注意しなければならない。

The International Standard recommends that authors of ISO-HTML documents use both the ID attribute and the NAME attribute. If both are used, then they shall be given identical values since this allows an SGML parser to verify that the values for different anchors are distinct.

[引用: User's Guide to ISO/IEC 15445:2000: 13.1 The A element type (defect) - Source and target anchors より]

<a id="pizza" name="pizza">

この例は、NAME属性はID属性と同じ目的で使われるがNAME属性にはこの規則が適用されないので、下記の様になる。

<a id="PIZZA" name="pizza">

そうすると、同時に出現するID属性とNAME属性の属性値が合致しない矛盾が生じることになります。従って、厳密には同時に出現する双方の属性値を大文字で記さなければならないことになります。

ちょっとややこしくなりましたが、つまりAnother HTML-lint 結果の解説によると、SGML的に正しくは、次のことを満たす必要があるようです。

注釈

  • XHTML文書型に記されたid属性値へのアンカーの場合には、このような問題は発生しません。
  • NAME属性のみの使用の場合は支障ありません。但し、NAME属性はID属性と共に用いることが推奨されています。