そろそろしっかりHTML その3:HTMLの構造-head要素、特にmeta要素-
あらすじ
なんとか号機よろしく顔面から汚染水を垂れ流しまくるひどい花粉症の僕。花粉が直ちに影響のないレベルにまでなんとかならないかと思ってwikipediaで花粉の項目を調べたところ、花粉とは要するに精子であるという衝撃の事実を知る。「僕は売れないAV女優か何かか」そう呟いておもむろにチェーンソーに手をかける僕。全国に乱立する杉の木と僕の、使用済み燃料棒よりも熱い戦いが今始まる・・・
あと、html4.01の仕様書を読んでたり読んでなかったりする。
htmlの構成要素は
- DTD宣言
- head要素
- body要素
の3つなんだけど、1のDTD宣言は前回見たので今日はhead要素。
head要素
HEAD要素は、当該文書についての情報を含む。 当該文書のタイトル、検索エンジンに有用であろうキーワード、その他文書自身のコンテンツではないと考えられるデータ類である。 ユーザエージェントは一般に、 HEAD要素中に現れる要素を、文書のコンテンツとしてはレンダリングしない。 その代わりに、HEAD要素にある情報を、他のメカニズムによってユーザが得られるようにするであろう。
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/struct/global.html
後述のtitleとかmetaタグとかscriptタグとかstyleタグなんかがheadの中に入るよ。
title要素
すべてのHTML文書には、HEAD中に、1つのTITLE要素があらねばならない。
著者は、当該文書の内容を識別するためにTITLE 要素を用いる必要がある。 ユーザは文脈抜きで文書を参照することがあるため、著者は文脈を踏まえたタイトルを提供する必要がある。 つまり、著者は、「概説」などの文脈不明なタイトルではなく、「中世の養蜂についての概説」のようなタイトルを提供しなければならない。
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/struct/global.html
title要素を省略したhtmlでもレンダリングされちゃうのは、ブラウザが勝手に補間してくれるから。どうでも良いけど、「中世の養蜂についての概説」って例はどうなのよ。いや、確かにちょっと読みたいけどさ。
meta要素
一般に、メタデータの指定には次の2つの手法が取られる。
1.プロパティとその値を宣言する。これには2通りのやり方がある。
1.文書中での、META要素による宣言。
2.文書外のメタデータへLINK要素でリンクする(リンク形式の項を参照のこと)。
2.プロパティとその正当な値を定義しているプロファイルを参照する。 プロファイルを指し示すのには、HEAD要素の profile属性を用いる。
とあるように、html文書のメタデータの指定で重要になるのは、meta要素。
meta要素は以下のような4種類の属性を持つ。
name = name
この属性は、プロパティの名前を識別させる。本仕様は、当該属性の正当な値集合を列挙しない。
content = cdata
この属性は、プロパティの値を指定する。本仕様は、当該属性の正当な値集合を列挙しない。
scheme = cdata
この属性は、プロパティ値の解釈に用いるべきスキームの名前を示す (詳しくはプロファイルの項を参照されたい)。
http-equiv = name
この属性はnameと置き換えて用いられ得る。HTTPサーバは、この属性を、HTTP応答メッセージヘッダに用いる情報を収集するために用いる。
斜体のnameとcdataについてはhttp://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/types.html#type-cdataを参照。
簡単に説明すると、nameはアルファベット・英数字・ハイフン・アンスコ・コロン・ピリオドでしか表現できない、cdataはそれ以外の文字も使えるよって感じ。
基本的にはプログラミング言語でいうところの連想配列みたいな感じで、name属性またはhttp-equiv属性でキーを、content属性でバリューを設定する。
<META name="Author" content="shimomura">
name属性がauthor,content属性がshimomuraなので、html文書にこのmetaタグが入っていた場合、この文書の「Author」は「shimomura」であるというメタデータを指定していることになる。
scheme属性はcontent属性の形式を指定する。
<META name="identifier" content="0-8230-2355-9">
この場合、name属性がidentifier(=識別子)、content属性が0-8230-2355-9なので、このhtml文書の識別子は0-8230-2355-9であるということを表しているが、この数字の羅列が識別子であること以外については何も触れていない。識別子はこの文書の著者が勝手に定めたオレオレ識別子なのかもしれないし、何かしらの国際規格とかの一種なのかもしれないが、
<META scheme="ISBN" name="identifier" content="0-8230-2355-9">
このようにscheme属性でcontent属性がなんであるかについて追加情報を示すことができる。この場合、content属性の謎の数字の羅列はISBNとして判断できる。
もう一つ付加的な情報を指定する属性として、lang属性がある。
<META name="Author" lang="en" content="shimomura">
この場合、authorはshimomuraで、しかもこのcontent属性(著者の名前)は英語であるということを表している。まぁ僕は実を言うとハーフなんでね。
http-equiv属性は、htmlがhttp経由で取得されるときにサーバがその属性地をHTTPヘッダーとして付加する。
<META http-equiv="Expires" content="Tue, 20 Aug 1996 14:25:27 GMT">
このようなmetaタグがあった場合は以下のようなHTTPヘッダーが付加される。
Expires: Tue, 20 Aug 1996 14:25:27 GMT
httpヘッダーについてはhttp://www.studyinghttp.net/rfc_ja/rfc2616を参照。
profile属性
上に書いたメタデータ指定方法の2つ目にprofile属性を使うというのがある。このprofile属性ってのは何なのかというと、これはDTDのようにmeta要素のname属性とその属性値を定義している。上に挙げた例のように、name属性がauthorでcontent属性がshimomuraの場合、その文書のauthorはshimomuraであるということを表しているが、じゃあauthorとは何なのか?ということについては定義していない。それを定義してくれるのが、profile属性なわけ。profile属性はhead要素に含まれるので、
<HEAD profile="http://www.acme.com/profiles/core">
というように定義する。
keyword属性
profile属性とか説明しちゃったわけだけども、そんなもん今まで見たことないし、使う予定もいまのところなさそう。現状多く使われているのはhttp-equivとgoogleなんかのクローラのためのkeyword属性らへんか。keyword属性についても仕様書ではちょこっとだけ言及されている。
META要素の一般用法に、キーワードの指定というものがあり、これは検索エンジンが検索結果の質を向上させるのに利用できる。 複数の META要素が同じ文書について言語依存の情報を提供している場合、そのlang属性を用いて、検索エンジンはユーザのユーザエージェント設定に合わせて検索結果を選別し得る。 例を示そう。<-- アメリカ英語向け -->
<META name="keywords" lang="en-us" content="vacation, Greece, sunshine"><-- イギリス英語向け -->
<META name="keywords" lang="en" content="holiday, Greece, sunshine"><-- フランス語向け -->
<META name="keywords" lang="fr" content="vacances, Grèce, soleil">