Recent from talks
Nothing was collected or created yet.
ICalendar
View on Wikipedia| ICalendar | |
|---|---|
| Filename extension |
.ical, .ics, .ifb, .icalendar |
| Internet media type |
text/calendar |
| Type of format | Calendar data exchange |
| Standard | RFC 5545 (Updated by: RFC 5546, RFC 6868, RFC 7529, RFC 7986) |
| Open format? | Yes |
The Internet Calendaring and Scheduling Core Object Specification (iCalendar) is a media type which allows users to store and exchange calendaring and scheduling information such as events, to-dos, journal entries, and free/busy information,[1] and together with its associated standards has been a cornerstone of the standardization and interoperability of digital calendars across different vendors. Files formatted according to the specification usually have an extension of .ics. With supporting software, such as an email reader or calendar application, recipients of an iCalendar data file can respond to the sender easily or counter-propose another meeting date/time. The file format is specified in a proposed Internet standard (RFC 5545) for calendar data exchange. 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.
iCalendar is used and supported by many products, including:
- general consumer: Apple Calendar (formerly iCal), eM Client, Google Calendar, Yahoo! Calendar
- corporate: HCL Domino (formerly IBM Notes and Lotus Notes)[2]
- free software: GNOME Evolution, GNU Emacs, Mozilla Thunderbird, and SeaMonkey
It is partially supported by Microsoft Outlook and Novell GroupWise.
iCalendar is designed to be independent of the transport protocol. For example, certain events can be sent by traditional email or whole calendar files can be shared and edited by using a WebDav server, or SyncML. Simple web servers (using just the HTTP protocol) are often used to distribute iCalendar data about an event and to publish busy times of an individual. Publishers can embed iCalendar data in web pages using hCalendar, a 1:1 microformat representation of iCalendar in semantic (X)HTML.
History
[edit]
iCalendar was created in 1998[3] by the Calendaring and Scheduling Working Group of the Internet Engineering Task Force, chaired by Anik Ganguly of Open Text Corporation, and was authored by Frank Dawson of Lotus Development Corporation and Derik Stenerson of Microsoft Corporation. iCalendar data files are plain text files with the extension .ics or .ifb (for files containing availability information only). RFC 5545 replaced RFC 2445 in September 2009 and now defines the standard.
iCalendar is heavily based on the earlier vCalendar by the Internet Mail Consortium (IMC) which has the .vcs file extension.[4] After iCalendar was released, the Internet Mail Consortium stated that it "hopes that all vCalendar developers take advantage of these new open standards and make their software compatible with both vCalendar 1.0 and iCalendar."[5]
The memo "Calendar Access Protocol" (RFC 4324) was an initial attempt at a universal system to create real-time calendars, but was eventually abandoned. Instead, iCalendar saw some adoption for such purposes with ad hoc extensions such as GroupDAV and CalDAV emerging as informal standards and seeing some adoption in both client and server software packages.
A first effort to simplify iCalendar standards by the IETF "Calendaring and Scheduling Working Group" (ietf-calsify WG) ended in January 2011 without seeing adoption.[6][7] The work was then picked up by the "Calendaring Extensions Working Group" (ietf-calext WG).[8]
Design
[edit]iCalendar data have the MIME content type text/calendar. The filename extension of ics is to be used for files containing calendaring and scheduling information, ifb for files with free or busy time information consistent with this MIME content type. The equivalent file type codes in Apple Macintosh operating system environments are iCal and iFBf.
By default, iCalendar uses the UTF-8 character set; a different character set can be specified using the "charset" MIME parameter (if the transport method used supports MIME, such as Email or HTTP). Each line is terminated by CR+LF (in hexadecimal: 0D0A). Lines should be limited to 75 octets (not characters) long. Where a data item is too long to fit on a single line it can be continued on following lines by starting the continuation lines with a space character (in hex: 20) or a tab character (in hex: 09). Actual line feeds in data items are encoded as a backslash followed by the letter n or N (the bytes 5C 6E or 5C 4E in UTF-8).
The iCalendar format is designed to transmit calendar-based data, such as events, and intentionally does not describe what to do with that data. Thus, other programming may be needed to negotiate what to do with this data. 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).
The top-level element in iCalendar is the Calendaring and Scheduling Core Object, a collection of calendar and scheduling information. Typically, this information will consist of a single iCalendar object. However, multiple iCalendar objects can be grouped together. The first line must be BEGIN:VCALENDAR, and the last line must be END:VCALENDAR; the contents between these lines is called the "icalbody". The body must include the "PRODID" and "VERSION" calendar properties. In addition, it must include at least one calendar component.[9]
VERSION:1.0 is used to specify that data is in the old vCalendar format. VERSION is 2.0 for the current iCalendar format as of 2016.
The body of the iCalendar object (the icalbody) contains single-line Calendar Properties that apply to the entire calendar, as well as one or more blocks of multiple lines that each define a Calendar Component such as an event, journal entry, alarm, or one of several other types. Here is a simple example of an iCalendar object with a single calendar containing a single Calendar Component, a "Bastille Day Party" event starting at 5pm on July 14, 1997, and ending at 4am the following morning:[10]
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:uid1@example.com
ORGANIZER;CN=John Doe:MAILTO:john.doe@example.com
DTSTAMP:19970701T100000Z
DTSTART:19970714T170000Z
DTEND:19970715T040000Z
SUMMARY:Bastille Day Party
GEO:48.85299;2.36885
END:VEVENT
END:VCALENDAR
The UID field distributes updates when a scheduled event changes. When the event is first generated a globally unique identifier is created. If a later event is distributed with the same UID, it replaces the original one. An example UID might be Y2007S2C131M5@example.edu, for the 5th meeting of class 131 in semester 2 at a hypothetical college. Email-style UIDs are now considered bad practice, with a UUID recommended instead.[11]
The most common representation of date and time is a tz timestamp based on ISO 8601 format, such as 20010911T124640Z, with the format <year (4 digits)><month (2)><day (2)>T<hour (2)><minute (2)><second (2)>Z for a total fixed length of 16 characters. Z indicates the use of UTC (referring to its Zulu time zone).[12] When used in DTSTART and DTEND properties, start times are inclusive while end times are not. This allows an event's end time to be the same as a consecutive event's start without those events overlapping and potentially creating (false) scheduling conflicts.[13]
Components include:
- VEVENT describes an event, which has a scheduled amount of time on a calendar. Normally, when a user accepts the calendar event, this will cause that time to be considered busy, though an event can be set to be TRANSPARENT to change this interpretation. A VEVENT may include a VALARM which allows an alarm. Such events have a DTSTART which sets a starting time, and a DTEND which sets an ending time. If the calendar event is recurring, DTSTART sets up the start of the first event.
- VTODO explains a to-do item, i.e., an action-item or assignment. Not all calendar applications recognize VTODO items. In particular, Outlook does not export Tasks as VTODO items, and ignores VTODO items in imported calendars.[14]
- VJOURNAL is a journal entry. They attach descriptive text to a particular calendar date, may be used to record a daily record of activities or accomplishments, or describe progress with a related to-do entry. A VJOURNAL calendar component does not take up time on a calendar, so it has no effect on free or busy time (just like TRANSPARENT entries). In practice, few programs support VJOURNAL entries.
- VFREEBUSY is a request for free/busy time, is a response to a request, or is a published set of busy time.[clarification needed]
- Other component types include VAVAILABILITY, VTIMEZONE (time zones) and VALARM (alarms). Some components can include other components (VALARM is often included in other components). Some components are often defined to support other components defined after them (VTIMEZONE is often used this way).[clarification needed]
iCalendar is meant to "provide the definition of a common format for openly exchanging calendaring and scheduling information across the Internet". While the features most often used by users are widely supported by iCalendar, some more advanced capabilities have problems. For example, most vendors do not support Journals (VJOURNAL). VTODOs have had conversion problems as well.[15]
iCalendar's calendar is also not compatible with some non-Gregorian calendars such as the lunar calendars used in Israel and Saudi Arabia. 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.
Extensions
[edit]vCalendar and iCalendar support private software extensions, with a "X-" prefix, a number of which are in common usage.
Some of these include:
X-RECURRENCE-ID: vCalendar 1.0 extension which mimics the iCalendar 2.0 RECURRENCE-ID (Nokia S60 3rd Edition)X-EPOCAGENDAENTRYTYPE: defines the client calendar typeX-FUNAMBOL-AALARMOPTIONSX-FUNAMBOL-ALLDAY: All Day event flagX-MICROSOFT-CDO-ALLDAYEVENT: Microsoft Outlook all day event flagX-MICROSOFT-CDO-BUSYSTATUS: Microsoft Outlook status informationX-MICROSOFT-CDO-INTENDEDSTATUSX-WR-CALNAME: The display name of the calendarX-WR-CALDESC: A description of the calendarX-WR-RELCALID: A globally unique identifier for the calendar[16]X-WR-TIMEZONEX-PUBLISHED-TTL: Recommended update interval for subscription to the calendarX-ALT-DESC: Used to include HTML markup in an event's description. Standard DESCRIPTION tag should contain non-HTML version.X-FMTTYPE,X-FILEDATE,X-NAME,X-CN,X-STATUS,X-ROLE,X-SENTBY,X-SYMBIAN-DTSTAMP,X-METHOD,X-RECURRENCE-ID,X-EPOCALARM,X-SYMBIAN-LUID,X-EPOCAGENDAENTRYTYPE[17]
List of components, properties, and parameters
[edit]| Name | Kind | RFC section (RFC 5545[1]: 155–159, section 8.3 by default) | MS-OXCICAL section 2.1.3[18] subsections |
|---|---|---|---|
| VCALENDAR | Component | 3.4. iCalendar Object | 1.1 |
| VEVENT | Component | 3.6.1. Event Component | 1.1.20 |
| VTODO | Component | 3.6.2. To-Do Component | |
| VJOURNAL | Component | 3.6.3. Journal Component | |
| VFREEBUSY | Component | 3.6.4. Free/Busy Component | |
| VTIMEZONE | Component | 3.6.5. Time Zone Component | |
| STANDARD | Component | 3.6.5. Time Zone Component | 1.1.19.2 |
| DAYLIGHT | Component | 3.6.5. Time Zone Component | 1.1.19.3 |
| VALARM | Component | 3.6.6. Alarm Component | |
| VAVAILABILITY | Component | RFC 7953 section 3.1. VAVAILABILITY Component | |
| AVAILABLE | Component | RFC 7953 section 3.1. VAVAILABILITY Component | |
| PARTICIPANT | Component | RFC 9073 section 7.1. Participant | |
| VLOCATION | Component | RFC 9073 section 7.2. Location | |
| VRESOURCE | Component | RFC 9073 section 7.3. Resource | |
| CALSCALE | Property | 3.7.1. Calendar Scale | |
| METHOD | Property | 3.7.2. Method | 1.1.1 |
| PRODID | Property | 3.7.3. Product Identifier | 1.1.2 |
| VERSION | Property | 3.7.4. Version | 1.1.3 |
| X-CALEND | Property | 1.1.4 | |
| X-CALSTART | Property | 1.1.5 | |
| X-CLIPEND | Property | 1.1.6 | |
| X-CLIPSTART | Property | 1.1.7 | |
| X-MICROSOFT-CALSCALE | Property | 1.1.8 | |
| X-MS-OLK-FORCEINSPECTOROPEN | Property | 1.1.9 | |
| X-MS-WKHRDAYS | Property | 1.1.10 | |
| X-MS-WKHREND | Property | 1.1.11 | |
| X-MS-WKHRSTART | Property | 1.1.12 | |
| X-OWNER | Property | 1.1.13 | |
| X-PRIMARY-CALENDAR | Property | 1.1.14 | |
| X-PUBLISHED-TTL | Property | 1.1.15 | |
| X-WR-CALDESC | Property | 1.1.16 | |
| X-WR-CALNAME | Property | 1.1.17 | |
| X-WR-RELCALID | Property | 1.1.18 | |
| ATTACH | Property | 3.8.1.1. Attachment | 1.1.20.1 |
| CATEGORIES | Property | 3.8.1.2. Categories, RFC 7986 section 5.6. CATEGORIES Property | 1.1.20.3 |
| CLASS | Property | 3.8.1.3. Classification | 1.1.20.4 |
| COMMENT | Property | 3.8.1.4. Comment | 1.1.20.5 |
| DESCRIPTION | Property | 3.8.1.5. Description, RFC 7986 section 5.2. DESCRIPTION Property | 1.1.20.11, 1.1.20.62.3 |
| GEO | Property | 3.8.1.6. Geographic Position | |
| LOCATION | Property | 3.8.1.7. Location | 1.1.20.15 |
| PERCENT-COMPLETE | Property | 3.8.1.8. Percent Complete | |
| PRIORITY | Property | 3.8.1.9. Priority | 1.1.20.17 |
| RESOURCES | Property | 3.8.1.10. Resources | 1.1.20.21 |
| STATUS | Property | 3.8.1.11. Status | 1.1.20.23 |
| SUMMARY | Property | 3.8.1.12. Summary | 1.1.20.24 |
| COMPLETED | Property | 3.8.2.1. Date-Time Completed | |
| DTEND | Property | 3.8.2.2. Date-Time End | 1.1.20.8 |
| DUE | Property | 3.8.2.3. Date-Time Due | |
| DTSTART | Property | 3.8.2.4. Date-Time Start | 1.1.19.2.1, 1.1.19.3.1, 1.1.20.10 |
| DURATION | Property | 3.8.2.5. Duration | 1.1.20.12 |
| FREEBUSY | Property | 3.8.2.6. Free/Busy Time | |
| TRANSP | Property | 3.8.2.7. Time Transparency | 1.1.20.25 |
| TZID | Property | 3.8.3.1. Time Zone Identifier | 1.1.19.1 |
| TZNAME | Property | 3.8.3.2. Time Zone Name | 1.1.19.2.3, 1.1.19.3.3 |
| TZOFFSETFROM | Property | 3.8.3.3. Time Zone Offset From | 1.1.19.2.4, 1.1.19.3.4 |
| TZOFFSETTO | Property | 3.8.3.4. Time Zone Offset To | 1.1.19.2.5, 1.1.19.3.5 |
| TZURL | Property | 3.8.3.5. Time Zone URL | |
| ATTENDEE | Property | 3.8.4.1. Attendee | 1.1.20.2 |
| CONTACT | Property | 3.8.4.2. Contact | 1.1.20.6 |
| ORGANIZER | Property | 3.8.4.3. Organizer | 1.1.20.16 |
| RECURRENCE-ID | Property | 3.8.4.4. Recurrence ID | 1.1.20.20 |
| RELATED-TO | Property | 3.8.4.5. Related To, RFC 9253 section 9.1. RELATED-TO | |
| URL | Property | 3.8.4.6. Uniform Resource Locator, RFC 7986 section 5.5. URL Property | |
| UID | Property | 3.8.4.7. Unique Identifier, RFC 7986 section 5.3. UID Property | 1.1.20.26 |
| EXDATE | Property | 3.8.5.1. Exception Date-Times | 1.1.20.13 |
| RDATE | Property | 3.8.5.2. Recurrence Date-Times | 1.1.20.18 |
| RRULE | Property | 3.8.5.3. Recurrence Rule | 1.1.19.2.2, 1.1.19.3.2, 1.1.20.19 |
| ACTION | Property | 3.8.6.1. Action | 1.1.20.62.2 |
| REPEAT | Property | 3.8.6.2. Repeat Count | |
| TRIGGER | Property | 3.8.6.3. Trigger | 1.1.20.62.1 |
| CREATED | Property | 3.8.7.1. Date-Time Created | 1.1.20.7 |
| DTSTAMP | Property | 3.8.7.2. Date-Time Stamp | 1.1.20.9 |
| LAST-MODIFIED | Property | 3.8.7.3. Last Modified, RFC 7986 section 5.4. LAST-MODIFIED Property | 1.1.20.14 |
| SEQUENCE | Property | 3.8.7.4. Sequence Number | 1.1.20.22 |
| REQUEST-STATUS | Property | 3.8.8.3. Request Status | |
| X-ALT-DESC | Property | 1.1.20.27 | |
| X-MICROSOFT-CDO-ALLDAYEVENT | Property | 1.1.20.28 | |
| X-MICROSOFT-CDO-APPT-SEQUENCE | Property | 1.1.20.29 | |
| X-MICROSOFT-CDO-ATTENDEE-CRITICAL-CHANGE | Property | 1.1.20.30 | |
| X-MICROSOFT-CDO-BUSYSTATUS | Property | 1.1.20.31 | |
| X-MICROSOFT-CDO-IMPORTANCE | Property | 1.1.20.32 | |
| X-MICROSOFT-CDO-INSTTYPE | Property | 1.1.20.33 | |
| X-MICROSOFT-CDO-INTENDEDSTATUS | Property | 1.1.20.34 | |
| X-MICROSOFT-CDO-OWNERAPPTID | Property | 1.1.20.35 | |
| X-MICROSOFT-CDO-OWNER-CRITICAL-CHANGE | Property | 1.1.20.36 | |
| X-MICROSOFT-CDO-REPLYTIME | Property | 1.1.20.37 | |
| X-MICROSOFT-DISALLOW-COUNTER | Property | 1.1.20.38 | |
| X-MICROSOFT-EXDATE | Property | 1.1.20.39 | |
| X-MICROSOFT-ISDRAFT | Property | 1.1.20.40 | |
| X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT | Property | 1.1.20.41 | |
| X-MICROSOFT-MSNCALENDAR-BUSYSTATUS | Property | 1.1.20.42 | |
| X-MICROSOFT-MSNCALENDAR-IMPORTANCE | Property | 1.1.20.43 | |
| X-MICROSOFT-MSNCALENDAR-INTENDEDSTATUS | Property | 1.1.20.44 | |
| X-MICROSOFT-RRULE | Property | 1.1.20.45 | |
| X-MS-OLK-ALLOWEXTERNCHECK | Property | 1.1.20.46 | |
| X-MS-OLK-APPTLASTSEQUENCE | Property | 1.1.20.47 | |
| X-MS-OLK-APPTSEQTIME | Property | 1.1.20.48 | |
| X-MS-OLK-AUTOFILLLOCATION | Property | 1.1.20.49 | |
| X-MS-OLK-AUTOSTARTCHECK | Property | 1.1.20.50 | |
| X-MS-OLK-COLLABORATEDOC | Property | 1.1.20.51 | |
| X-MS-OLK-CONFCHECK | Property | 1.1.20.52 | |
| X-MS-OLK-CONFTYPE | Property | 1.1.20.53 | |
| X-MS-OLK-DIRECTORY | Property | 1.1.20.54 | |
| X-MS-OLK-MWSURL | Property | 1.1.20.55 | |
| X-MS-OLK-NETSHOWURL | Property | 1.1.20.56 | |
| X-MS-OLK-ONLINEPASSWORD | Property | 1.1.20.57 | |
| X-MS-OLK-ORGALIAS | Property | 1.1.20.58 | |
| X-MS-OLK-SENDER | Property | 1.1.20.61 | |
| BUSYTYPE | Property | RFC 7953 section 3.2. Busy Time Type | |
| NAME | Property | RFC 7986 section 5.1. NAME Property | |
| REFRESH-INTERVAL | Property | RFC 7986 section 5.7. REFRESH-INTERVAL Property | |
| SOURCE | Property | RFC 7986 section 5.8. SOURCE Property | |
| COLOR | Property | RFC 7986 section 5.9. COLOR Property | |
| IMAGE | Property | RFC 7986 section 5.10. IMAGE Property | |
| CONFERENCE | Property | RFC 7986 section 5.11. CONFERENCE Property | |
| CALENDAR-ADDRESS | Property | RFC 9073 section 6.4. Calendar Address | |
| LOCATION-TYPE | Property | RFC 9073 section 6.1. Location Type | |
| PARTICIPANT-TYPE | Property | RFC 9073 section 6.2. Participant Type | |
| RESOURCE-TYPE | Property | RFC 9073 section 6.3. Resource Type | |
| STRUCTURED-DATA | Property | RFC 9073 section 6.6. Structured-Data | |
| STYLED-DESCRIPTION | Property | RFC 9073 section 6.5. Styled-Description | |
| ACKNOWLEDGED | Property | RFC 9074 section 6.1. Acknowledged Property | |
| PROXIMITY | Property | RFC 9074 section 8.1. Proximity Property | |
| CONCEPT | Property | RFC 9253 section 8.1. Concept | |
| LINK | Property | RFC 9253 section 8.2. Link | |
| REFID | Property | RFC 9253 section 8.3. Refid | |
| ALTREP | Parameter | 3.2.1. Alternate Text Representation | 1.1.20.15.1 |
| CN | Parameter | 3.2.2. Common Name | 1.1.13.1, 1.1.20.2.1, 1.1.20.16.1, 1.1.20.61.1 |
| CUTYPE | Parameter | 3.2.3. Calendar User Type | 1.1.20.2.2 |
| DELEGATED-FROM | Parameter | 3.2.4. Delegators | |
| DELEGATED-TO | Parameter | 3.2.5. Delegatees | |
| DIR | Parameter | 3.2.6. Directory Entry Reference | |
| ENCODING | Parameter | 3.2.7. Inline Encoding | 1.1.20.1.1 |
| FMTTYPE | Parameter | 3.2.8. Format Type | 1.1.20.1.2, 1.1.20.27.1 |
| FBTYPE | Parameter | 3.2.9. Free/Busy Time Type | |
| LANGUAGE | Parameter | 3.2.10. Language | 1.1.20.11.1, 1.1.20.15.2, 1.1.20.24.1 |
| MEMBER | Parameter | 3.2.11. Group or List Membership | |
| PARTSTAT | Parameter | 3.2.12. Participation Status | 1.1.20.2.3 |
| RANGE | Parameter | 3.2.13. Recurrence Identifier Range | |
| RELATED | Parameter | 3.2.14. Alarm Trigger Relationship | |
| RELTYPE | Parameter | 3.2.15. Relationship Type, RFC 9074 section 7.1. Relationship Type Property Parameter, RFC 9253 sections 4 and 5 | |
| ROLE | Parameter | 3.2.16. Participation Role | 1.1.20.2.4 |
| RSVP | Parameter | 3.2.17. RSVP Expectation | 1.1.20.2.5 |
| SENT-BY | Parameter | 3.2.18. Sent By | |
| TZID | Parameter | 3.2.19. Time Zone Identifier | 1.1.4.1, 1.1.5.1, 1.1.6.1, 1.1.7.1, 1.1.11.1, 1.1.12.1, 1.1.20.8.1, 1.1.20.9.1, 1.1.20.10.1, 1.1.20.13.1, 1.1.20.18.1, 1.1.20.20.1, 1.1.20.48.1 |
| VALUE | Parameter | 3.2.20. Value Data Types | 1.1.20.1.3, 1.1.20.8.2, 1.1.20.10.2, 1.1.20.13.2, 1.1.20.18.2, 1.1.20.20.2, 1.1.20.39.1, 1.1.20.45.1 |
| X-FILENAME | Parameter | 1.1.20.1.4 | |
| X-MS-OLK-RESPTIME | Parameter | 1.1.20.2.6 | |
| X-MICROSOFT-ISLEAPMONTH | Parameter | 1.1.20.45.2 | |
| DISPLAY | Parameter | RFC 7986 section 6.1. DISPLAY Property Parameter | |
| Parameter | RFC 7986 section 6.2. EMAIL Property Parameter | ||
| FEATURE | Parameter | RFC 7986 section 6.3. FEATURE Property Parameter | |
| LABEL | Parameter | RFC 7986 section 6.4. LABEL Property Parameter | |
| ORDER | Parameter | RFC 9073 section 5.1. Order | |
| SCHEMA | Parameter | RFC 9073 section 5.2. Schema | |
| DERIVED | Parameter | RFC 9073 section 5.3. Derived | |
| GAP | Parameter | RFC 9253 section 6.2. Gap | |
| LINKREL | Parameter | RFC 9253 section 6.1. Link Relation |
Other representations
[edit]xCal is an XML representation of iCalendar data, as defined in RFC 6321.
jCal is a JSON representation of iCalendar data, as defined in RFC 7265.
hCalendar is an (x)HTML representation of a subset of iCalendar data using microformats.
hEvent is an HTML representation of a subset of iCalendar data using microformats addressing some accessibility concerns with the hCalendar format.
See also
[edit]References
[edit]- ^ a b Desruisseaux, Bernard, ed. (September 2009). Internet Calendaring and Scheduling Core Object Specification (iCalendar). Internet Engineering Task Force. doi:10.17487/RFC5545. RFC 5545. Retrieved 2018-12-07.
- ^ "IBM Lotus Notes 8.5 iCalendar: Interoperability, implementation, and application". IBM DeveloperWorks. Retrieved 2015-04-05.
- ^ "iCalendar.org". Z Content. Retrieved 2018-03-28.
- ^ "vCalendar: The Electronic Calendaring and Scheduling Exchange Format, Version 1.0". Internet Mail Consortium. 1996-09-18. Archived from the original on 2016-03-21. Retrieved 2018-03-28.
- ^ "vCalendar: The Basis for Cross-Platform Scheduling". Internet Mail Consortium. 2006-11-26. Archived from the original on 2015-09-06. Retrieved 2016-02-28.
- ^ "Calendaring and Scheduling Standards Simplification (calsify)". IETF. Retrieved 2015-04-05.
- ^ Lear, Eliot (2010-12-10). "the end of calsify working group– not the end of the mailing list". ietf-calsify mailing list. Archived from the original on 2012-12-09. Retrieved 2015-04-05.
- ^ "Calendaring Extensions (calext)". IETF. Retrieved 2016-12-01.
- ^ "Section 3.6 Calendar Components". Internet Calendaring and Scheduling Core Object Specification (iCalendar). sec. 3.6. doi:10.17487/RFC5545. RFC 5545. Retrieved 1 July 2020.
- ^ From RFC 2445
- ^ "UID Property". iCalendar Property Extensions. sec. 5.3. doi:10.17487/RFC7986. RFC 7986. Retrieved 3 October 2022.
- ^ "Section 3.3.5 Date-Time". Internet Calendaring and Scheduling Core Object Specification (iCalendar). sec. 3.3.5. doi:10.17487/RFC5545. RFC 5545.
- ^ "Section 3.6.1 Event Components". Internet Calendaring and Scheduling Core Object Specification (iCalendar). sec. 3.6.1. doi:10.17487/RFC5545. RFC 5545.
- ^ "[RFC5546] Section 3.4 Methods for VTODO Components". Microsoft Developer Network. Retrieved 7 August 2015.
- ^ CalConnect, 2004
- ^ "[MS-OXCICAL]: Property: X-WR-RELCALID". msdn.microsoft.com. Retrieved 2016-02-23.
- ^ "iCal and vCal Properties". Nokia Symbian^3 Developer's Library v1.1. © Nokia Corporation 2011. October 8, 2009. Archived from the original on May 9, 2021. Retrieved 2023-11-17.
{{cite web}}: CS1 maint: others (link) - ^ "[MS-OXCICAL]: 2.1.3 Processing Rules". learn.microsoft.com. 2020-10-13. Archived from the original on 2023-11-16. Retrieved 2023-11-16.
External links
[edit]- RFC 5545 Internet Calendaring and Scheduling Core Object Specification (iCalendar) (replaces RFC 2445)
- RFC 5546 iCalendar Transport-Independent Interoperability Protocol (iTIP) (replaces RFC 2446)
- RFC 6047 iCalendar Message-Based Interoperability Protocol (iMIP) (replaces RFC 2447)
- RFC 6321 xCal: The XML format for iCalendar (iCalendar XML Representation)
- RFC 6868 update of the data formats for including certain characters, forbidden by the existing specification, in parameter values
- RFC 7265 jCal: The JSON Format for iCalendar
- RFC 7953 Calendar Availability
- RFC 7986 New Properties for iCalendar (additional properties to the iCalendar specification)
- RFC 9073 Event Publishing Extensions to iCalendar
- RFC 9074 "VALARM" Extensions for iCalendar
- RFC 9253 Support for iCalendar Relationships
- "An Introduction to Internet Calendaring and Scheduling". CalConnect. 2011-10-20.
- "iCalendar Resources".: A list of resources for iCalendar and related standards.
ICalendar
View on GrokipediaHistory
Origins and Initial Development
The development of iCalendar originated from efforts to standardize calendar data exchange amid growing fragmentation in proprietary formats during the mid-1990s. In October 1996, the Internet Engineering Task Force (IETF) chartered the Calendaring and Scheduling (calsch) Working Group to address key challenges in group scheduling, including the exchange of calendar information, free/busy status, and meeting coordination across diverse systems from vendors such as Microsoft and Lotus.[7] This initiative built upon the earlier vCalendar format, released by the Internet Mail Consortium (IMC) on September 18, 1996, which aimed to enable interoperability between electronic messaging, calendaring applications, and personal information managers without vendor-specific lock-in.[8] The calsch group sought to evolve vCalendar into an Internet-friendly standard, emphasizing text-based encoding compatible with MIME for email attachments and cross-platform sharing of events, tasks, and availability data.[3] The initial iCalendar draft was led by Frank Dawson of Lotus Development Corporation and Derik Stenerson of Microsoft Corporation, focusing on a flexible, extensible structure to support broad adoption.[9] Their work addressed the limitations of proprietary systems by defining a neutral format that allowed seamless data interchange, reducing dependency on specific software ecosystems like Microsoft's Schedule+ or Lotus Notes calendars. After iterative discussions within the calsch working group, the specification emphasized simplicity and compatibility with Internet protocols to facilitate widespread use in email-based workflows.[10] iCalendar was first publicly released as RFC 2445 in November 1998, establishing the foundational VCALENDAR object as the container for core elements and introducing MIME type text/calendar for transport.[9] This document formalized the basic syntax and semantics, enabling the initial widespread interoperability that iCalendar would later expand upon in subsequent revisions, such as RFC 5545 in 2009.[11]Standardization and Updates
The iCalendar format was formally adopted by the Internet Engineering Task Force (IETF) in 1998 as RFC 2445, establishing a standardized MIME type (text/calendar) for exchanging calendaring and scheduling information across the Internet.[12] This initial specification underwent maintenance through errata reports, but was ultimately obsoleted in September 2009 by RFC 5545 to address limitations in the original design, incorporating enhancements for internationalization, improved timezone handling, and refined recurrence rules.[1] Key changes in RFC 5545 included mandatory UTF-8 encoding for iCalendar streams to support international characters, while allowing acceptance of US-ASCII for broader compatibility.[13] Enhanced data types, such as DATE-TIME values with explicit UTC support via the 'Z' suffix, improved precision in time representations.[14] Parameter handling was refined for greater flexibility, including better support for value types and encodings, and the usage of METHOD properties was clarified to standardize scheduling interactions like PUBLISH and REQUEST.[15] Timezone handling was strengthened through the VTIMEZONE component, mandating standard identifiers (e.g., "America/New_York") over custom offsets to reduce ambiguity in global contexts. Recurrence rules (RRULE) were updated for clearer semantics, such as handling non-Gregorian calendars and edge cases in instance generation.[16] In August 2021, RFC 9073 introduced extensions specifically for event publishing, enhancing the LOCATION property with structured subcomponents (e.g., for coordinates and resources) and adding properties like PLANNER and CONTACT to better represent organizer details in public feeds.[17] RFC 9074 extended the VALARM component by adding support for snoozing alarms through DURATION and REPEAT properties (used together), a PROXIMITY parameter for location-based triggers, and an ACKNOWLEDGED property to track when an alarm was last acknowledged.[18] Ongoing maintenance of the iCalendar standard is handled by the IETF's Calendaring and Scheduling Working Group (calsch), which coordinates updates through RFCs and errata.[7] The Calendaring and Scheduling Consortium (CalConnect) supports this effort by fostering collaboration among vendors and developers, testing interoperability, and proposing advancements for integration with mobile applications and web services. Current discussions in the working group focus on future RFCs to address emerging needs, such as enhanced support for real-time synchronization in web and mobile environments.Design
Core Principles
The iCalendar format is a text-based standard designed for representing and exchanging calendaring and scheduling information, utilizing UTF-8 encoding to ensure human readability and facilitate straightforward parsing by software applications. This choice of a plain-text structure allows for easy inspection and manipulation without proprietary tools, while UTF-8 supports a wide range of characters, including non-Latin scripts, promoting internationalization (i18n). To handle long lines efficiently, iCalendar employs line folding rules, where text lines are limited to 75 octets (excluding the line break pair), and longer content is split across multiple lines using a space or tab as the continuation indicator, enabling robust transmission over various protocols without data corruption. At its core, iCalendar adopts an object-oriented model organized in a hierarchical tree structure, with the root VCALENDAR component serving as the container for subordinate components (such as VEVENT for events or VTODO for tasks), properties (like SUMMARY or DTSTART), and parameters (such as VALUE or LANGUAGE). This architecture semantically encodes calendar data, including recurrences and time zones, in a way that mirrors the logical relationships in scheduling applications, allowing for flexible representation of complex scenarios like repeating events or free/busy availability. The format's MIME type is text/calendar, commonly associated with the .ics file extension, which supports seamless integration as attachments in email (via protocols like MIME) and web transfers, decoupling the data payload from specific transport mechanisms—such as the iTIP method outlined in RFC 5546 for dynamic scheduling interactions. Extensibility is a foundational principle, achieved through the use of experimental properties prefixed with "X-" (e.g., X-WR-CALNAME), which permit vendors and applications to add custom fields without disrupting standard parsers, while maintaining backward compatibility with earlier versions like RFC 2445 by preserving core syntax and semantics. The design emphasizes minimal dependencies, relying solely on standard text handling and avoiding requirements for binary formats or external libraries, which supports both static storage in files and dynamic exchange across heterogeneous systems. This approach ensures broad interoperability, scalability for global use, and longevity as a neutral, future-proof standard for calendar data.File Format and Syntax
The iCalendar format is a text-based standard utilizing UTF-8 encoding for representing calendaring data, where content is structured as a stream of lines delimited by carriage return and line feed (CRLF) characters.[13] Each line begins with a property name, optionally followed by semicolon-separated parameters, a colon, and the property value, such asDTSTART;TZID=America/New_York:20231108T090000.[13] This syntax ensures machine-readable parsing while allowing human inspection, with values that may contain structured text, dates, or binary data encoded in base64.[19]
To manage long lines, iCalendar employs line folding rules: no line exceeds 75 octets excluding the CRLF, and continuation lines are indented with one space or horizontal tab, effectively unfolding to a single logical line during parsing.[20] For example, a folded line might appear as:
SUMMARY:This is a very long summary that spans
multiple lines to demonstrate folding.
SUMMARY:This is a very long summary that spans
multiple lines to demonstrate folding.
SUMMARY:This is a very long summary that spans multiple lines to demonstrate folding.[21]
Date and time values adhere to specific fixed-length formats without separators: the DATE format uses eight digits as YYYYMMDD for calendar dates, while DATE-TIME uses fourteen digits as YYYYMMDDTHHMMSS, optionally suffixed with 'Z' to indicate UTC or a timezone identifier.[22] Timezone references employ the TZID parameter, such as DTSTART;TZID=US-Eastern:20231108T090000, ensuring consistency across global implementations.[23] Local times without timezone information assume the observer's default, but UTC is preferred for interoperability.[24]
Recurrence rules, defined via the RRULE property, specify repeating patterns using semicolon-separated parameters like FREQ for frequency (e.g., DAILY, WEEKLY, YEARLY), INTERVAL for step size, and optional qualifiers such as BYMONTH, BYDAY, or BYMONTHDAY for selection.[25] Terminators include COUNT for a finite number of occurrences or UNTIL for an end date in UTC, as in RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=11;[COUNT](/page/Count)=5 for five annual events in November.[16] Complex rules combine these to generate instance lists, with precedence rules resolving overlaps (e.g., BYMONTH overrides BYMONTHDAY).[25]
For validity, an iCalendar stream must encapsulate content within a VCALENDAR component, mandating the VERSION property set to "2.0" and a PRODID property identifying the producer (e.g., PRODID:-//Example//iCalendar//EN), followed by one or more components and terminated by END:VCALENDAR.[26] Special characters in values, such as colons or semicolons, require escaping with a backslash (e.g., SUMMARY:Event\: Time), while double quotes enclose values needing protection from folding.[27] Parsers ignore lines not conforming to property syntax, but producers must adhere strictly to avoid data loss.[13]
Elements
Components
The iCalendar format structures calendar data using components as its primary building blocks, each representing distinct types of calendaring information such as events, tasks, journal entries, availability, or time zones. These components are delimited by "BEGIN" and "END" lines specifying the component name, forming a hierarchical structure within the overall iCalendar object.[28] The VCALENDAR component serves as the root container for all iCalendar data, encapsulating one or more subordinate components and providing essential metadata. It requires the VERSION property set to "2.0" and the PRODID property to identify the producing software, while the CALSCALE property defaults to "GREGORIAN" if omitted.[28] VEVENT components define scheduled events or appointments, grouping properties that describe the event's timing, location, and details. Mandatory properties include DTSTAMP for creation timestamp and UID for unique identification; optional properties such as SUMMARY for a brief title, DESCRIPTION for additional notes, and LOCATION for the venue enhance the event's context.[29] VTODO components represent to-do items or action tasks, supporting completion tracking and prioritization. They require DTSTAMP and UID, with key optional properties including DUE for deadlines, COMPLETED for finish timestamps, and PRIORITY for urgency levels; progress can be indicated via the PERCENT-COMPLETE property (an integer from 0 to 100), with the COMPLETED property providing the completion timestamp.[30] VJOURNAL components capture free-form notes or diary entries, timestamped for chronological organization. They mandate DTSTAMP and UID, with DTSTART optionally specifying the entry's effective date or time.[31] VFREEBUSY components outline periods of availability or unavailability, commonly used in scheduling exchanges to indicate busy times. Mandatory properties encompass UID, DTSTAMP, and either DTSTART/DTEND pairs or durations to define time ranges, with FREEBUSY specifying the type of period (e.g., busy or free).[32] VTIMEZONE components provide detailed timezone definitions to handle location-specific offsets and rules. They require the TZID property for identification and contain STANDARD and DAYLIGHT subcomponents that detail UTC offsets, transition rules, and abbreviations for standard and daylight saving time.[33] iCalendar components support nesting for modularity, such as embedding VALARM subcomponents within VEVENT or VTODO to define notifications; additionally, the METHOD property in VCALENDAR specifies operational actions like REQUEST for invitations or PUBLISH for sharing.[28][34]Properties and Parameters
iCalendar properties serve as the fundamental attributes that encapsulate calendar data within components, each comprising a property name, zero or more parameters, and a value. These properties are formatted according to the content line syntax, where the name is followed by semicolon-separated parameters and a colon-separated value. Parameters act as qualifiers that provide contextual metadata, such as value types or localization details, enhancing the interpretation of the property value. The definitions and constraints for properties and parameters are specified in RFC 5545.[35]Property Parameters
Property parameters precede the value and are delimited by semicolons, allowing multiple parameters per property. They are optional unless specified otherwise and must adhere to case-insensitive naming. Common parameters include those for data typing, localization, and scheduling semantics.[36] The VALUE parameter explicitly declares the data type of the property value when it deviates from the property's default type, such as specifyingVALUE=DATE for a date-only interpretation of a temporal property or VALUE=URI for resource references. This parameter is particularly useful for properties that support multiple value types, ensuring unambiguous parsing. For instance, in a DTSTART property, DTSTART;VALUE=DATE:20251108 indicates an all-day event starting on November 8, 2025. The allowed values correspond to the data types defined in Section 3.3 of RFC 5545, including BINARY, DATE, DATE-TIME, DURATION, PERIOD, RECUR, TEXT, and URI.[37]
The TZID parameter identifies the time zone applicable to a DATE-TIME value, referencing the name of a VTIMEZONE component within the iCalendar object. It uses a text value matching a TZID property in a time zone component, such as TZID=America/New_York. This parameter is required for floating DATE-TIME values to resolve local time offsets and is not used with DATE or UTC TIME values. Implementations must validate TZID against defined time zones to avoid errors in cross-timezone scheduling.[38]
For internationalization, the LANGUAGE parameter specifies the natural language of a TEXT property value using a language tag per BCP 47, such as LANGUAGE=en-US for American English. It applies to properties like SUMMARY or DESCRIPTION, enabling multilingual support in calendar data. If omitted, the language is assumed to be unspecified.[39]
In scheduling contexts, the ROLE parameter on the ATTENDEE property denotes the attendee's function, using enumerated values like CHAIR (for meeting leader), REQ-PARTICIPANT (required), OPT-PARTICIPANT (optional), or NON-PARTICIPANT. For example, ATTENDEE;ROLE=CHAIR:mailto:[email protected] identifies the meeting organizer among participants. This parameter aids in role-based filtering and notifications.[40]
The RSVP parameter, used exclusively with ATTENDEE, is a boolean flag indicating whether the organizer expects a participation status reply from the attendee. It defaults to FALSE if absent, but when set to TRUE, it prompts for confirmation, as in ATTENDEE;RSVP=TRUE:mailto:[email protected]. This facilitates group scheduling by tracking responses.[41]
Properties
iCalendar properties are categorized by value data types outlined in Section 3.3 of RFC 5545, including TEXT for descriptive content, BINARY for attachments, DATE and DATE-TIME for temporal data, DURATION for time spans, PERIOD for time ranges, and RECUR for recurrence patterns. Each property has defined usage rules, including whether it is mandatory or optional within specific components, and constraints on its values. The UID property is required for VEVENT, VTODO, VJOURNAL, and VFREEBUSY components to ensure unique identification and support modifications in recurring series. Its value is a globally unique TEXT string, often a UUID likeUID:[email protected].[42][43]
Text-based properties convey human-readable information. The SUMMARY property provides a concise description of the component, such as the title of an event, using TEXT format with optional LANGUAGE parameter: SUMMARY:Team Meeting. It is optional but commonly used for display purposes in calendar applications. The ORGANIZER and ATTENDEE properties specify calendar addresses (CAL-ADDRESS type, a URI) for scheduling participants; ORGANIZER is mandatory in components with ATTENDEEs to denote the scheduler, e.g., ORGANIZER:mailto:organizer@[example.com](/page/Example.com), while ATTENDEEs list invitees and support parameters like RSVP and ROLE.[44][45][46]
Binary properties include ATTACH, which embeds or links non-textual data like images or documents. It supports BINARY (base64-encoded) or URI values, with the latter preferred for efficiency: ATTACH;FMTTYPE=image/[jpeg](/page/JPEG):cid:[email protected] or ATTACH: http://[example.com](/page/Example.com)/agenda.pdf. This property is optional and aids in associating supplementary materials with events.[47]
Date and time properties handle temporal aspects. DTSTART defines the start of an event or task as DATE or DATE-TIME, mandatory for VEVENT components but optional for VTODO: DTSTART:20251108T090000Z for UTC time. DTEND specifies the completion, also DATE or DATE-TIME, ensuring DTEND follows DTSTART; it is optional if DURATION is provided. These properties often use TZID for non-UTC times.[48][49]
The DURATION property expresses time spans in ISO 8601 format, such as DURATION=PT1H for one hour or DURATION=P1W for one week. It is mutually exclusive with DTEND and optional, providing an alternative for calculating end times in events or tasks. Values must be positive durations.[50]
Recurrence properties manage repeating calendar items. The RRULE property defines a recurrence pattern using RECUR type with rules like FREQ=YEARLY;INTERVAL=1;BYMONTH=11: RRULE:FREQ=MONTHLY;BYDAY=1FR. It is optional and generates infinite or bounded instances based on UNTIL or COUNT. EXDATE excludes specific instances from recurrence using DATE or DATE-TIME lists, e.g., EXDATE:20251108T090000Z, while RDATE adds extra instances, supporting PERIOD values for ranges like RDATE;VALUE=PERIOD:20251108T090000/PT2H. Both are optional and complement RRULE for exceptions and additions.[51][52][53]
Other constrained properties include PRIORITY, an INTEGER from 0 (undefined/highest) to 9 (lowest), indicating urgency: PRIORITY=1 for high priority tasks. It is optional and defaults to 0 if unspecified. The STATUS property uses enumerated TEXT values to reflect the state, such as TENTATIVE, CONFIRMED, or CANCELLED for VEVENTs, and NEEDS-ACTION, COMPLETED, or IN-PROCESS for VTODOs. For example, STATUS:CONFIRMED. These values are component-specific and optional, aiding in workflow tracking.[54][55]
