制作者の活動(PR)。

アイドル女優・堀北真希ちゃんにうさみみを着けたオリジナルキャラクタ。次アイドル女優・堀北真希ちゃんにうさぎの耳を着けた制作者のオリジナルキャラクタ
主な作品

堀北真希ちゃんのボシュロム社コンタクト用品TVCM出演に因んだ、レンズをつけている堀北真希うさぎのイラストとその場面を含んだ仮想CM動画

在来HTMLでのid属性値について。

HTML 4.01及びISO-HTML(ISO/IEC 15445:2000)に於けるid属性の値についての解説です。

これら在来HTMLではid属性値に小文字を使うべきでない事を、基礎となっているSGMLの見地から考えてみました。

在来HTMLでのid属性値について・目次。

はじめに。

制作者は通常在来HTMLと言う呼称を、XML応用言語化されていないHTMLの意味で用いておりますが、SGML応用言語でなくなる予定のHTML 5についてはここでは除外します

すなわち、本記事に於ける在来HTMLとは、

の事を指します。

ISO-HTMLのDTDが示す問題点とその解決策。

在来HTML(HTML 4.01及びISO-HTML(ISO/IEC 15445:2000))に於けるid属性の値については、問題点があります。

その問題点について、ISO-HTMLのDTDには解決策が記されております。

本来なら問題点を先に書くべきですが、長くなり過ぎる事と、事情をまだ知らない方には却って分かり難いと思われる事から、解決策を先に書いておきます。

解決策: 在来HTMLではid属性値に小文字を使わない。

在来HTML(HTML 4.01及びISO-HTML(ISO/IEC 15445:2000))に於いて、id属性値のとるべき値は在来HTMLに於いては以下のようになっております。

  1. 半角の英字で始まり、
  2. 且つ半角の英数字, ハイフン, アンダスコア, コロン及びピリオドのみから成る文字列

しかし、ISO-HTMLのDTDには、以下のように書かれております。

It is recommended that authors of HTML documents specify both ID and NAME attributes, and use values restricted to the 40 characters "ABCDEFGHIJKLMNOPQRSTUVWXYZ.-_:0123456789". When both attributes are specified, they shall have identical values.

つまり、

と書かれております。

すなわち、id属性の値に用いる英字は大文字のみを使うようにすべきであると書かれている訳です。

id属性に小文字を使う事の問題点。

在来HTMLに於けるid属性値の扱い方。

それでは、何故上記のような記述がされているのでしょうか。

在来HTMLはSGML応用言語であり、従ってSGMLの仕様に従ったものとなっております。

HTML 4.01のSGML宣言及びISO-HTMLのSGML宣言では、いずれも以下のように宣言されております。

         NAMING   LCNMSTRT ""
                  UCNMSTRT ""
                  LCNMCHAR ".-_:"
                  UCNMCHAR ".-_:"
                  NAMECASE GENERAL YES
                           ENTITY   NO

SGML宣言とは、在来HTMLの仕様の根拠となっているSGMLに於いて、応用言語の細かい仕様を定めた宣言です。

SGML宣言についての詳細はここでは書きませんが、NAMINGとは、識別子の命名方法を指定するものです。

特にNAMECASE は小文字または小文字と見なす文字(LCNMCHARで指定)を対応する大文字ないし大文字と見なす文字(UCNMCHARで指定)に変換するかどうかを指定するもので、

を示しております。

すなわち、HTML 4.01及びISO-HTML(ISO/IEC 15445:2000)では、

と言う事がSGML宣言に於いて宣言されている訳です。

更にid属性HTML 4.01のDTD及びISO-HTMLのDTDともにID型、すなわち文書内に一意的に存在する識別子として定義されており、従ってid属性値に小文字が含まれる場合にはそれを大文字に変換して取り扱うべきとされております。

加えて、<a>要素name属性値及びhref属性値は(<a>要素以外でもですが)、CDATA型、すなわち識別子ではないただの文字列で、従って小文字も変換されずに扱われる事となります。

在来HTMLでid属性に小文字を用いる事で生じ得る矛盾。

さて、在来HTMLで上記のSGML宣言及びDTDに従うと、初めに述べたid属性及びname属性に於ける要件について矛盾が生じ得ます。

例えば、id属性値とname属性値をいずれも小文字で表記した場合、すなわち、

