2004-01-10
ちょっと長めです。
ID
属性値は大文字で??
<TAG> の ID 属性の値 `XXXX` には小文字を含めないようにしましょう。
[引用: Another HTML-lint: Explanation より]
Another HTML-lint でISO-HTML及びHTML4の検証を行うと、ID
属性値に小文字が指定されていたら警告されるようになりました。
さて、ISO/IEC 15445:2000 の User'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 より]
例えば PiZZa と pizza は、大文字小文字以外に区別がないので、一意性の点で不正であり同じ 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的に正しくは、次のことを満たす必要があるようです。
ID
属性値が小文字のアンカーを参照するには、大文字で参照する必要がある。- 同時に出現する
ID
属性とNAME
属性は、双方の属性値が合致させねばならない。 - 部分識別子とアンカー名との比較は、大文字小文字まで正確に合致させねばならない。
注釈
- XHTML文書型に記された
id
属性値へのアンカーの場合には、このような問題は発生しません。 NAME
属性のみの使用の場合は支障ありません。但し、NAME
属性はID
属性と共に用いることが推奨されています。