ロジカルマークアップについて

パズルみたいで面白いのだけどコメント欄で、そもそもパンくずリストをどうマークアップすべきなのか? という話で盛り上がって(?)いる。HTML のセマンティクスに沿って論理構造を表現するマークアップは。。。ということなんだが、かなり違和感を感じる。

パンくずリストはデータ構造としては ordered list だから ol が妥当という。確かに HTML の仕様書では ul/ol は list of information を表現するとあるけど、HTML はデータ記述言語じゃない。人間が読む文書を記述するためのマークアップ言語だ(データ指向/文書指向 で言えば文書指向)。

ここでいうリストというのはリスト構造のことではなくて箇条書きのことだ。箇条書きのように見えるということではなくて、人間が文章の中で箇条書きで表現したくなるような意味内容を持つ情報をマークアップするのが ul/ol タグだと考えるべきではないか。パンくずリストをこの意味でのリストと見なすのは微妙。

いや、こういうふうに定義(の解釈)と付き合わせて吟味するのは良くないかもしれない。むしろ、タグを使うことの意味や使った結果が望ましいことになるのかどうかを考えた方がよいかもしれない。

あるテキストをあるタグでマークアップするのは、そのテキストをマークアップされていない(あるいは別のタグでマークアップされた)他のテキストと区別するためだが、裏返すと、同じタグでマークアップされたテキスト同士を同じもの(同じ型のデータ)として扱うということでもある。そうすることでテキストを便利に再利用できるようになる。たとえば文書から「見出し」を集めれば目次が作れる、というふうに。

箇条書きを ul/ol タグでマークアップするのは決まっているが、パンくずリストが「箇条書きと同じタグ」でマークアップされるのはその文書の利用者にとって便利なのだろうか? 言い換えると、箇条書きとパンくずリスト区別しないことは利用者にとって都合がよいことなのか? ということ。

私見だが、原則として意味的に強いタグは、強い意味付けを伴わない文脈では使わない方がよいと思う。文書を読む人間も文書を再利用するプログラムも文書を特徴付けるような情報を手がかりにして文書を処理するが、そのような情報をマークアップしていると期待されるタグが「強いタグ」。平たく言えば、そのタグでマークアップされた部分に絞り込んで検索をかけたくなるような、そういう感じの情報をマークアップするタグ。

「タイトルにXMLを含む文書」とか検索されまくりなので title タグは最強。見出しはその次。表とか箇条書きもレベルは落ちるけど、文書を特徴付ける情報を含む確率が高いのでかなり「強い」と思う。少なくともパンくずリストよりはずっと強いと思う。だから箇条書きとパンくずリストは区別してマークアップしたほうがよい。箇条書きの検索結果にはパンくずリストが混ざらないほうがよいから。

じゃあ、パンくずリストにはどのタグ使えばいいか、というと、なるべく意味のないタグってことで div とか span とか使うといいんじゃないでしょうか。W3C の仕様書の HTML でも、パンくずリストじゃないけどナビゲーションバーが div になってますね。

追記: p でもいいい?

id:wiseler さんからのトラバで「p でいいんじゃないか」というご意見。現実的にはそれでもほとんど問題ないと思うし、僕も最初ブクマコメントで p でもいいじゃんって書いてたけど、後でちょっと困ることがありえなくもないと気が付いてこの記事では div 推奨ってことにしました。

何が困るかというと、HTMLでは本文とそれ以外のUI的要素を明確に区別できないのでUI的要素で p を使ってしまうと「何段落目のテキスト」という指示のしかたがやりにくくなる、ということ。p はあくまで本文領域の段落をマークアップする、というのを徹底すれば p を数えるだけでよくて便利。

でも現実的にはそのへんの野良コンテンツにそれを期待できないので、p を数えて何段落目なんてやるシステムは一般的には使い物にならないし、今風の Web ページでは本文以外の色んな情報をマッシュアップ(?)して一つのページにまとめてしまうので、やはり何番目の p とかやっても意味がない。意味があるのは RSS入れ子にした HTML のコンテンツを扱う時くらいだけど、それならUI的要素に p 使おうが何しようが関係ないか。。。

まあ、p は本文の段落って決め打ちできるようにマークアップできれば自分が書く CSS とか XSLT とかが書きやすくなる、という利己的な理由であれば意味もあるので、p よりは div かなーと。

コメント欄にも書いたけど本気で論理と表現の分離とかやりたいなら、XML で必要なレベルでロジカルにマークアップできる言語を作って(または探してきて)、公開する用の HTML は機械的に生成する、ってしないとダメだと思います。

つーことでみんな XML とか XSLT とか RELAX NG とかやろうぜ! W3C XML Schema はやらなくていいです。



idトラックバック: