桜も開花して、また春がやってきましたね。花粉症の方は、ツライ時期もあと一息、といったところでしょうか。今月も先月に引き続き、徐々に関心が高まりつつあるHTML5の語彙(timeとruby)の紹介です。
time要素による日時の記述(続)
月をまたいでしまいましたが、time要素にも問題がないわけではありません。
- datetime属性で許容されている日時の形式
日時データについては、ISO 8601(最新版は2004年版)という標準がよく知られていますが、許容する形式の幅が広すぎたり、処理上、曖昧で不都合なものもあるということで、HTML5ではサブセット(部分集合)を独自に定義しています(※Y=年, M=月, D=日, h=時, m=分, s=秒、それぞれ1桁を意味する)。
| type | syntax | description |
|---|---|---|
| date | YYYY+ '-' MM '-' DD | 年4桁以上-月2桁-日2桁。省略不可。(ex. 2009-03-31) |
| time | hh ':' mm( ':' ss( '.' s+)?)? | 時2桁:分2桁:秒2桁.ミリ秒1桁以上。秒以下の記述は任意。(ex. 23:59:59.999) |
| dateYime | YYYY+ '-' MM '-' DD 'T' hh ':' mm(':' ss('.' s+)?)? ('Z' | ('+' | '-') hh ':' mm) | 上記 年月日と時分、さらにtimezoneの時差(グリニッジ標準時なら単に"Z")が必須。秒以下の部分のみ省略可。(ex. 2009-03-31T23:59+09:00) |
HTML5のdatetime属性で認められている値の形式は、アプリケーションでの処理のしやすさを重視して、曖昧さを徹底して排除すべく、かなり厳密に規定されています。たとえば月ごとの最大日数も、グレゴリオ暦(Gregorian calendar. 現行の標準暦)における閏年(leap year)を踏まえて、以下のように細かく決められています。
In the algorithms below, the number of days in month month of year year is: 31 if month is 1, 3, 5, 7, 8, 10, or 12; 30 if month is 4, 6, 9, or 11; 29 if month is 2 and year is a number divisible by 400, or if year is a number divisible by 4 but not by 100; and 28 otherwise. This takes into account leap years in the Gregorian calendar.
W3Cにも、従来の(X)HTMLなどで利用されているDate Time Format(以下、W3C-DTF)という、これまた非常にシンプルで曖昧さを排除した、ISO 8601(:1988)のサブセットがありますが、これは日付のない、時間だけの書式が認められていません。また年月日+時間表記だと、タイムゾーンの記述が必須となっている点でも、HTML5のdatetime形式と異なっています。
- HTML5 datetime形式の問題点
このようにHTML5の日時データの形式は、シンプルかつ明確に規定されいますが、逆に以下のような不備がしばしば指摘されています。
- W3C-DTFでも認められている、年のみ(YYYY)や、年月のみ(YYYY-MM)の記述すら認めていないこと。
- 紀元前の年代(negative years)が認められていないこと。(
Four or more digits, representing year, where year > 0
) - datetimeはグレゴリオ暦ベース。ユリウス暦など、ほかの暦(calendar)の日付はグレゴリオ暦に変換しないと、不正な値になるケースもある。(※ISO 8601もグレゴリオ暦ベース)
現在のところ、HTML WG(少なくともIan Hickson氏)は、これらの指摘によって仕様を変更することには消極的なようです。主な理由は、需要としてウェブ全体の20%を超えないと思われたり(We call this the 80/20 rule: Only 80% of use cases (by usage) are addressed, leaving the remaining 20% for future versions.
)、具体的なユースケース自体が明確でなかったりするためのようです。
HTML WGは、time要素の主たるユースケースとして、スケジュール管理アプリケーションでの利用を想定しているようですが、それ以前に、単純にウェブ検索サービスで、任意の日時や期間に関する情報を収集したいという需要も潜在的にかなりあるはずです(従来の自然言語解析では、検索結果にノイズが多数混入してしまい、マークアップによる意味づけの意義は小さくありません)。この場合、詳密な日時しか記述できないと逆に不便なことは言うまでもないでしょう。
次に、非グレゴリオ歴の扱いについて紹介します。
このエントリーをブックマークする
このエントリーにトラックバックする
このエントリーのトラックバックURL
http://withd.jp/mt/mt-tb.cgi/3549
WEBの新着記事
2009.06.29
行動につながる情報を見つけ出す
2009.06.25
人柄のデザイン
2009.06.25
Web標準と接する際の3つの留意点
2009.06.18
3年間ありがとうございました、のブックマーク放出
2009.06.11







