カレンダーコンポーネント(Calendar Components) [iCalendar]
さて、続いて3.6 Calendar Componentsですが、「カレンダーコンポーネント」ってなんだ?と思ったところ、先日の記事の例で出てきた「VEVENT」の部分の様です。
で、iCalendarオブジェクトは、カレンダープロパティと今回のカレンダーコンポーネントから構成されるとのこと。ちなみに、カレンダーコンポーネントは1つ以上存在できる様です(と言うか、一つは必須なんですかね・・)。
カレンダープロパティとカレンダーコンポーネントの区別は下記の通りです。
続きの節構成をみると、カレンダーコンポーネントとしては、下記の6種類が存在しているようです。
カレンダーコンポーネントの定義は下記のとおりとなっています。
う~ん、定義の中にアラームが入ってませんね・・。ま、追々分かってくるんでしょう・・。
さて、定義を見ればわかるものもありますが、iCalendarオブジェクトに関し、下記の注意事項が書かれていました。
この章で、ようやくiCalendarオブジェクトの全体が見えてきましたねぇ・・。できれば、ここから書いて欲しかった様な気もしますが・・。
つづく。
で、iCalendarオブジェクトは、カレンダープロパティと今回のカレンダーコンポーネントから構成されるとのこと。ちなみに、カレンダーコンポーネントは1つ以上存在できる様です(と言うか、一つは必須なんですかね・・)。
カレンダープロパティとカレンダーコンポーネントの区別は下記の通りです。
カレンダープロパティ | iClendarオブジェクト全体に適用される属性 |
カレンダーコンポーネント | 特定の内容に関するプロパティの集合 |
続きの節構成をみると、カレンダーコンポーネントとしては、下記の6種類が存在しているようです。
カレンダーコンポーネントの定義は下記のとおりとなっています。
icalbody = calprops component calprops = *( ; ; The following are REQUIRED, ; but MUST NOT occur more than once. ; prodid / version / ; ; The following are OPTIONAL, ; but MUST NOT occur more than once. ; calscale / method / ; ; The following are OPTIONAL, ; and MAY occur more than once. ; x-prop / iana-prop ; ) component = 1*(eventc / todoc / journalc / freebusyc / timezonec / iana-comp / x-comp) iana-comp = "BEGIN" ":" iana-token CRLF 1*contentline "END" ":" iana-token CRLF x-comp = "BEGIN" ":" x-name CRLF 1*contentline "END" ":" x-name CRLF |
う~ん、定義の中にアラームが入ってませんね・・。ま、追々分かってくるんでしょう・・。
さて、定義を見ればわかるものもありますが、iCalendarオブジェクトに関し、下記の注意事項が書かれていました。
- 「PRODID」「VERSION」を含む(MUST)
- 少なくともの一つのカレンダーコンポーネントを含む(MUST)
- 「VFREEBUSY」や「VTIMEZONE」のみのiCalendarオブジェクトも可(special formだとのこと)
- 多数の異なるカレンダーコンポーネントを含むことも可
- 「VEVENT」「VTODO」「VJOURNAL」のいずれか1つのみを含むものが一般的
- アプリは「x-comp」「iana-comp」が理解できなければ無視する(MUST)
- アプリはiCalendarオブジェクトのインポートが可能な場合は、本仕様のすべてのコンポーネントタイプをサポートすべき(SHOULD)
- アプリはiCalendarオブジェクトのインポートが可能な場合は、いかなるコンポーネントも削除しないべき(SHOULD NOT)
この章で、ようやくiCalendarオブジェクトの全体が見えてきましたねぇ・・。できれば、ここから書いて欲しかった様な気もしますが・・。
つづく。
プロパティ [iCalendar]
つづいて3.5 Propertyです。プロパティパラメータについては、こちらとこちらで見ましたが、今回はその大元のプロパティの記述についてですね。
プロパティは、こちらやこちらで見た「contentline」の記法によって記述するとのこと。例えば以下の様な感じです。
この仕様の中では、iCalendarオブジェクト内のプロパティに特別な順序は無いとか。また、下記の項目については、大文字、小文字の区別はありません。
例えば、下記の表記は同じとなります。
プロパティについては、以上の様ですね。
プロパティは、こちらやこちらで見た「contentline」の記法によって記述するとのこと。例えば以下の様な感じです。
DTSTART:19960415T133000Z |
この仕様の中では、iCalendarオブジェクト内のプロパティに特別な順序は無いとか。また、下記の項目については、大文字、小文字の区別はありません。
- プロパティ名(property names)
- パラメータ名(parameter names)
- 列挙子(enumerated parameter values)
例えば、下記の表記は同じとなります。
- 「DUE」と「due」と「Due」
- 「DTSTART;TZID=America/New_York:19980714T120000」と「DtStart;TzID=America/New_York:19980714T120000」
プロパティについては、以上の様ですね。
iCalendarオブジェクト [iCalendar]
不十分なところはあるものの、一通り型についてはなめたので、続けて3.4 iCalendar Objectを眺めて行きます。
カレンダー、スケジュールの情報(Calendaring and Scheduling Core Object)は、iCalendar Objectのストリームとなるとのこと。iCalender Objectの始まりと終端は「iCalendar object delimiter」だとのこと(MUST)。iCalendar streamは下記の様に定義されています。
iCalendar objectの例として、下記のデータが記されています。
う~ん、色々と分からない内容が出てきていますが、大きなのは、iCalendarオブジェクト内に「VEVENT」と言うオブジェクトが含まれている点ですかねぇ・・。「VEVENT」の他にこれと同列のものに何があるのかに興味がわきます・・。
この節はシンプルにこれだけでした。
カレンダー、スケジュールの情報(Calendaring and Scheduling Core Object)は、iCalendar Objectのストリームとなるとのこと。iCalender Objectの始まりと終端は「iCalendar object delimiter」だとのこと(MUST)。iCalendar streamは下記の様に定義されています。
icalstream = 1*icalobject icalobject = "BEGIN" ":" "VCALENDAR" CRLF icalbody "END" ":" "VCALENDAR" CRLF |
iCalendar objectの例として、下記のデータが記されています。
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//hacksw/handcal//NONSGML v1.0//EN BEGIN:VEVENT UID:19970610T172345Z-AF23B2@example.com DTSTAMP:19970610T172345Z DTSTART:19970714T170000Z DTEND:19970715T040000Z SUMMARY:Bastille Day Party END:VEVENT END:VCALENDAR |
う~ん、色々と分からない内容が出てきていますが、大きなのは、iCalendarオブジェクト内に「VEVENT」と言うオブジェクトが含まれている点ですかねぇ・・。「VEVENT」の他にこれと同列のものに何があるのかに興味がわきます・・。
この節はシンプルにこれだけでした。
TEXT型 [iCalendar]
さて、続いて、TEXT型ヘ読み進んで行きます。って、これまでどういう風に進んで行ってたのか確かめたところ、RECUR以外はまとめて処理したのに、TEXT型だけ抜けてましたね・・。まあ、ここでまとめときましょう。
この型は人間が読むことのできるテキストを含む値を定義する際に使用される型だとのことです。そのままですね。
型の定義は以下の通り。
定義中、「DQUOTE」は0x16で、「NON-US-ASCII」の定義は下記の通りです。が、「WSP」の定義が見当たりません・・・。たぶん空白文字なんですが、どうなんでしょうねぇ・・。
ルールは下記の通りの様です。
「TEXT」は型だけでなく、プロパティの名前としても使用されている様ですね・・。と言うか、型名は普通は表に出て来ないか・・。
以上、こんな感じですかね・・。
この型は人間が読むことのできるテキストを含む値を定義する際に使用される型だとのことです。そのままですね。
型の定義は以下の通り。
text = *(TSAFE-CHAR / ":" / DQUOTE / ESCAPED-CHAR) ; Folded according to description above ESCAPED-CHAR = ("\\" / "\;" / "\," / "\N" / "\n") ; \\ encodes \, \N or \n encodes newline ; \; encodes ;, \, encodes , TSAFE-CHAR = WSP / %x21 / %x23-2B / %x2D-39 / %x3C-5B / %x5D-7E / NON-US-ASCII ; Any character except CONTROLs not needed by the current ; character set, DQUOTE, ";", ":", "\", "," |
定義中、「DQUOTE」は0x16で、「NON-US-ASCII」の定義は下記の通りです。が、「WSP」の定義が見当たりません・・・。たぶん空白文字なんですが、どうなんでしょうねぇ・・。
NON-US-ASCII = UTF8-2 / UTF8-3 / UTF8-4 ; UTF8-2, UTF8-3, and UTF8-4 are defined in [RFC3629] |
ルールは下記の通りの様です。
- 複数の値が許容される場合は、COMMA(0x2c)で区切ってリストとする
- 「LANGUAGE」プロパティでテキストの言語を指定する事も可
- 改行は「TEXT」プロパティ値のみに設定可で、「\N」か「\n」で指定(MUST)
-
「TEXT」プロパティ値にSEMICOLON(0x3b)やCOMMA(0x2c)の様な文字を利用する際はバックスラッシュでエスケープする(MUST)
→ESCAPED-CHARとして定義されているものですね - COLON(0x3a)はエスケープしない(SHALL NOT)
「TEXT」は型だけでなく、プロパティの名前としても使用されている様ですね・・。と言うか、型名は普通は表に出て来ないか・・。
以上、こんな感じですかね・・。