イベントカレンダーについて公開している情報

イベントカレンダーでは,Mac OS X の iCal に入力したデータから,XHTML のページや iCalendar, RDF Calendar, RSS 1.0 などを一括生成して公開しています.その手法などについて一部を公開します.

再利用できるイベントデータ

iCalendar ファイルや RDF/XML ファイルとしてイベントカレンダーのメタデータを配布します.iCalendar ファイルは,iCalMozilla Calendar,Outlook などで取り込む事ができます.

iCalendar
iCal で管理している公開できる自転車関連のイベント情報
RDFical
iCal で管理している公開できる自転車関連のイベント情報の RDF/XML 版
RSS
7 月からのイベント情報を RSS 1.0 形式にしたもの.

データ変換の流れ

およそ以下の流れで,iCal からデータを変換して,Web ページなどを生成しています.

  1. iCal でイベントの入力/編集
  2. iCal によって iCalendar ファイルが自動生成される
  3. ical2rdf.pl によって iCalendar ファイルが RDFical に変換される
  4. XSLT で,毎月のイベントや数日間のイベントなどを,1 日ごとに展開した RDF に変換
  5. XSLT で,1 日ごとに展開した RDF から RSS 1.0 を生成
  6. XSLT で,1 日ごとに展開した RDF から XHTML を生成

変換に用いているスクリプトファイルと XSLT

ぼくが書いた XSLT は,勝手に利用し,改変して配布してくださってかまいません.もっと良い書き方があれば教えてください.

ちょっと古い内容で,実際に使っている XSLT スタイルシートはもう少し改良しています.

ical2rdf.pl
iCalendar ファイルを RDF Calendar に変換する Perl スクリプト.CGI としても動くらしいです.神崎さんの Web サイトの「RDFicalをiCalendarに変換」からダウンロードできます.
rical2rical.xsl
RDF Calendar のイベントで,毎月のイベントとか数日間のイベントなどは後で扱いづらいので,1 日単位のイベントに展開してしまいます.RDF Calendar のファイルを 1 日単位のイベントからなる RDF Calendar のファイルに変換します.毎週のイベントってのは,対応していません.
rical2rss.xsl
RSS リーダでイベント情報が扱えるのも便利かなっておもったので,RDF Calendar のファイルを RSS 1.0 に変換する XSLT を用意してみました.もともとのイベントは foaf:topic として rss:item に埋め込みました.規格では uid はオプションだそうですが,変換時に uid に依存しているので,元データに uid がないとうまく動かないです.
rical2htmln1.xsl
RDF Calendar のファイルを変換して XHTML ファイルを生成します.カレンダーを table 要素で作りました.規格では uid はオプションだそうですが,変換時に uid に依存しているので,元データに uid がないとうまく動かないです.rical2html.xsl をインポートしています.

XSLT には xsltproc を利用しています.Xalan-Java でも大丈夫だと思います.EXSLT の Dates and Times を利用しているので,XSLT の処理系によっては,うまくいかないはずです.また,一般的な RDFical が変換できるのではなくて,iCal の iCalendar を ical2rdf.pl によって変換したものに対して有効です.例えば UID に依存した処理があるので,元の iCalendar に UID が無かったら,うまく処理できません.iCalendar の規格では UID は必須ではないそうです.

目的が iCal を利用して iCalendar や RDFical のファイルを配布すること,カレンダーの Web ページを生成することなので,あまり汎用的ではないです.

変換のためのシェルスクリプトの例

実際とは違うけど,こんな感じです.

#!/bin/sh
./ical2rdf.pl ‾/Library/Calendars/cycling-event.ics > cycling-event-cal.rdf
xsltproc rical2rical.xsl cycling-event-cal.rdf > current-cycling-event-cal.rdf
xsltproc rical2rss.xsl current-cycling-event-cal.rdf > current-cycling-event-rss.rdf
xsltproc rical2htmln1.xsl current-cycling-event-cal.rdf > calendar.html

ics2hevent の公開

2008-02-14 追記.

実際に使っているものを整理して公開しました.

説明は 2008 年 2 月 14 日付けの履歴もしくは日誌に書きました.

javascript による貼付け

どこかにイベント情報を貼付けられるように javascript を用意しました.

<script type="text/javascript" src="http://onohiroki.cycling.jp/calendar/current-cycling-event.js"></script>

上記の様に,どこかの Web ページに書き込むと,イベント情報のリストが javascript によって表示できます.

current-cycling-event.js の文字コードは UTF-8 ですが,他の漢字コードのものも用意しました.

current-cycling-event.js.euc
EUC-JP,いわゆる EUC です.
current-cycling-event.js.jis
ISO-2022-JP,いわゆる JIS コードです.
current-cycling-event.js.sjis

Shif_Jis,いわゆるシフト JIS です.