<a name="horikita_maki" id="horikita_maki"></a>

と言うように記述した場合、

結果同一性が損なわれてしまいます。

結局、ISO-HTMLのDTDに書かれている事は、この矛盾を生じさせないための指針と言えます。

XHTMLなどXML応用言語に於いては、識別子は常に大文字と小文字を区別する事になっているので、特に問題は生じません。

また、この事がXHTMLに於いて全ての要素名と属性名を小文字で書かなければならない理由となっております。

在来HTMLに於けるid属性に関する結論。(平成20年 6月22日 修正)

以上を纏めると、或いは以上から導かれる事は以下の通りです。

在来HTML文書では、<a>要素などでid属性name属性を併記する場合には双方とも小文字を使わずに書くべきである。
これは今までの説明の纏めです。
在来HTML文書では大文字小文字の違いしかない文字列をid属性としてはいけない。

id属性が小文字を大文字に変換してから取扱うと言う決まりであれば、当然、

全ての文字が大文字となっている HORIKITA と見なされてしまいます。

他のHTML文書が在来HTML文書内id属性で書かれたフラグメント名を参照する場合、小文字は大文字に変換して書かなければならない。(平成20年 6月22日 修正)

具体的には、在来HTML文書中に

<h1 id="horikita_maki"></h1>

と小文字が含まれたid属性を持つ要素をフラグメントとして参照する場合(この場合、参照先のフラグメントは<a>要素でなくても良い)、参照元は

<a href="http://#HORIKITA_MAKI">…</a>

とフラグメント名を全部大文字に直して記述しなければならないと言う事です。

フラグメントの参照に用いられるhref属性は、CDATA型であり識別子ではないので、当然小文字の大文字化は行われません。

一方、在来HTML文書のID属性値は全て大文字に変換されて扱われるため、小文字のフラグメント名を指定した場合該当するフラグメント名が存在しないと見なされる事になります。

他のHTML文書が在来HTML文書内id属性の無い <a name=""> 要素で書かれたフラグメント名を参照する場合、小文字を大文字に変換して書いてはいけない。(平成20年 6月22日 修正)

すなわち、在来HTML文書中に

<a name="horikita_maki"></a>

とid属性を記述していない<a>要素をフラグメントとして参照する場合、参照元は

<a href="http://#horikita_maki">…</a>

とフラグメント名はname属性値に従った記述にしなければならないと言う事です。

参照先のname属性値も参照元のhref属性値もCDATA型のため、大文字への変換は行われないのが理由です。

他のHTML文書がXHTML文書内のフラグメント名を参照する場合も、小文字を大文字に変換して書いてはいけない

参照先がXHTMLで記述されている場合、根拠となっているXMLの仕様に於いてid属性値の大文字小文字は明確に区別されるため、参照時には大文字小文字を変えずにそのままの形で記述しなければなりません。

実を言うと…。

これらの議論は、在来HTMLはSGMLの応用系であると言う前提があって、初めて意味があるものです。

実際、これまでIETFもW3CもHTMLはSGMLの応用系である事を前提にHTMLの仕様を策定してきておりました。

ですが、実際には在来HTMLをSGMLの応用形として取扱ってきたウェブブラウザのヴェンダは一つもなかったのです。

つまり、今までの議論は全て現実には建前どころか、逆に問題を引き起こす事さえあります。

例えば、リンク元・リンク先とも在来HTML文書であっても、実際にこの世にある大半のウェブブラウザでは小文字で書かれたIDを大文字に変換すると参照出来なくなってしまうのです。

とは言え、HTMLは4.01までSGMLの応用系と言う前提で規格化されてきたものですので、

ようにすれば良いでしょう。

XHTML文書も併用している場合には、

と良いでしょう。そうする事で、在来HTML文書からSGMLの建前に従った取扱が可能になります。

つまり、自分で守れる約束事は守るが、他人が約束事に従っていないからと無理に縛る事は出来ないと言う事です。

尚、HTMLの次世代仕様であるHTML 5では、SGMLの応用系と言う前提条件を放棄する事としました。その結果、HTML 5に於いてはXHTMLと同様に大文字小文字の違いを考慮する事となります。

しらぎくのウェブサイト作成入門サイトマップ

ページ外へのご案内。

marguerite.site@gmail.com