em要素とstong要素em要素とstrong要素は単に前者より後者が強いというようなものではなく、それぞれ別の意味合いを持つ要素なのではないかという考えを持っており、なんとなくそのように使い分けています。
同じ「強調」という論理的意味を持つ em・strong 両要素。果たして、マークアップのパターンが複数存在することの意義はあるのでしょうか。
em要素もstrong要素も、どちらも消去するというのはどうだろう。どちらもcode要素やdfn要素に比べるとより一般化されており、なぜ強調するのかの情報が全く含まれていないのだ。
まず、考えるべきは「定義語」「変数」「略語」といったキーワードは全て名詞である、ということだ。言い換えれば「この要素の内容は『定義語』であることを意味します」というフレーズが成り立つ。次に「強調」だ。「この要素の内容は『強調』であることを意味します」というフレーズはどこか変ではないだろうか。正確には「この要素の内容は『強調』されていることを意味します」にならないだろうか。つまり、「強調」は暗黙的に形容詞化されていると言える。よく「意味を定義する要素です」と一纏めに言われるこれらの要素も、実は2つのグループに分けることが出来るのではないだろうか。
個人的な見解を述べれば、XHTMLが要素でマークアップすべきメタデータは「定義語」や「変数」といった名詞で表現できる「内容の種類」であり、「強調されている」という形容詞的「状態」はそもそも違うレイヤーで定義すべきだと思う。
| 層 | 役割 | 該当する部分 | |
|---|---|---|---|
| 内容型定義 | 内容の種類(名詞)を定義 | 広い範囲 | ブロックレベル要素およびその属性(html、head、hn、p、etc) |
| 狭い範囲 | インラインレベル要素およびその属性(abbr、dfn、code、etc) |
||
| 状態定義 | より一般化された内容の文脈的意味合い(形容詞)を定義 | em、a、ins、del |
|
| 表現定義 | 内容型、および状態の表現(動詞)を定義 | CSSに依存 | |
たしかに、「強調」も見方によっては「内容の種類」とも取れる。言葉の難しいところだ。しかし、第3者からすれば、その内容の種類を推理するのに<font size="red">と同様、想像力を必要とするはずだ。「なぜ、なにが」強調されるかが抜けてしまっており、もしかしたら内容は「定義語」かもしれないし、「変数」かもしれない。逆に言えば、ほとんどの状況に置いて、あらゆる要素は他の部分と区別されるため、必然的に「強調された状態」になる可能性が高い。
同じような理由でa要素も怪しい。a要素は内容の状態を表している感がある。たとえば、
<a href="http://www.google.com/">Google</a>
というコードは「Google」という文字列がいったい何なのか、は全く述べていない。「あるURIにリンクされている」、という状態を定義しているだけだ。どちらかといえば、
<site_name href="http://www.google.com/">Google</site_name>
のほうがしっくり来る。
XHTML.0ではhref属性を様々な要素が持てるようになったのと同様、どの要素にも適応可能な「状態」を表すメタデータは属性に格納したほうがいい気がする。XMLは内容と属性という2層しかデータのレイヤーを持たないので、実装は難しいが、「~されている」系の「状態」を表すようなメタデータは要素から切り離した方がスッキリするのではないだろうか。そして、CSSによる表現を「状態」に対して行うことが出来ればさらに柔軟なスタイルの定義が出来るかも知れない。
<!-- レイヤーが足りないので強調度合いとリンク先のURIが指定できない -->
<site_name status="em link">Google</site_name>
<!-- 属性名と属性値で対応させるか -->
<site_name em="max" href="http://www.google.co./">Google</site_name>
/* 謎CSS */
(@em = "max") {
font-color: red;
}
(@em = "low") {
font-color: gray;
}
<!-- でもtitle属性は状態じゃないから混ぜるの気持ち悪いね -->
<abbr title="As Soon As Possible" em="max">ASAP</abbr>
<!-- 名前空間をレイヤーとして使えばいけるかも -->
<abbr title="As Soon As Possible" status:em="max">ASAP</abbr>
<!-- 要素でも良いけどわかりにくいかも -->
<status:em><abbr title="As Soon As Possible">ASAP</abbr></status:em>
| 層 | 役割 | 該当要素 | |
|---|---|---|---|
| 内容型定義 | 内容の種類(名詞)を定義 | 広い範囲 | ブロックレベル要素その属性(html、head、hn、p、etc) |
| 狭い範囲 | インラインレベル要素その属性(abbr、dfn、code、etc) |
||
| 状態定義 | より一般化された内容の文脈的意味合い(形容詞)を定義 | 他名前空間の属性 | |
| 表現定義 | 内容型、および状態の表現(動詞)を定義 | CSSに依存 | |
というわけで、HTMLで扱うのは「内容の種類」だけにして、「状態」は他の名前空間に追いやってしまうのが良いかもしれない。複雑すぎるかもしれないが。
ちなみに、先に白状してしまうと、この方式では文章の強調が難しい。
<p>ああ! <em>ジャン・ルイがやられた</em>。</p>
これをうまく要素で置き換えるのは困難だ。やはり「強調部分」のような、名詞は名詞でも(インスタンスが作れないような)やたらと抽象的な要素が必要になるだろう。
結局の所、リテラル文章が含まれるHTMLは根本的に中途半端な言語という結論に到達してしまう。ガッツがある人は文章構造を構造化した言語で書けばなんとかなるかも知れない。
http://yudai.arielworks.com/memo/2004/11/02/055220.trackback
末尾に「0 + 4」の計算結果を繋げて下さい。例えば計算結果が「17」の場合、「055220.trackback17」です。これは機械的なトラックバックスパムを防止するための措置です。