Tabelloversikt av iCalendar-komponenter og deres egenskaper
**iCalendar**, formelt kjent som **Internet Calendaring and Scheduling Core Object Specification**, er en spesifikasjon og mediatype som lar brukere opprette og utveksle kalenderinformasjon og planlegging av hendelser, gjøremål og journaloppføringer gjennom en fil med filetternavnet `.ics` (grunnleggende), mens varianten med filetternavnet `.ifb` også gir informasjon om man er ledig eller opptatt (tilgjengelighetsinformasjon). iCalendar-data har Multipurpose Internet Mail Extensions (MIME) -innholdstypen *tekst / kalender*. 

Ved hjelp av støttet programvare, for eksempel en epostleser eller digital kalender, kan mottakere av en iCalendar-fil enkelt svare avsenderen eller foreslå et annen dato eller møtetidspunkt. Filformatet er spesifisert i internett-standarden RFC 5545 for utveksling av kalenderdata.

iCalendar støttes og brukes i dag av mange applikasjoner, inkludert Google-kalender, Apple Kalender (tidligere kalt "iCal"), HCL Domino (tidligere IBM Notes og deretter Lotus Notes), Yahoo! Calendar , GNOME Evolution, eM Client, Lightning-utvidelsen for Mozilla Thunderbird og SeaMonkey, og delvis av Microsoft Outlook og Novell GroupWise.

iCalendar er designet for å være uavhengig av transportprotokollen. For eksempel kan visse hendelser sendes via tradisjonell epost, eller hele kalenderfiler kan deles og redigeres ved hjelp av en WebDav-tjener eller SyncML. Enkle vevtjenere (som bare bruker HTTP-protokollen) brukes ofte til å distribuere iCalendar-data om en hendelse og for å publisere når en person er opptatt. Utgivere kan bygge inn iCalendar-data på websider ved hjelp av hCalendar, en 1:1 mikroformat-representasjon av iCalendar i semantisk XHTML og HTML.

Historie
--------

I 1998 ble iCalendar opprettet av Arbeidsgruppen for kalender- og tidsplanlegging (*Calendaring and Scheduling Working Group*) i Internet Engineering Task Force under ledelse av Anik Ganguly fra Open Text Corporation og utviklerne Frank Dawson fra Lotus Development Corporation og Derik Stenerson fra Microsoft. iCalendar er sterkt basert på tidligere vCalendar utviklet av Internet Mail Consortium (IMC). RFC 5545 erstattet RFC 2445 i 2009 september tok deretter over som definisjonen på standarden.

Design
------

Som standard bruker iCalendar UTF-8 tegnsettet. Andre tegnsett kan spesifiseres ved hjelp av MIME-parameteren "charset" (dersom transportmetoden som brukes støtter MIME, for eksempel epost eller HTTP).

Hver linje avsluttes med CR+LF (heksadesimalt: 0D0A). Hver linje bør begrenses til en lengde på 75 oktetter (ikke tegn). Der hvor et dataelement er for langt til å passe på én enkelt linje kan man fortsette på følgende linjer ved å starte fortsettelseslinjene med et mellomrom (i hex: 20) eller et tabulatortegn (i hex: 09).

Faktiske linjematinger i dataelementer er kodet som en bakstrek etterfulgt av bokstaven n eller N (bitene 5C 6E eller 5C 4E i UTF-8).

Begrensninger og fremtid
------------------------

iCalendar-formatet er designet for å overføre kalenderbaserte data som for eksempel hendelser, og beskriver med vilje ikke hva som skal gjøres med disse dataene. Dermed kan det være nødvendig med annen programmering for å automatisere hvilke handlinger som skal foretas basert på disse dataene.

