iCalendar

Výčet komponent formátu iCalendar a typy dat, které mohou jednotlivé komponenty obsahovat.

iCalendar je standard (RFC 5545) pro výměnu kalendářových dat. Je též znám pod zkratkou iCal, což je též jméno kalendářového programu firmy Apple, který je jedním z programů, který tento formát využívá. Tento formát též podporují Mozilla Sunbird, Novell Evolution, Google Calendar, Microsoft Outlook či třeba Windows Calendar.

Standard iCalendar vznikl kvůli potřebě poskytovat otevřenou výměnu kalendářních a plánovacích informací (úkolů a schůzek mezi uživateli) v rámci internetu. Byl vydán komisí IETF v listopadu roku 1998 (RFC 2445) a jeho podoba byla založena na rané práci specifikace vCalendar. V roce 2009 byl vydán update standardu (RFC 5545). iCalendar byl vyvinut pro rozšíření internetové pošty MIME, ale standard je navržen tak, aby byl nezávislý na přenášeném protokolu. Proto může být sdílen i pomocí protokolů WebDAV nebo SyncML.

Jednoduché webové servery (poskytující pouze protokol HTTP) jsou často používány ke zveřejňování informací o individuálních plánech událostí, akcí a osobním pracovním vytížení. Pro zobrazení těchto informací v HTML (XHTML) lze použít například mikroformát hCalendar, který slouží k přesné interpretaci dat iCalendar do podoby HTML kódu.

Základní specifikace

Formát iCalendar byl navržen skupinou Calendaring and Scheduling Working Group (kterou založil pan Anik Ganguly z Open Text Corporation) ze sdružení Internet Engineering Task Force (zkratka IETF, česky „Komise techniky Internetu“) a autory jsou pánové Frank Dawson z Lotus Development Corporation a Derik Stenerson z Microsoft Corporation. Je založen na starším formátu vCalendar, jehož průmyslovou specifikaci vytvořili v ICM (Internet Mail Consortium)

Soubor iCalendar má příponu ics a data v něm jsou tvořena prostým textem (ASCII). Soubor s příponou ifb obsahuje informace o volném anebo obsazeném čase. Délka každého řádku v souboru může být maximálně 75 bytů (ne znaků) a je ukončen znakem CRLF (hex: 0D0A). Pokud je řádek delší, musí se pokračovat na novém řádku odsazeném mezerou (hex: 20) nebo tabulátorem (hex: 09). Při zalomení řádku v textu se používá sekvence „\n“ (hex: 5C6E). Z mezinárodních důvodů je doporučeno soubor ukládat ve formátu UTF-8.

Objekt kalendáře

Všechna data v souboru jsou umístěna v objektu kalendáře (Calendaring Core Object), což je kolekce informací o kalendáři. První a poslední řádek objektu má striktně danou podobu, jak je naznačeno na následujících řádcích které popisují Den oslav dobytí Bastily jako událost konající se od 14. července 1997 17:00 (UTC) do 15. července 1997 03:59:59 (UTC).

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:Bastille Day Party
END:VEVENT
END:VCALENDAR

První řádek datového souboru musí být: BEGIN:VCALENDAR, a poslední řádek END:VCALENDAR, obsah souboru mezi těmito dvěma řádky se nazývá icalbody. Tělo objektu kalendáře (icalbody) se skládá z popisu jeho vlastností a alespoň jedné komponenty. Kalendářní vlastnosti jsou atributy, které se vztahují na objekt kalendáře jako celku. Jména i hodnoty těchto vlastností jsou case-insensitive. Vlastnosti kalendáře mohou být:

  • VERSION – Představuje označení použité verze standardu iCalendar (aktuální je 2.0). Označení verze je povinná vlastnost objektu.
  • PRODID – Identifikátor, který by měl být globálně jedinečný. Objekt kalendáře musí tuto vlastnost obsahovat.
  • CALSCALE – Vlastnost definuje typ kalendáře. Když vlastnost není uvedena, předpokládá se typ gregoriánského kalendáře.
  • METHOD – Pokud je kalendář použit v rozšíření MIME, tak vlastnost METHOD musí mít parametr stejný jako hodnota Content-Type.

Kalendářové komponenty vyjadřují právě nějakou část kalendáře (mohou popisovat například událost, úkol, informace o časovém pásmu, volném nebo obsazeném čase anebo budík). Existuje mnoho různých typů kalendářových komponent popsaných standardem iCalendar, viz následující popis.

Komponenty kalendáře

Komponenta je sbírka vlastností, vyjadřujících konkrétní prvek kalendáře, například událost, úkol, alarm atd. Všechny komponenty začínají písmenem V.

