5W1H のマークアップ 1: When(日時)
ちょっと思い立って、5W1H の XHTML マークアップの手段について、少しずつ整理してみることにしました。
理由や意義については、また別エントリーを立てるとして、とりあえず今日のところは、When?(いつ?)...つまり、日時のマークアップ手段から。
(X)HTML
- 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) formats descriptions examples 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" />
- syntax
- datetime属性(del, ins要素)
- syntax
<del datetime="[W3C-DTF*]">foo</del><ins datetime="[W3C-DTF*]">bar</ins>
- examples
<del datetime="2007-03-07T21:09:00Z">削除文</del>
- resources
- syntax
現行の 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
microformat class names semantics hCard bday 誕生日 rev カレントリビジョンの作成・更新日時 tz タイムゾーン hCalendar dtstart 開始日時 dtend 終了日時 hReview dtreviewed レビューが書かれた日時 hAtom updated 更新日時 published 公開日時 XOXO datetime(変更の可能性あり) (汎用)日時 - 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
- datetime-design-pattern(Microformats)
- naming-principles(Microformats)
- Human vs. ISO8601 dates problem solved(Tantek's Thoughts)
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) elements semantics DCTERMS.created 作成日時 DCTERMS.valid 有効期間 DCTERMS.available 利用可能期間|期限 DCTERMS.issued 正式発行日時 DCTERMS.modified 更新日時 DCTERMS.dateAccepted 受理日時 DCTERMS.dateCopyrighted 著作権日時 DCTERMS.dateSubmitted 提出日 - syntax
<meta name="DC.date" content="[ISO 8601]" /><meta name="DCTERMS.[element]" content="[ISO 8601]" />
- 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
- variants
- 追記: 個人的な反省点(要修正項目)
- 長い。(読んでくれる人の時間を必要以上に奪わないように!)
- 唐突かつ無前提に術語が出てくる。術語を意に介さなくても、内容がわかる文章に!(「敷居を低く」するために HTML にこだわったのに、文章自体の敷居を上げてどーする!)
- HTML ネイティブ、Microformats、DublinCore の 3者全体を包括したまとめ評価と指針が欲しいところ。
精進します。(- -;;)
| 固定リンク
「[Web]XHTML」カテゴリの記事
- HTML の見出しをめぐる議論(2007.07.11)
- Re: XHTML+CSS (r)evolution, 3rdの内容は信ずるに値するか?(2007.06.03)
- 論理構造を文脈に読み換えながら class 名を考える(2007.05.30)
- 定義リストの違和感(続)(2007.05.28)
- 定義リストの違和感(2007.05.26)
この記事へのコメントは終了しました。


コメント