仕様書は誰でも読めるHTMLを解説する記事や書籍はたくさんありますが、もっとも基本となるのは「仕様書」です。HTMLがどのような仕組みで構成され、どのように記述すべきなのかといった定義は、すべてこの仕様書に記載されています。ウェブサイトで公開されており、だれでも自由に読むことができます。この仕様書は、単なる言語の定義だけでなく、背景の説明や使用例、注意事項なども含んだ詳細なものです。PDF版を印刷すると400ページ以上にもなる膨大なものなので、通読するのは楽ではありません。逆に、それだけ丁寧に書かれているので、きちんと読めば内容は十分理解することができ、正確なHTMLを身につけることができます。このシリーズでは、HTMLに関して曖昧になりがちな部分が、仕様書ではどのように定義されているかを確認しながら、HTMLの理解を深めていきます。仕様書に馴染むことで、記事で取り上げない点についても、自分で調べてみようと思っていただければと考えています。情報共有のための標準仕様WWWは、さまざまな環境でネットワークに接続している人々が、コンピュータの機種やソフトウェアの違いに関係なく情報を共有できるように設計されました。効果的な情報共有のためには、思い思いの方法で文書を記述するのではなく、共通の約束に基づいて書かれていることが重要です。HTMLはWWWでの情報共有のための標準言語であり、その言語を誰もが正確に記述・理解できるように定義するのがHTMLの仕様書です。HTMLにはいくつかのバージョンがありますが、バージョン3.2以降はW3Cによって仕様が定められ、勧告されています。W3Cの標準化作業W3Cの定める標準技術文書は、W3C内外の議論を経て、最終的に「勧告」という形で公開されます。この勧告に至る流れを紹介して、W3C標準の位置づけを確認しておくことにしましょう。Draft)からスタートします。Recommendation)としてメーカーによる実装検証などのテスト段階に入ります。Recommendation)としてメンバー組織の諮問委員会に提出されます。この過程を経て、各方面の支持と合意を得るに至った規格がW3Cの勧告(Recommendation)です。これらの各段階の文書はW3Cのサイトで公開され、我々のような一般ユーザもメーリングリストなどで意見を述べることができるようになっています。いずれかの段階で必要な要件を満たしていないと判断されると、規格は前の段階に差し戻されて再検討されることになります。HTML4.0は1997年7月に草案が公開され、11月に勧告案、12月18日に勧告と、かなりのスピードで標準化作業が進められました。Recommendationの名が示すように、W3C勧告は強制力を持つ国際標準ではありません。この勧告は広く業界やユーザーから支持されており、事実上の標準規格と考えられます。仕様書の目次を開いてみるでは、W3Cのサイトを訪れて、HTML4の仕様書を開いてみましょう。この仕様書は24の章と2つの付録から成っています。最初の3章が導入、続く21章がHTMLの言語仕様の定義と解説、そして付録では前バージョンからの変更点や、表示を最適化するための注意点などが記されています。言語仕様の部分は、最初にHTMLの基本的な枠組みを示した上で、要素タイプを「構造」「プレゼンテーション」「インタラクティビティ」の3つのカテゴリーに分けて定義していき、最後にSGMLとしてのフォーマルな定義を行います。構造に関連する要素タイプは7〜13章、プレゼンテーションに関するものが14〜16章、インタラクティビティが17〜19章で定義されています。仕様書で要素タイプが3つのカテゴリーに分けられているのは、「よいHTML」の考え方を示すためでもあります。(1.1)仕様書の著者たちは、構造とプレゼンテーションを分離することが「より効果的でメンテナンスしやすい」文書につながると述べています。よいHTMLは、相互運用性(共有性)を高めるだけでなく、作者にとってもメリットがあるのです。仕様書とDTDHTMLの文法規則は、文書型定義(DTD)という形で記述されます。言語仕様の各章でも、要素タイプの説明の冒頭でこのDTDによる定義が引用されて、それぞれの用法を示しています。DTD"でこのDTDの読み方も簡単に説明してくれていますので、ここに一通り目を通しておくと、要素タイプの使い方をすばやく、かつ正確に理解することが可能になります。要素タイプ宣言HTMLの要素タイプを定義する「要素タイプ宣言」では、タグの省略の可否と、要素内に出現する子要素のタイプと順序(内容モデル)を定義します。内容モデルとしては、li要素を1つ以上もつということを意味する宣言です。要素タイプ名ULのあとに続く2つの「-」は、それぞれ開始タグと終了タグの省略不可を示します。ここが「O」となっていると、そのタグは省略可であることを意味します。O」なら終了タグのみ省略可ということです。内容モデルでは、要素内に出現してよい要素タイプを列挙します。内容の出現順序、回数は、表1のような記号で示されます。これらを組み合わせることで、ある要素の中にどんな要素をどんなふうに記述できるかが厳密に定義されるわけです。属性リスト宣言と実体宣言また、DTDでは要素タイプがどんな属性を持つのかも定義します。始まる宣言文で、属性名、属性値のタイプ、省略時の扱いについて定義します。DTDでは、さまざまな名前や値の別名を定義しておき、個々の宣言ではこの別名を使うのが普通です。始まる宣言で定義しています。仕様書の3.3ではこれらについても詳しく説明されています。それほど複雑ではないので、できればひととおり目を通して、DTDの読み方を身につけておきましょう。HTML文書の構造では、HTML4の仕様書のさまざまな要素タイプの定義の中から、注目しておきたい部分を拾い読みしていきます。HTMLを書くときに、「ここはどうなっているんだろう」と疑問に思うような点の多くは、実は仕様書できちんと解説されているものなのです。第7章を開いて、HTML文書の基本構造を示す要素タイプを見てみます。title要素タイプとtitle属性title要素はHTML文書が最低限持たなければならない重要な要素です。この要素は、ブラウザのウインドウタイトルに示されるだけであまり目立たないので、その役割が意外に理解されていないのも事実。仕様書の説明を読んでみましょう。(7.4.2)「読者は多くの場合、文脈を離れたところで文書について調べるので、作者は文脈をも伝えるタイトルを用意すべき」というのは、タイトルを考えるに当たっての基本です。「文脈を離れたところ」とは、検索エンジンの結果リストに一覧表示される場合を考えてみるとわかるでしょう。「Introduction」だけでは意味が通じませんね。文書の内容を示すのがtitle要素なら、個々の要素について具体的に説明するのがtitle属性です。(7.4.3)実際、新しいブラウザでは、title属性を持つ要素の上にマウスを持っていくと、ツールチップやステータスバーにその内容が表示されます。本文では詳しく説明しきれないようなヒントを、ツールチップなどで提供するのは、スマートで読者にとっても親切な方法です。文書のメタ情報、つまり文書自身に関する情報は、meta要素タイプを使って示します。一般には情報の種類(プロパティ)をname属性で、その値をcontent属性で記述します。content="corporate,guidelines,cataloging">と指定することで、検索エンジンのロボットなどに、文書に含まれるキーワードを教えることが可能です。name属性の代わりにhttp-equiv属性を用いると、サーバーが送り出すメタ情報である「HTTPヘッダ」に相当する情報を示すことができます。文書の文字コードは本来サーバーで指定すべきものですが、一般利用者がサーバー情報を設定できるとは限りません。このような場合、文書にmeta要素を加えることでその文字コードを明示できます。charset=Shift_JIS">meta要素はhead要素内のどこに記述しても構いませんが、title要素で日本語を使う場合は、それ以前にHTTPヘッダもしくはmeta要素で文字コードを指定しなければなりません。(5.2.2)meta要素を用いて、自動的にページを移動する機能を提供するブラウザがあります。この方法はアクセシビリティを損なうため、使わないよう警鐘が鳴らされています。redirects.アクセシビリティの高いページづくりは、HTML4の仕様書が目指す重要な目標の一つなのです。headings(見出し)本文を記述する上で大切なのは、適切な見出しを用意して文章の構造を理解しやすくすることです。(7.5.5)見出しを提供するのは、人間の読者にそのセクションのトピックを簡潔に示すとともに、コンピュータの力を使った情報共有の面からも重要であることが示されています。目次の自動生成などを考えると、見出しの本質は「文字の大さ」ではなく、大見出し、中見出し、小見出しといった階層によるトピックのレベルの明示であることがよく分かるでしょう。skipped.と控えめに書かれていますが、見出しレベルの順序が不適切では、目次はうまく生成できませんね。厳格な規格であるISO-HTMLでは、この順序についても仕様できちんと定められています。id,class属性とdiv,span要素タイプHTMLでは限られた要素タイプしか定義していないので、きめ細かな構造表現のためにはid、class属性やdiv、span要素タイプを利用します。仕様書には、次のような説明があります。(7.5.2)idはある要素を文書の中で唯一のものとして識別するためのID、classはHTML要素タイプにはない新たな分類を示すための名前という役割を持つわけです。ある要素は、複数のクラスに属することもできます。その場合は、クラス名を空白で区切って列挙します。exception">【注】ひとつ例外がある...</p>idやclassは、HTMLの要素タイプをもとにして、より細分化した構造記述を可能にします。span要素と組み合わせます。した構造は、スタイルシートを使って視覚的に表現することが可能です。(7.5.4)仕様書では、div要素タイプを使って章、節を表現する例が挙げられています。Phrases"と題されていて、本文を構成する段落とその内部のフレーズのマークアップ、引用および空白文字や行の扱いについて定義しています。文章の基本であるパラグラフ(段落)を示すのはp要素タイプです。パラグラフとは見かけ上の改行のことではなく、ひとつのトピックを扱う文のまとまりを指します。仕様書ではこのパラグラフの考え方も簡潔に説明してくれます。(9.3)多くのブラウザはパラグラフの間に1行の空行を挿入しますが、これはHTMLの仕様で定められているわけではなく、歴史的経緯でそういうスタイルが一般化しているだけであることに注意してください。(9.3.5)スタイルシートを用いれば、普通の書籍のように、段落の間には空白を置かず、1字下げによって段落を示すことも可能になります。改行と空白文字HTML文書では、改行やスペースなどの空白文字は、pre要素以外では無視されることはよくご存知の通りです。この「無視される」というのは、厳密にはどういうことでしょうか。(9.1)連続する空白文字は「単語の境界」を示すと定義されています。ブラウザには、この単語境界を言語(script)や出力メディアに応じて適切に表現しなければなりません。(9.1)画像をリンクのアンカーとするときに、imgタグとaタグの間に改行を入れると古いブラウザでは「ヒゲ」が付いてしまうことがあります(画面8)。これは、ブラウザが改行を欧米言語の単語境界と考え、スペースを挿入したところにアンカーを意味する下線が表示されたわけですね。qとblockquote作者の考えと他の文献からの引用を区別することは極めて重要なので、HTMLではq要素タイプで文中の「引用句」を、blockquote要素タイプでひとまとまりの「ブロック引用」を明示します。q要素はその内容が引用句であることを意味するので、ブラウザはその部分を引用符で囲んで表示すべしということが仕様書に書かれています。(9.2.2)しかし、ブラウザの対応がまちまちであるため、この規定は難しい問題をはらんでいます。仕様書に従って""や「」の表示をブラウザに任せると、古いブラウザでは引用句が区別できません。逆に、q要素にテキストでこれらの記号を加えると、新しいブラウザでは引用符が重複して表示されてしまいます。q要素は、仕様とブラウザの実装のギャップが大きい例の一つです。ブロック引用は、「」を用いたり字下げで示したりと、作者によって表現方法はさまざまでしょう。仕様書でも、blockquote要素については、スタイルシートで適切な引用符が付与できるようにすべしと推奨するにとどめています。このblockquoteを単なるインデントのために使うという悪しき習慣は、まだ一部で残っているかもしれません。そのため、仕様書の記述は歯切れの悪いものになってしまいました。Note)不正確なタグ(要素タイプ)の用法は、このように本来の機能を阻害してしまうことがあります。ウェブの未来のためにも、仕様書をきちんと理解し、正しいHTMLを書くよう心がけましょう。http://www.kanzaki.com/works/2001/pub/wsd01.html。