« My del.icio.us daily bookmarks | トップページ | When? を軸にした Webアプリケーションモデル »

2007-03-07

5W1H のマークアップ 1: When(日時)

ちょっと思い立って、5W1H の XHTML マークアップの手段について、少しずつ整理してみることにしました。

理由や意義については、また別エントリーを立てるとして、とりあえず今日のところは、When?(いつ?)...つまり、日時のマークアップ手段から。

(X)HTML

  1. meta name="date"
    • syntax
      • <meta name="date" content="[W3C-DTF]" />
      • [W3C-DTF]: YYYY-MM-DDThh:mm:ssTZD(≒ ISO 8601。必要に応じて、秒・分・時・日・月は省略可。
      • [TZD]: ±hh:mm | Z(タイムゾーン。日本なら "+09:00"。UTC 協定世界時なら "Z"。)
      追記: W3C-DTF のバリアントと (X)HTML における %Datetime について

      北村さんよりご指摘をいただきまして(→ はてブ コメント)、(X)HTML における ins | del 要素の datetime 属性の値が、W3C-DTF の中の "Complete date plus hours, minutes and seconds" YYYY-MM-DDThh:mm:ssTZD の書式に限定され、区切り文字や桁数・"T", "Z" の大文字使用にいたるまで忠実に沿っている必要がある(曖昧さを認めない)という点[HTML 4.01 Basic HTML data types]を、僕が見落としてたのに気づきました。ちなみに、秒数など細かい時間の指定が困難な場合は、値を "00" としておいて構わないとのこと。ご指摘、ありがとうございました。

      ついでに、ものすごく誤解されそうな表記になってしまっていた W3C-DTF で許容されている日時フォーマットの種類(全部で6パターン)も、あらためてちゃんと示しておきます。原則として (X)HTML %Datetime < W3C-DTF < ISO 8601 の順で書式が柔軟になっていきます。

      W3C Date Time Formats(W3C-DTF)
      formatsdescriptionsexamples
      YYYY(4桁で表記される)年のみ2007
      YYYY-MM年と月2007-03
      YYYY-MM-DD完全な年, 月, 日2007-03-08
      YYYY-MM-DD
      Thh:mmTZD
      完全な年, 月, 日, 時, 分とタイムゾーン2007-03-08T13:09+09:00
      YYYY-MM-DD
      Thh:mm:ssTZD
      完全な年, 月, 日, 時, 分, 秒とタイムゾーン2007-03-08T13:09:00+09:00
      ( (X)HTML %Datetime の指定書式)
      YYYY-MM-DD
      Thh:mm:ss.sTZD
      完全な年, 月, 日, 時, 分, 秒, 小数点以下の秒数とタイムゾーン2007-03-08T13:09:00.0+09:00
    • example
      • <meta name="date" content="2007-03-06T21:00:00+09:00" />
  2. datetime属性(del, ins要素)

現行の XHTML 単体で表現可能な日時情報(when?)は実はこれだけ。自文書の作成日時と body 内の部分編集(削除・挿入)日時しか扱えません。さすがに物足りないと感じたか、W3C XHTML 2.0 では datetime 属性が適用できる要素の幅を拡大し、併せて XHTML Edit Attribute Module で edit 属性を追加して、inserted(挿入) | deleted(削除) | changed(変更) | moved(移動)といった編集セマンティクスの拡張も行っています。

また WHATWG (X)HTML 5 でも、新たに time 要素を追加し、その固有属性として datetime 属性も利用できるようにしています。

examples using W3C XHTML 2.0
<span datetime="2007-03-07T09:30+09:00">2007年3月7日9時半</span>
<span datetime="2007-02-03">先月の3日</span>
<span datetime="2007-02-03" edit="moved">別の場所から移してきた文</span>
examples using WHATWG HTML 5
<time datetime="2007-03-07 09:30 +9">2007年3月7日9時半</time>
<time datetime="2007-02-03">先月の3日</time>

これにより、body 内の幅広い文脈に対して日時情報をマークアップできるようになるだけでなく、かねてから懸案となっていた日時表記に対する、人間可読性と機械可読性のジレンマも解消できるようになると期待されますが、実は現行の XHTML 1.n の範囲内でも利用できる、日時情報のマークアップデザインパターンが microformats で提案されています。

microformats

  • variants
    microformatclass namessemantics
    hCardbday誕生日
    revカレントリビジョンの作成・更新日時
    tzタイムゾーン
    hCalendardtstart開始日時
    dtend終了日時
    hReviewdtreviewedレビューが書かれた日時
    hAtomupdated更新日時
    published公開日時
    XOXOdatetime(変更の可能性あり)(汎用)日時
  • syntax
    • <abbr class="[variants]" title="[ISO 8601]">Date Time</abbr>
    • abbr要素を使う。
    • 日時の型(何の日時なのか)を class 属性値に記述。
    • 日付は title 属性値に ISO8601(≒W3C-DTF) の書式で記述。
    • 日付関係の class にはすべて "dt" という接頭辞をつける(ことになっていますが、例外や XOXO のように議論中のものもあります)。
  • examples
    hCalendar
    <abbr class="dtstart" title="2007-03-07T21:30:00+09:00">2007年3月7日 21時30分</abbr>
    hReview
    <abbr class="dtreviewed" title="2007-03-07">March 7th, 2007</abbr>
  • resources
microformats datetime デザインパターンの利点

この Microformats の abbr を使った日時情報のマークアップモデルは、なかなかいい妥協案だと思います。(ただし、必ずしも "略語" とは言い切れないケースもあるので、abbr を前提にしてしまうことが必ずしも良い選択なのかは微妙なところです。本当は span での利用も視野に入れた方が良いように思えるのですが。)少なくとも、現行 XHTML 1.n 規格の枠内で記述できる点と、人間可読性と機械可読性の両立を志向している点で高く評価できると思います。

そして、負の側面

ただ、何の日時なのかを指定すべき class 名が、個々の microformat に依存して(アプリケーションとしての?目的依存になって)しまいそうで、ここで定義されている class 名を、そのまま文脈に依存ぜずに汎用的に利用できるかどうかには一抹の不安が残ります。

また、microformats には一応、命名規約があるんですが、class 名に省略表記を用いたり用いなかったり、命名規約を遵守していたり、例外があったりと、イマイチ統一感に欠けるようです。特に省略表記や例外の存在は、そのまま microformats 自体の敷居を高めることにもなりかねません。"dtend" も、小文字のまま、区切り文字も使わずに接頭辞 "dt" を置いているので、最初、何を意味しているのか、まるでわかりませんでした。(僕の場合、先に用例から見て、"dt" 接頭辞のことを後で知ったので、当初は「"tend" は "role" とか "behaviour" と似て非なる何か?じゃあ、"d" って何だろ?」とかバカなことを延々と考えてました。よく見ると、直前に "dtstart" があって、ようやく得心。"dt:end" とか "dtEnd" とかだったらまだ類推できたんですが。(笑) )

ただ、この辺は、まだ microformats を勉強し始めたばかりの現段階での僕の印象なので、今後、経験値を蓄積すれば、背景事情など、色々と見えてくることもあるかもしれません。逆に、経験値を積んでなお初期の印象から変わらないようなら、その時は、自分でコミュニティに提案してみるという選択肢もあるわけですしね。

DublinCore

DublinCore日本語リソース)は、主に RDF を介してメタデータを記述する語彙セットで、CSS や JavaScript などと同様、XHTML に RDF を埋め込む方法や、外部 RDF に link する方法もあるんですが、このエントリーでは、より敷居の低い、XHTML 中に直接記述する手法に絞って取り上げます。