Událost (VEVENT)

Komponenta VEVENT je označení události, která zabírá určitý časový úsek. Musí obsahovat vlastnosti DTSTART a DTEND deklarující začátek a konec události a UID definující identifikátor. Do VEVENT je také dovoleno vložit komponentu VALARM. Výjimkou, kdy událost nemusí obsahovat vlastnost DTEND, jsou opakující se poznámky bez udání přesného času (může být použito např. u výročí). Tyto události mají vlastnost DSTART typu DATE namísto DATE-TIME. Dále VEVENT může obsahovat vlastnosti kategorie, záznam poslední změny, souhrn a jiné. Příklad definice události:

BEGIN:VEVENT
UID:19970901T130000Z-123401@example.com
DTSTAMP:19970901T130000Z
DTSTART:19970903T163000Z
DTEND:19970903T190000Z
SUMMARY:Annual Employee Review
CLASS:PRIVATE
CATEGORIES:BUSINESS,HUMAN RESOURCES
END:VEVENT

Úkol (VTODO)

VTODO je komponenta definující úkol, který je potřeba vykonat. Musí obsahovat vlastnost UID pro identifikátor a může obsahovat start i konec události, záznam poslední změny, status, kategorii, souhrn a jiné. Ilustrace komponenty pro úkol:

BEGIN:VTODO
UID:20070313T123432Z-456553@example.com
DTSTAMP:20070313T123432Z
DUE;VALUE=DATE:20070501
SUMMARY:Submit Quebec Income Tax Return for 2006
CLASS:CONFIDENTIAL
CATEGORIES:FAMILY, FINANCE
STATUS:NEEDS-ACTION
END:VTODO

Deník (VJOURNAL)

Komponenta VJOURNAL popisuje záznam do deníku. Jednoduše připojí popisnou textovou poznámku k určitému datu kalendáře, může sloužit například k zaznamenávání seznamu aktivit během dne, nebo k popisu akcí vztahujících se k nějakému úkolu. Komponenta VJOURNAL nezabírá v kalendáři žádný čas ani nemá vliv na stav obsazení času (jako TRANSPARENT položka) V praxi se deníkové záznamy příliš nepoužívají, jsou implementovány například v programu Plum Canary's Chirp, který je používá kombinaci VTODO a VJOURNAL pro správu projektů. Jsou podporovány také programem KOrganizer, který je součástí balíku KDE.

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//ABC Corporation//NONSGML My Product//EN
BEGIN:VJOURNAL
DTSTAMP:19970324T120000Z
UID:uid5@host1.com
ORGANIZER:MAILTO:jsmith@host.com
STATUS:DRAFT
CLASS:PUBLIC
CATEGORY:Project Report, XYZ, Weekly Meeting
DESCRIPTION:Project xyz Review Meeting Minutes\n
 Agenda\n1. Review of project version 1.0 requirements.\n2.
 Definition
 of project processes.\n3. Review of project schedule.\n
 Participants: John Smith, Jane Doe, Jim Dandy\n-It was
  decided that the requirements need to be signed off by
  product marketing.\n-Project processes were accepted.\n
 -Project schedule needs to account for scheduled holidays
  and employee vacation time. Check with HR for specific
  dates.\n-New schedule will be distributed by Friday.\n-
 Next weeks meeting is cancelled. No meeting until 3/23.
END:VJOURNAL
END:VCALENDAR

Volný a obsazený čas (VFREEBUSY)

Komponenta popisuje požadavek na zjištění stavu obsazení v určitém čase, popisuje odpověď na tento dotaz a popisuje také sestavu pro zveřejnění obsazeného času.

Dle normy RFC2445 je popsána takto:

Pro zjištění stavu obsazení času existuje vlastnosti ATTENDEE specifikující uživatele kalendáře, jehož stav času je dotazován, ORGANIZER specifikuje který uživatel kalendáře se ptá a vlastnosti DTSTART a DTEND udávají časové rozmezí v němž je stav zjišťován. Vlastnosti UID a DTSTAMP slouží k určení pořadí dotazů v případě, že jich žádost obsahuje více.

Odpověď na dotaz stavu času obsahuje opět vlastnosti ATTENDEE, která specifikuje odpovídajícího uživatele (vlastník zjišťovaného kalendáře) a ORGANIZER v tomto případě značí původního tazatele – nyní tedy příjemce odpovědi. Vlastnost FREEBUSY určuje stav dotazovaného časového úseku. A opět vlastnosti UID a DTSTAMP určující pořadí ve více dotazech.