iCalendar er ment å "gi definisjonen av et felles format for åpen deling av kalender- og planleggingsinformasjon over internett". Mens det er god støtte i iCalendar for for de fleste vanlige funksjonene fører imidlertid noen avanserte funksjoner til problemer. For eksempel støtter de fleste epost- og kalender-leverandørene ikke Journals-funksjonen (VJOURNAL). VTODO har også hatt konverteringsproblemer.

iCalendar kalender er heller ikke kompatibel med enkelte ikke-gregorianske kalendere så som månekalenderne brukt i Israel og Saudi-Arabia.

Notatet "Calendar Access Protocol" (RFC 4324) var et første forsøk på et universelt system for å lage sanntidskalendere, men ble til slutt forlatt. Istedet fikk iCalendar noen adopsjon for slike formål med *ad hoc-*utvidelser som GroupDAV og CalDAV som har stått frem som uformelle standarder har fått noe adopsjon i både klient- og tjener-programvarepakker.

I 2011 januar avsluttet IETF Calendaring and Scheduling Working Group (kalt "ietf-calsify WG") sitt første forsøk på å forenkle iCalendar-standardene uten at resultatenene ble tatt i bruk. Arbeidet ble deretter plukket opp og fortsatt av IETF Calendaring *Extensions* Working Group" (kalt "ietf-cal*ext* WG").

Tekniske data
-------------

### Kjerneobjekt

Toppnivå-elementet i iCalendar heter Calendaring and Scheduling Core Object, og er en samling av kalender- og planleggingsinformasjon. Vanligvis vil denne informasjonen bestå av et enkelt iCalendar-objekt, men imidlertid kan også flere iCalendar-objekter grupperes sammen.

Den første linjen må være `BEGIN:VCALENDAR`, og den siste linjen må være `END:VCALENDAR`. Innholdet mellom disse linjene kalles "icalbody" (kroppen). Kroppen må inneholde kalenderegenskapene "PRODID" og "VERSION". I tillegg må den inneholde minst én kalenderkomponent. Merk også at mens denne artikkelen ofte bruker en e-poststilen `UID` (unik identifikator) så anses dette nå som dårlig praksis, og en universell unik identifikator (UUID) bør brukes istedet.

`VERSION` er 2.0 for gjeldende iCalendar-format per 2016. `VERSION: 1.0` ble brukt til å spesifisere at dataene er i det gamle vCalendar-formatet.

Kroppen til iCalendar-objektet (icalbody) inneholder enkeltlinjers *Calendar Properties* ("kalenderegenskaper") som gjelder for hele kalenderen, samt en eller flere blokker med flere linjer som hver definerer en *Calendar Component* ("kalenderkomponent") som for eksempel en hendelse, journaloppføring, alarm eller en av de andre typene som beskrevet nedenfor. Her følger er et enkelt eksempel på et iCalendar-objekt med én enkelt kalender som inneholder én enkelt *Calendar Component*, et arrangement kalt "Fest i anledning den franske nasjonaldag" som starter 1997 juli den 14. klokken 17:00 og slutter klokken 16:00 neste morgen.

```
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:uid1@example.com
DTSTAMP:19970714T170000Z
ORGANIZER;CN=Kari Nordmann:MAILTO:kari.nordmann@example.com
DTSTART:19970714T170000Z
DTEND:19970715T040000Z
SUMMARY:Fest i anledning den franske nasjonaldagen
GEO:59.9130;10.7400
END:VEVENT
END:VCALENDAR

```

#### Dato- og tidsformat

*Se også: Koordinert universaltid og ISO 8601*
Den vanligste representasjonen av dato og klokkeslett er et *tz-tidsstempel*, for eksempel `20010911T124640Z` med formatet `<år (4 sifre)><måned (2)><dag (2)>T<time (2)><minutt (2)><sekund (2)>Z` for en total fast lengde på 16 tegn. *Z* indikerer her bruk av UTC (som i sin tid refererte til "zulu-tidssonen"). Når man bruker `DTSTART` og `DTEND` -egenskapene er starttider inkluderende, mens sluttider ikke er det. Dette muliggjør at en sluttiden til en hendelse kan være den samme som starten av en påfølgende hendelses uten at disse hendelsene overlapper hverandre og potensielt skaper (falske) planleggingskonflikter.