現行 XHTML で自文書の作成日を指定する場合に meta name="date" を使うという話はすでにしましたけど、厳密にはこれは "date" としか規定されておらず、作成日と公表日を分けたい場合や、改訂した日時も書き留めておきたい場合など、本の奥付のように、より細かな文書情報を記述したい場合があります。このような細かい指定をしたい場合には DublinCore の精密化要素が利用できます。DublinCore は図書館情報学など、学術分野ですでに一定の研究・利用実績があるのも強みの一つです。

  • DC.date(基本15要素のひとつ)
    • variants
      精密化要素(Element Refinements)
      elementssemantics
      DCTERMS.created作成日時
      DCTERMS.valid有効期間
      DCTERMS.available利用可能期間|期限
      DCTERMS.issued正式発行日時
      DCTERMS.modified更新日時
      DCTERMS.dateAccepted受理日時
      DCTERMS.dateCopyrighted著作権日時
      DCTERMS.dateSubmitted提出日
    • syntax
    • namespaces
      基本要素(DC.date)
      <link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />
      精密化要素
      <link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" />

      (ちなみに RDF を利用する場合は、<html xmlns:dc="http//purl.org/dc/elements/1.1/"> のように、名前空間の指定にちゃんと xmlns を使います。)

    • examples
      using XHTML 1.n
      <meta name="DC.date" content="2007-03-06T12:00:00+09:00" />
      <meta name="DCTERMS.modified" content="2007-03-07" />
      using XHTML 2.0 (xmlns required)
      <meta property="dc:created" content="2007-03-06T12:00:00+09:00" />
      <meta about="urn:isbn:4627829310" property="created" datatype="xsd:date">2005-01-07</meta>(meta 要素にコンテンツが持たせられるようになる。)
    • resources
追記: 個人的な反省点(要修正項目)
  • 長い。(読んでくれる人の時間を必要以上に奪わないように!)
  • 唐突かつ無前提に術語が出てくる。術語を意に介さなくても、内容がわかる文章に!(「敷居を低く」するために HTML にこだわったのに、文章自体の敷居を上げてどーする!)
  • HTML ネイティブ、Microformats、DublinCore の 3者全体を包括したまとめ評価と指針が欲しいところ。

精進します。(- -;;)

|

« My del.icio.us daily bookmarks | トップページ | When? を軸にした Webアプリケーションモデル »

[Web]XHTML」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/15394/5604045

この記事へのトラックバック一覧です: 5W1H のマークアップ 1: When(日時):

« My del.icio.us daily bookmarks | トップページ | When? を軸にした Webアプリケーションモデル »