K publikování stavu času slouží vlastnosti ORGANIZER, jež i zde značí vlastníka (publikovaného) kalendáře, DTSTART a DTEND jsou časové údaje ohraničující oblast kalendáře označenou jako obsazený čas. Vlastnost FREEBUSY obsahuje popis obsazeného času a DTSTAMP informaci o tom, kdy byl objekt v kalendáři vytvořen.

Příklad publikovaného kalendáře:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//RDU Software//NONSGML HandCal//EN
BEGIN:VFREEBUSY
ORGANIZER:MAILTO:jsmith@host.com
DTSTART:19980313T141711Z
DTEND:19980410T141711Z
FREEBUSY:19980314T233000Z/19980315T003000Z
FREEBUSY:19980316T153000Z/19980316T163000Z
FREEBUSY:19980318T030000Z/19980318T040000Z
URL:http://www.host.com/calendar/busytime/jsmith.ifb
END:VFREEBUSY
END:VCALENDAR

Objekt iCalendar může být umístěn na serveru v souboru s příponou ifb.

Alarm (VALARM)

Komponenta VALARM popisuje alarm. Používá se pro událost VEVENT nebo úkol VTODO. Musí obsahovat vlastnosti ACTION, která popisuje reakci při spuštění alarmu a TRIGGER, který popisuje, kdy bude alarm spuštěn. Alarm se může také opakovat pomocí nastavení vlastnosti REPEAT, která udává počet opakování. S vlastností REPEAT musí být přítomna i DURATION udávající dobu, do které se bude alarm opakovat. Ilustrace definice alarmu:

BEGIN:VALARM
TRIGGER:-PT30M
REPEAT:2
DURATION:PT15M
ACTION:DISPLAY
DESCRIPTION:Breakfast meeting with executive\n
 team at 8:30 AM EST.
END:VALARM

Časová zóna (VTIMEZONE)

VTIMEZONE komponenta popisuje časovou zónu kalendáře. Definuje standardní a zimní čas pro dané časové pásmo a časový interval. VTIMEZONE nesmí být vnořený do žádné jiné komponenty, ale musí obsahovat TZID a také alespoň jednu definici času STANDARD nebo DAYLIGHT. Tyto definice musí zahrnovat DTSTART TZOFFSETFROM a TZOFFSETTO vlastnosti. V jenom kalendáři může být více VTIMEZONE, ale pak musí mít unikátní TZID. Tato možnost je nezbytná například pro letecké společnosti, kdy letadla startují v jedné zóně a přistávají v jiné. Příklad definice časové zóny:

BEGIN:VTIMEZONE
TZID:Fictitious
LAST-MODIFIED:19870101T000000Z
BEGIN:STANDARD
DTSTART:19671029T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19870405T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
END:VTIMEZONE

Distribuované aktualizace

Vlastnost UID se používá k usnadnění publikování změn v případě, že dojde ke změně plánování události v kalendáři. Při prvním vytvoření události je jí přiřazen globální unikátní identifikátor. Pokud je později publikována událost se stejným identifikátorem, je původní událost touto nahrazena. Identifikátor 5. srazu skupiny 131 2. semestru hypotetické VŠ může vypadat například Y2007S2C131M5@bigcitycollege.org.

Výměna dat iCalendar

Jak již bylo uvedeno výše, formát iCalendar je určen k popisu kalendářových dat a neobsahuje tedy popis jak s těmito daty pracovat. Proto je třeba použít nějaký jiný protokol pro práci s těmito daty. Těchto protokolů existuje několik, jedním z nich je například CalDAV (RFC 4791) nebo také iTIP (iCalendar Transport-Independent Interoperability) (RFC 2446) definující protokol pro výměnu dat kalendáře mezi uživateli kalendáře (Calendar Users (CUs)) – kdokoli zahájí libovolnou výměnu dat, stává se Organizátorem (Organizer). Tento standard obsahuje metody: PUBLISH, REQUEST, REPLY, ADD, CANCEL, REFRESH, COUNTER a DECLINE-COUNTER.

Dalším příkladem protokolu pro práci s daty iCal je IMIP (iCalendar Message-based Interoperability Protocol) (RFC 2447), který stanoví metody pro implementaci protokolu iTIP se standardním internetovým poštovním transportním protokolem (email).

Guide to Internet Calendaring (RFC 3283) popisuje vztah mezi formátem iCalendar a různými jinými standardy (současnými i budoucími).

Externí odkazy

Média použitá na této stránce

ICalendarSpecification.png
iCalendar components and their properties. (RFC 2445)