#### Hendelser (VEVENT)

`VEVENT` beskriver en hendelse som har en planlagt tidsperiode i en kalender. Vanligvis når en bruker godtar kalenderhendelsen vil dette føre til at tiden blir ansett som opptatt. En `VEVENT` kan inkludere en `VALARM` som tillater en alarm. Slike hendelser har en `DTSTART` som setter en starttid, og en `DTEND` som setter en sluttid. Dersom kalenderhendelsen gjentar seg vil `DTSTART` sette opp starttidspunktet for den første hendelsen.

Eksempel på en VALARM-kode (påminnelse 1 dag før):

```
BEGIN:VALARM
TRIGGER:-PT1440M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM

```
`VEVENT` brukes også til kalenderhendelser uten en bestemt tid, som for eksempel jubileer og daglige påminnelser. Dersom brukeren må sende inn en avbestilling for en hendelse skal UID være den samme som den opprinnelige hendelsen, og komponentegenskapene skal settes til avbryt.

```
METHOD:CANCEL
STATUS:CANCELLED

```

For å sende en `UPDATE` (oppdatering) for et arrangement bør `UID` samsvare med den originale `UID`-en. Den andre komponentegenskapen som skal settes er:

```
SEQUENCE:<Num of Update>
```
For den første oppdateringen vil dermed:

```
SEQUENCE:1
```
I Microsoft Outlook tilsvarer `SUMMARY` med "emne"-oppføringen i "avtaleskjemaet", og `DESCRIPTION` til den beskrivende teksten under den. I tillegg krevde Outlook 2002 og Outlook 2003 en `UID` og en `DTSTAMP`.

#### Gjøremål (VTODO)

VTODO beskriver et gjøremål, altså et handlingselement eller en oppgave.

Ikke alle kalenderprogrammer anerkjenner VTODO-elementer. Spesifikt vil ikke Outlook eksportere oppgaver som VTODO-elementer, og ignorerer VTODO-elementer i importerte kalendere.

Følgende er et eksempel på en oppgave som forfaller 1998 april 15. En lydalarm er spesifisert for å minne kalenderbrukeren ved middagstid (kl. 12:00) dagen før oppgaven forventes å være fullført, og gjenta hver time opptil fire ganger til. SEQUENCE-elementet viser at denne oppgaven har blitt endret to ganger siden den ble opprettet.

```
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//ABC Corporation//NONSGML My Product//EN
BEGIN:VTODO
DTSTAMP:19980130T134500Z
SEQUENCE:2
UID:uid4@example.com
DUE:19980415T235959
STATUS:NEEDS-ACTION
SUMMARY:Sende inn skattemelding
BEGIN:VALARM
ACTION:AUDIO
TRIGGER:19980414T120000
ATTACH;FMTTYPE=audio/basic:http://example.com/pub/audio-
 files/ssbanner.aud
REPEAT:4
DURATION:PT1H
END:VALARM
END:VTODO
END:VCALENDAR

```

#### Journalføring (VJOURNAL)

VJOURNAL er en journaloppføring. De legger ved en beskrivende tekst til en bestemt kalenderdato, og kan brukes til å registrere en daglig oversikt over aktiviteter eller prestasjoner, eller beskrive fremgang relatert til en gjøremålsoppføring. En "VJOURNAL"-kalenderkomponent tar ikke opp tid på en kalender, og har dermed ingen effekt på ledig eller opptatt tid (akkurat som TRANSPARENT-oppføringer). I praksis er det få programmer som støtter VJOURNAL-oppføringer, men det finnes eksempler: Plum Canary sin Chirp-programvare bruker VTODO og VJOURNAL sammen. VJOURNAL støttes også av KOrganizer fra KDE Desktop og Evolution fra GNOME desktop.

Følgende er et eksempel på en journaloppføring:

```
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//ABC Corporation//NONSGML My Product//EN
BEGIN:VJOURNAL
DTSTAMP:19970324T120000Z
UID:uid5@example.com
ORGANIZER:MAILTO:jsmith@example.com
STATUS:DRAFT
CLASS:PUBLIC
CATEGORIES: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

```
(Merk: Dette eksemplet er hentet fra RFC 2445 med korreksjonen at ordet CATEGORIES ble endret fra CATEGORY som var en feil i den opprinnelige RFC-en.)

#### Ledig/opptatt tid (VFREEBUSY)

VFREEBUSY kan enten være en forespørsel om ledig eller opptatt tid, et svar på en forespørsel, eller en publisert mengde med opptatt tid.

Følgende er et eksempel på publisert informasjon om opptatt tid:

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

```

#### Andre komponenttyper

Andre komponenttyper inkluderer **VAVAILABILITY**, **VTIMEZONE** (tidssone) og **VALARM** (alarm). Enkelte komponenter kan inneholde andre komponenter (VALARM er ofte inkludert i andre komponenter).

#### Distribuering av oppdateringer

UID-feltet distribuerer oppdateringer når en planlagt hendelse endres. Når hendelsen først genereres opprettes en globalt unikt identifikator. Hvis en senere hendelse distribueres med samme UID erstatter den nye den opprinnelige.

### Kalenderutvidelser

vCalendar og iCalendar støtter private programvareutvidelser med et X-prefiks, hvorav flere er i vanlig bruk. Noen av disse inkluderer:

* X-RECURRENCE-ID: En vCalendar 1.0-utvidelse som etterligner iCalendar 2.0 RECURRENCE-ID (Nokia S60 3. utgave)
* X-EPOCAGENDAENTRYTYPE: Definerer klientens kalendertype
* X-FUNAMBOL-AALARMOPTIONS
* X-FUNAMBOL-ALLDAY: Et flagg som indikerer at et arrangement varer hele dagen
* X-MICROSOFT-CDO-ALLDAYEVENT: Microsoft Outlook-flagg som indikerer at et arrangement varer hele dagen
* X-MICROSOFT-CDO-BUSYSTATUS: Statusinformasjonfor Microsoft Outlook
* X-MICROSOFT-CDO-INTENDEDSTATUS
* X-WR-CALNAME: Visningsnavnet på kalenderen
* X-WR-CALDESC: En beskrivelse av kalenderen
* X-WR-RELCALID: En globalt unik identifikator for kalenderen
* X-WR-TIMEZONE
* X-PUBLISHED-TTL: Anbefalt oppdateringsintervall for abonnement på kalenderen
* X-ALT-DESC: Brukes for å inkludere HTML-markering i beskrivelsen av en hendelse. Standard DESCRIPTION-tagger bør inneholde ikke-HTML-versjonen.

### vCalendar 1.0

iCalendar sitt første design var basert på det forrige filformatet **vCalendar** opprettet av Internet Mail Consortium (IMC).

Under følger et eksempel på informasjon med vCalendar-formatet:

```
BEGIN:VCALENDAR
VERSION:1.0
BEGIN:VEVENT
CATEGORIES:MEETING
STATUS:TENTATIVE
DTSTART:19960401T033000Z
DTEND:19960401T043000Z
SUMMARY:Gjennomgang av forslaget ditt
DESCRIPTION:Ola og Kari går gjennom det nyeste forslaget
CLASS:PRIVATE
END:VEVENT
END:VCALENDAR

```
Versjon 1.0 brukte filetternavnet `.vcs`. Etter at iCalendar ble utgitt uttalte Internet Mail Consortium at de håpte at "alle vCalendar-utviklere drar nytte av disse nye åpne standardene og gjør programvaren deres kompatibel med både vCalendar 1.0 og iCalendar."

### Representasjon

#### xCal

xCal er en XML-representasjon av iCalendar-data, og er definert i RFC 6321 .

#### jCal

jCal er en JSON-representasjon av iCalendar-data, og er definert i RFC 7265 .

#### hCalendar

hCalendar er en (x)HTML representasjon av en delmengde av iCalendar-data ved hjelp av mikroformater.

#### hEvent

hEvent er en HTML-representasjon av en delmengde av iCalendar-data ved hjelp av mikroformater for å rette opp i bekymringer rundt tilgjengelighet med hCalendar-formatet.

Se også
-------

* CalDAV, en standard for planlegging, deling, søking og synkronisering av kalenderdata med brukere på samme eller på eksterne servere. Bruker iCalendar-formatet for kalenderdataene.
* GroupDAV, et alternativ til CalDav. Tjenere kan støtte begge deler.
* hCalendar (HTML iCalendar), en standard for visning av iCalendar-hendelser på websider gjennom (X)HTML-representasjon
* Scheduling OSID, en grensesnitt-abstraksjon for integrering av kalendersystem ved hjelp av forskjellige kalenderprotokoller
* vCard (VCF), et filformat for elektroniske visittkort
* Webcal, en uoffisiell URI-ordning

Fotnoter
--------

1. ↑  The standard and file type are sometimes referred to as "iCal", which was the name of the Apple Inc. calendar program until 2012 (see iCal), which provides one of the implementations of the standard.
2. ↑  A companion standard, "iCalendar Transport-Independent Interoperability" (iTIP) (RFC 2446), defines a protocol for exchanging iCalendar objects for collaborative calendaring and scheduling between "Calendar Users" (CUs) facilitated by an "Organizer" initiating the exchange of data. This standard defines methods such as PUBLISH, REQUEST, REPLY, ADD, CANCEL, REFRESH, COUNTER (to negotiate a change in the entry), and DECLINE-COUNTER (to decline the counter-proposal).

Another companion standard, "iCalendar Message-based Interoperability Protocol (iMIP)" (RFC 2447), defines a standard method for implementing iTIP on standard Internet email-based transports.

The "Guide to Internet Calendaring" (RFC 3283) explains how iCalendar interacts with other calendar computer language (current and future).
3. ↑  CalConnect, 2004
4. ↑  CalConnect, 2004
5. ↑  Although there exist one-to-one mappings between Gregorian and many other calendar scales, the lack of defined CALSCALE values for those calendars and limitations in various date fields can make native support impossible. For example the Hebrew calendar year may contain either 12 or 13 months, and the Japanese Emperor-based calendar scale contains many eras.
6. 1 2 3  From RFC 2445
7. ↑  But an event can be set to be "TRANSPARENT" to change this interpretation.
8. ↑  These events would have a `DATE` value type for the `DTSTART` property instead of the default `DATE-TIME`, and need not include a `DTEND` property.
9. ↑  As described in RFC 2445:

> When used to request free/busy time information, the "ATTENDEE" property specifies the calendar users whose free/busy time is being requested; the "ORGANIZER" property specifies the calendar user who is requesting the free/busy time; the "DTSTART" and "DTEND" properties specify the window of time for which the free/busy time is being requested; the "UID" and "DTSTAMP" properties are specified to assist in proper sequencing of multiple free/busy time requests.

> When used to reply to a request for free/busy time, the "ATTENDEE" property specifies the calendar user responding to the free/busy time request; the "ORGANIZER" property specifies the calendar user that originally requested the free/busy time; the "FREEBUSY" property specifies the free/busy time information (if it exists); and the "UID" and "DTSTAMP" properties are specified to assist in proper sequencing of multiple free/busy time replies.

> When used to publish busy time, the "ORGANIZER" property specifies the calendar user associated with the published busy time; the "DTSTART" and "DTEND" properties specify an inclusive time window that surrounds the busy time information; the "FREEBUSY" property specifies the published busy time information; and the "DTSTAMP" property specifies the date/time that iCalendar object was created.
10. ↑  From RFC 2445 The
iCalendar object might be placed at some URL with the extension ".ifb"
11. ↑  Some components are often defined to support other components defined after them (VTIMEZONE is often used this way).Mal:Clarify
12. ↑  An example UID might be "Y2007S2C131M5@example.edu", for the 5th meeting of class 131 in semester 2 at a hypothetical college.

Referanser
----------

1. ↑  Mal:Cite IETF
2. ↑  «IBM Lotus Notes 8.5 iCalendar: Interoperability, implementation, and application». IBM DeveloperWorks. Besøkt 5. april 2015.
3. ↑  «iCalendar.org». Z Content. Besøkt 28. mars 2018.
4. ↑  «Calendaring and Scheduling Standards Simplification (calsify)». IETF. Besøkt 5. april 2015.
5. ↑  Lear, Eliot. «the end of calsify working group– not the end of the mailing list». Arkivert fra originalen 9. desember 2012. Besøkt 5. april 2015.
6. ↑  «Calendaring Extensions (calext)». IETF. Besøkt 1. desember 2016.
7. ↑  «[RFC5546] Section 3.4 Methods for VTODO Components». Besøkt 7. august 2015.
8. ↑  «[MS-OXCICAL]: Property: X-WR-RELCALID». Besøkt 23. februar 2016.
9. ↑  «vCalendar: The Electronic Calendaring and Scheduling Exchange Format, Version 1.0». Internet Mail Consortium. Arkivert fra originalen 21. mars 2016. Besøkt 28. mars 2018.
10. ↑  «Personal Data Interchange - vCard and vCalendar». Internet Mail Consortium. Arkivert fra originalen 6. september 2015. Besøkt 28. februar 2016.

Eksterne lenker
---------------

* RFC 5545  Internet Calendaring and Scheduling Core Object Specification (iCalendar) (erstatter RFC 2445 )
* RFC 5546  iCalendar Transport-Independent Interoperability Protocol (iTIP) (erstatter RFC 2446 )
* RFC 6047  iCalendar Message-Based Interoperability Protocol (iMIP) (erstatter RFC 2447 )
* RFC 6321  xCal: The XML format for iCalendar (iCalendar sin XML-representasjon)
* RFC 6868  oppdatering av dataformatene for å inkludere visse tegn, forbudt av den eksisterende spesifikasjonen, i parameterverdier
* RFC 7265  jCal: JSON-formatet til iCalendar
* RFC 7986  Nye egenskaper for iCalendar (tilleggsegenskaper til iCalendar-spesifikasjonen)
* «An Introduction to Internet Calendaring and Scheduling». CalConnect.
* «Personal Data Interchange - vCard and vCalendar». Internet Mail Consortium. Arkivert fra originalen 27. februar 2017.  En beskrivelse av forholdet mellom vCard, vCalendar og iCalendar, og en kopi av IMC sin forespørsel om at implementører støtter både vCalendar og iCalendar.
* «iCalendar Resources».  En liste over ressurser for iCalendar og relaterte standarder.

| * v
* d
* r
Kalenderprogramvare |
| --- |
| Standarder | 
* iCalendar
* CalDAV
* DAViCal
* Web Calendar Access Protocol
* Webcal
* Relaterte standarder:
	+ SyncML
	+ vCard
	+ WebDav

 |
| Nåværende implementasjoner | 
* ical (Unix-pakke)
* cal (Unix-kommando)
* Kontact
* GNOME Evolution
* Google Kalender
* Kalender (Apple)
* Calendar (Windows)
* Microsoft Outlook
	+ Outlook Web Access
	+ Outlook.com
* Yahoo! Calendar

 |
| Utgått | 
* MobileMe
* Mozilla Calendar Project

 |