2.0
Success ... 3.5. Parameters (RFC 5545, Section 3.2) iCalendar property parameters are enclosed in the XML element IC: parameters, which occurs in each property XML element. If there are no iCalendar property parameters, the IC:parameters element (which would be empty) SHOULD NOT be present. Each individual iCalendar property parameter is represented in xCal by an element of the same name as the iCalendar property parameter, but in lowercase. For example, the "PARTSTAT" property parameter is represented in xCal by the IC:partstat element. Example: ... ... NEEDS-ACTION ... ... Each XML parameter element contains one or more child XML elements representing iCalendar value types. Daboo, et al. Standards Track [Page 10] RFC 6321 xCal August 2011 As an example, the table below shows iCalendar-to-xCal mappings for current iCalendar parameters. Any new iCalendar parameters added in the future will be converted in the same way. +----------------+-------------------+---------------------+ | Parameter | XML element | XML Definition | +----------------+-------------------+---------------------+ | ALTREP | IC:altrep | Appendix A # 3.2.1 | | CN | IC:cn | Appendix A # 3.2.2 | | CUTYPE | IC:cutype | Appendix A # 3.2.3 | | DELEGATED-FROM | IC:delegated-from | Appendix A # 3.2.4 | | DELEGATED-TO | IC:delegated-to | Appendix A # 3.2.5 | | DIR | IC:dir | Appendix A # 3.2.6 | | ENCODING | IC:encoding | Appendix A # 3.2.7 | | FMTTYPE | IC:fmttype | Appendix A # 3.2.8 | | FBTYPE | IC:fbtype | Appendix A # 3.2.9 | | LANGUAGE | IC:language | Appendix A # 3.2.10 | | MEMBER | IC:member | Appendix A # 3.2.11 | | PARTSTAT | IC:partstat | Appendix A # 3.2.12 | | RANGE | IC:range | Appendix A # 3.2.13 | | RELATED | IC:related | Appendix A # 3.2.14 | | RELTYPE | IC:reltype | Appendix A # 3.2.15 | | ROLE | IC:role | Appendix A # 3.2.16 | | RSVP | IC:rsvp | Appendix A # 3.2.17 | | SENT-BY | IC:sent-by | Appendix A # 3.2.18 | | TZID | IC:tzid | Appendix A # 3.2.19 | +----------------+-------------------+---------------------+ 3.5.1. VALUE Parameter iCalendar defines a "VALUE" property parameter (Section 3.2.20 of [RFC5545]). This property parameter is not mapped to an xCal XML element. Instead, the value type is handled by having different XML elements for each value, and these appear inside of property elements. Thus, when converting from iCalendar to xCal, any "VALUE" property parameters are skipped. When converting from xCal into iCalendar, the appropriate "VALUE" property parameter MUST be included in the iCalendar property if the value type is not the default value type for that property. 3.6. Values (RFC 5545, Section 3.3) In the typical case, iCalendar value types are mapped into XML elements with a matching name in all lowercase. In the case of the value for a recurrence rule (see below), iCalendar defines "structured" values, and these are mapped into separate child elements for each value element. Daboo, et al. Standards Track [Page 11] RFC 6321 xCal August 2011 3.6.1. Binary (RFC 5545, Section 3.3.1) Description: iCalendar "BINARY" property values are represented by the IC:binary XML element. The content of the element is base64 encoded data, conforming to Section 4 of [RFC4648], which is the base64 method used in [RFC5545]. Whitespace MAY be inserted into the data at any point to "wrap" the data to reasonable line lengths. When converting back to iCalendar, the whitespace MUST first be removed. XML Definition: Appendix A # 3.3.1 Example: SGVsbG8gV29ybGQh 3.6.2. Boolean (RFC 5545, Section 3.3.2) Description: iCalendar "BOOLEAN" property values are represented by the IC:boolean XML element. The content of the element is a boolean value. XML Definition: Appendix A # 3.3.2 Example: true 3.6.3. Calendar User Address (RFC 5545, Section 3.3.3) Description: iCalendar "CAL-ADDRESS" property values are represented by the IC:cal-address XML element. The content of the element is a URI. XML Definition: Appendix A # 3.3.3 Example: mailto:cyrus@example.com 3.6.4. Date (RFC 5545, Section 3.3.4) Description: iCalendar "DATE" property values are represented by the IC:date XML element. The content of the element is the same date value specified by [RFC5545], with the exception that the date components are separated by "-" characters, for consistency with [W3C.REC-xmlschema-2-20041028]. Daboo, et al. Standards Track [Page 12] RFC 6321 xCal August 2011 XML Definition: Appendix A # 3.3.4 Example: 2011-05-17 3.6.5. Date-Time (RFC 5545, Section 3.3.5) Description: iCalendar "DATE-TIME" property values are represented by the IC:date-time XML element. The content of the element is the same date-time value specified by [RFC5545], with the exception that the date components are separated by "-" characters, and the time components are separated by ":" characters, for consistency with [W3C.REC-xmlschema-2-20041028]. Note that while [W3C.REC-xmlschema-2-20041028] allows for a UTC offset to be included in date/time values, xCal does not use that, and instead follows the iCalendar behavior of using time zone definitions via the "TZID" property parameter. XML Definition: Appendix A # 3.3.5 Example: 2011-05-17T12:00:00 3.6.6. Duration (RFC 5545, Section 3.3.6) Description: iCalendar "DURATION" property values are represented by the IC:duration XML element. The content of the element is the same duration value specified by [RFC5545]. XML Definition: Appendix A # 3.3.6 Example: P1D 3.6.7. Float (RFC 5545, Section 3.3.7) Description: iCalendar "FLOAT" property values are represented by the IC:float XML element. The content of the element is a text representation of a floating point number. XML Definition: Appendix A # 3.3.7 Example: 0.5 Daboo, et al. Standards Track [Page 13] RFC 6321 xCal August 2011 3.6.8. Integer (RFC 5545, Section 3.3.8) Description: iCalendar "INTEGER" property values are represented by the IC:integer XML element. The content of the element is a text representation of an integer number. XML Definition: Appendix A # 3.3.8 Examples: 50 -100 3.6.9. Period of Time (RFC 5545, Section 3.3.9) Description: iCalendar "PERIOD" property values are represented by the IC:period XML element. The content of the element is child elements representing the start, end, or duration components of the period. XML Definition: Appendix A # 3.3.9 Example: 2011-05-17T12:00:00 P1H 3.6.10. Recurrence Rule (RFC 5545, Section 3.3.10) Description: iCalendar "RECUR" property values are represented by the IC:recur XML element. The content of the element is child elements representing the various components of a recurrence rule. XML Definition: Appendix A # 3.3.10 Example: YEARLY 5 -1SU 10 Daboo, et al. Standards Track [Page 14] RFC 6321 xCal August 2011 3.6.11. Text (RFC 5545, Section 3.3.11) Description: iCalendar "TEXT" property values are represented by the IC:text XML element. The content of the element is simple text. XML Definition: Appendix A # 3.3.11 Example: Hello World! 3.6.12. Time (RFC 5545, Section 3.3.12) Description: iCalendar "TIME" property values are represented by the IC:time XML element. The content of the element is the same time value specified by [RFC5545], with the exception that the time components are separated by ":" characters, for consistency with [W3C.REC-xmlschema-2-20041028]. Note that while [W3C.REC-xmlschema-2-20041028] allows for a UTC offset to be included in date/time values, xCal does not use that, and instead follows the iCalendar behavior of using time zone definitions via the "TZID" property parameter. XML Definition: Appendix A # 3.3.12 Example: 12:00:00 3.6.13. URI (RFC 5545, Section 3.3.13) Description: iCalendar "URI" property values are represented by the IC:uri XML element. The content of the element is a URI. XML Definition: Appendix A # 3.3.13 Example: http://calendar.example.com Daboo, et al. Standards Track [Page 15] RFC 6321 xCal August 2011 3.6.14. UTC Offset (RFC 5545, Section 3.3.14) Description: iCalendar "UTC-OFFSET" property values are represented by the IC:utc-offset XML element. The content of the element is the same UTC offset value specified by [RFC5545], with the exception that the hour, minute, and second components are separated by a ":" character, for consistency with [W3C.REC-xmlschema-2-20041028]. XML Definition: Appendix A # 3.3.14 Example: -05:00 3.7. Extensions iCalendar extension properties and property parameters (those with an "X-" prefix in their name) are handled in the same way as other properties and property parameters: the property or property parameter is represented by an XML element with the same name, but in lowercase, e.g., the "X-FOO" property in iCalendar turns into the IC: x-foo element in xCal. However, see Section 5 for how to deal with default values for unrecognized extension properties or property parameters. 4. Converting from xCal into iCalendar When converting component, property, and property parameter values, the names SHOULD be converted to uppercase. Although iCalendar names are case insensitive, common practice is to keep them all uppercase following the actual definitions in [RFC5545]. BACKSLASH character encoding and line folding MUST be applied to the resulting iCalendar data as required by [RFC5545]. Non-binary value types MUST NOT be base64 encoded. 4.1. Converting XML Extensions into iCalendar XML extensions are converted back to iCalendar in one of two ways, depending on whether the extensions are in the iCalendar XML namespace or in an external namespace. Extensions that are part of the iCalendar XML namespace MUST have element names that begin with "x-", and will be converted back to the equivalent extension property in iCalendar. For example, the "x-foo" element will convert to the "X-FOO" iCalendar property. Daboo, et al. Standards Track [Page 16] RFC 6321 xCal August 2011 Extensions that are in a namespace other than the iCalendar XML namespace SHOULD be preserved in the iCalendar representation using the "XML" iCalendar property described in Section 4.2. Only those extension elements that are immediate child elements of the IC: properties element are converted, any others are ignored. 4.2. The XML Property for iCalendar This section describes an extension property for iCalendar, as covered in Section 8.2.3 of [RFC5545]. Property name: XML Purpose: To embed extended XML-encoded iCalendar data in the iCalendar format. Value type: The default value type is "TEXT". The value type can also be set to "BINARY" to indicate base64 encoded content. Property parameters: IANA, non-standard, inline encoding, and value data type property parameters can be specified on this property. Conformance: The property can be specified multiple times in any calendar component. Description: The value of this property is a single XML 1.0 [W3C.REC-xml-20081126] element. The "XML" property MUST NOT be used to contain properties that are already defined in iCalendar. Since all elements in the urn:ietf:params:xml:ns:icalendar-2.0 namespace convert to a well-defined iCalendar object, the elements in this property MUST NOT be in the urn:ietf:params:xml:ns:icalendar-2.0 namespace. The XML element that is the value of this property MUST have an XML namespace declaration. The default value type for this property is "TEXT", and normal BACKSLASH character encoding rules for that value MUST be applied. Note that the source XML can contain characters not allowed in "TEXT" property values. If this is the case, then the XML data MUST be base64 encoded. As required by [RFC5545], the "ENCODING" property parameter MUST be present and set to "BASE64", and the "VALUE" property parameter MUST be present and set to "BINARY". The ordering of "XML" properties is not preserved in the conversion between xCal and iCalendar. Format definition: This property is defined by the following notation: Daboo, et al. Standards Track [Page 17] RFC 6321 xCal August 2011 xml = "XML" xmlparam ( ":" text ) / ( ";" "ENCODING" "=" "BASE64" ";" "VALUE" "=" "BINARY" ":" binary ) CRLF xmlparam = *(";" other-param) Example: The following is an example of a location embedded in KML markup inside the "XML" property. XML: \n \n KML Sample \n 1 \n An incomplete example of a KML docum ent - used as an example! \n \n 5. Handling Unrecognized Properties or Parameters In iCalendar, properties have a default value type specified by their definition, e.g., "SUMMARY"'s value type is "TEXT" and "DURATION"'s is "DURATION". When a property uses its default value type, the "VALUE" property parameter does not need to be specified on the property. When new properties are defined or "X-" properties are used, an iCalendar<->xCal converter might not recognize them, and know what the appropriate default value types are, yet they need to be able to preserve the values. A similar issue arises for unrecognized property parameters. As a result, the following rules are applied when dealing with unrecognized properties and property parameters: o When converting iCalendar into xCal: * Any property that does not include a "VALUE" property parameter and whose default value type is not known MUST be converted using the value type XML element IC:unknown. The content of that element is the unprocessed value text. * Any unrecognized property parameter MUST be converted using the value type XML element IC:unknown, with its content set to the property parameter value text, treated as if it were a "TEXT" value or list of "TEXT" values. Daboo, et al. Standards Track [Page 18] RFC 6321 xCal August 2011 o When converting xCal into iCalendar: * Any IC:unknown property value XML elements are converted directly into iCalendar values. The containing property MUST NOT have a "VALUE" property parameter. * Any IC:unknown parameter value XML elements are converted as if they were IC:text value type XML elements. Example: The following is an example of an unrecognized iCalendar property (that uses a "DATE-TIME" value as its default) and the equivalent xCal representation of that property. iCalendar: X-PROPERTY:20110512T120000Z xCal: 20110512T120000Z Example: The following is an example of an unrecognized iCalendar property parameter (that uses a "DURATION" value as its default) specified on a recognized iCalendar property, and the equivalent xCal representation of that property and property parameter. iCalendar: DTSTART;X-PARAM=PT30M:20110512T130000Z xCal: PT30M 2011-05-12T13:00:00Z 6. Security Considerations For security considerations specific to calendar data, see Section 7 of [RFC5545]. Since this specification is a mapping from iCalendar, no new security concerns are introduced related to calendar data. Daboo, et al. Standards Track [Page 19] RFC 6321 xCal August 2011 The use of XML as a format does have security risks. Section 7 of [RFC3470] discusses these risks. See also the security discussion for the application/xml type in [RFC3023]. 7. IANA Considerations This document defines a new URN to identify a new XML namespace for iCalendar data. The URN conforms to a registry mechanism described in [RFC3688]. This document defines a new media type. The registration is in Section 7.2. This document defines a new property for iCalendar. The registration is in Section 7.3. 7.1. Namespace Registration Registration request for the iCalendar namespace: URI: urn:ietf:params:xml:ns:icalendar-2.0 Registrant Contact: See the "Authors' Addresses" section of this document. XML: None. Namespace URIs do not represent an XML specification. 7.2. Media Type This section defines the MIME media type for use with iCalendar in XML data. Type name: application Subtype name: calendar+xml Required parameters: None Optional parameters: method, component, and optinfo as defined for the text/calendar media type in [RFC5545]; charset as defined for application/xml in [RFC3023]; per [RFC3023], use of the charset property parameter with the value "utf-8" is STRONGLY RECOMMENDED. Encoding considerations: Same as encoding considerations of application/xml as specified in [RFC3023]. Daboo, et al. Standards Track [Page 20] RFC 6321 xCal August 2011 Security considerations: See Section 6. Interoperability considerations: This media type provides an alternative format for iCalendar data based on XML. Published specification: This specification. Applications that use this media type: Applications that currently make use of the text/calendar media type can use this as an alternative. Additional information: Magic number(s): None File extension(s): xcs Macintosh file type code(s): None specified. Person & email address to contact for further information: calsify@ietf.org Intended usage: COMMON Restrictions on usage: There are no restrictions on where this media type can be used. Author: See the "Authors' Addresses" section of this document. Change controller: IETF 7.3. iCalendar Property Registrations This document defines the following new iCalendar property to be added to the registry defined in Section 8.2.3 of [RFC5545]: +----------+---------+-----------------------+ | Property | Status | Reference | +----------+---------+-----------------------+ | XML | Current | RFC 6321, Section 4.2 | +----------+---------+-----------------------+ Daboo, et al. Standards Track [Page 21] RFC 6321 xCal August 2011 8. Acknowledgments The authors would like to thank the following for their valuable contributions: Toby Considine, Bernard Desruisseaux, Keith Moore, Filip Navara, Simon Perreault, Arnaud Quillaud, Peter Saint-Andre, and Dave Thewlis. This specification originated from the work of the XML technical committee of the Calendaring and Scheduling Consortium. 9. References 9.1. Normative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC3023] Murata, M., St. Laurent, S., and D. Kohn, "XML Media Types", RFC 3023, January 2001. [RFC3470] Hollenbeck, S., Rose, M., and L. Masinter, "Guidelines for the Use of Extensible Markup Language (XML) within IETF Protocols", BCP 70, RFC 3470, January 2003. [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, January 2004. [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data Encodings", RFC 4648, October 2006. [RFC5545] Desruisseaux, B., "Internet Calendaring and Scheduling Core Object Specification (iCalendar)", RFC 5545, September 2009. [W3C.REC-xml-20081126] Sperberg-McQueen, C., Yergeau, F., Bray, T., Paoli, J., and E. Maler, "Extensible Markup Language (XML) 1.0 (Fifth Edition)", World Wide Web Consortium Recommendation REC- xml-20081126, November 2008, . 9.2. Informative References [W3C.REC-xmlschema-2-20041028] Malhotra, A. and P. Biron, "XML Schema Part 2: Datatypes Second Edition", World Wide Web Consortium Recommendation REC-xmlschema-2-20041028, October 2004, . Daboo, et al. Standards Track [Page 22] RFC 6321 xCal August 2011 Appendix A. RELAX NG Schema Below is a RELAX NG schema for iCalendar in XML. The schema is non- normative and given for reference only. This schema uses the compact notation of RELAX NG. The numeric section numbers given in the comments refer to sections in [RFC5545]. The ordering of elements follows the section ordering of [RFC5545]. The RELAX NG compact notation "?" operator is used to indicate an unordered list of items. However, that operator, as defined, allows "mixing" each element that it operates on at any depth within the other elements, rather than just allowing "mixing" of siblings only. As a result, the schema provided allows certain constructs that are not allowed in iCalendar. Given that there is no sibling-only unordered list operator in RELAX NG, this is the best representation that can be given. Patterns for date/time, duration, and UTC offset values are given because those differ from the values used in iCalendar. More restrictive schema with patterns and numerical limits could be derived from the example schema here if more comprehensive schema validation is required. # RELAX NG Schema for iCalendar in XML default namespace = "urn:ietf:params:xml:ns:icalendar-2.0" # 3.2 Property Parameters # 3.2.1 Alternate Text Representation altrepparam = element altrep { value-uri } # 3.2.2 Common Name cnparam = element cn { value-text } Daboo, et al. Standards Track [Page 23] RFC 6321 xCal August 2011 # 3.2.3 Calendar User Type cutypeparam = element cutype { element text { "INDIVIDUAL" | "GROUP" | "RESOURCE" | "ROOM" | "UNKNOWN" } } # 3.2.4 Delegators delfromparam = element delegated-from { value-cal-address+ } # 3.2.5 Delegatees deltoparam = element delegated-to { value-cal-address+ } # 3.2.6 Directory Entry Reference dirparam = element dir { value-uri } # 3.2.7 Inline Encoding encodingparam = element encoding { element text { "8BIT" | "BASE64" } } # 3.2.8 Format Type fmttypeparam = element fmttype { value-text } Daboo, et al. Standards Track [Page 24] RFC 6321 xCal August 2011 # 3.2.9 Free/Busy Time Type fbtypeparam = element fbtype { element text { "FREE" | "BUSY" | "BUSY-UNAVAILABLE" | "BUSY-TENTATIVE" } } # 3.2.10 Language languageparam = element language { value-text } # 3.2.11 Group or List Membership memberparam = element member { value-cal-address+ } # 3.2.12 Participation Status partstatparam = element partstat { type-partstat-event | type-partstat-todo | type-partstat-jour } type-partstat-event = ( element text { "NEEDS-ACTION" | "ACCEPTED" | "DECLINED" | "TENTATIVE" | "DELEGATED" } ) Daboo, et al. Standards Track [Page 25] RFC 6321 xCal August 2011 type-partstat-todo = ( element text { "NEEDS-ACTION" | "ACCEPTED" | "DECLINED" | "TENTATIVE" | "DELEGATED" | "COMPLETED" | "IN-PROCESS" } ) type-partstat-jour = ( element text { "NEEDS-ACTION" | "ACCEPTED" | "DECLINED" } ) # 3.2.13 Recurrence Identifier Range rangeparam = element range { element text { "THISANDFUTURE" } } # 3.2.14 Alarm Trigger Relationship trigrelparam = element related { element text { "START" | "END" } } # 3.2.15 Relationship Type reltypeparam = element reltype { element text { "PARENT" | "CHILD" | "SIBLING" } } Daboo, et al. Standards Track [Page 26] RFC 6321 xCal August 2011 # 3.2.16 Participation Role roleparam = element role { element text { "CHAIR" | "REQ-PARTICIPANT" | "OPT-PARTICIPANT" | "NON-PARTICIPANT" } } # 3.2.17 RSVP Expectation rsvpparam = element rsvp { value-boolean } # 3.2.18 Sent By sentbyparam = element sent-by { value-cal-address } # 3.2.19 Time Zone Identifier tzidparam = element tzid { value-text } # 3.3 Property Value Data Types # 3.3.1 BINARY value-binary = element binary { xsd:string } # 3.3.2 BOOLEAN value-boolean = element boolean { xsd:boolean } # 3.3.3 CAL-ADDRESS value-cal-address = element cal-address { xsd:anyURI } Daboo, et al. Standards Track [Page 27] RFC 6321 xCal August 2011 # 3.3.4 DATE pattern-date = xsd:string { pattern = "\d\d\d\d-\d\d-\d\d" } value-date = element date { pattern-date } # 3.3.5 DATE-TIME pattern-date-time = xsd:string { pattern = "\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ?" } value-date-time = element date-time { pattern-date-time } # 3.3.6 DURATION pattern-duration = xsd:string { pattern = "(+|-)?P(\d+W)|(\d+D)?" ~ "(T(\d+H(\d+M)?(\d+S)?)|" ~ "(\d+M(\d+S)?)|" ~ "(\d+S))?" } value-duration = element duration { pattern-duration } # 3.3.7 FLOAT value-float = element float { xsd:float } # 3.3.8 INTEGER value-integer = element integer { xsd:integer } Daboo, et al. Standards Track [Page 28] RFC 6321 xCal August 2011 # 3.3.9 PERIOD value-period = element period { element start { pattern-date-time }, ( element end { pattern-date-time } | element duration { pattern-duration } ) } # 3.3.10 RECUR value-recur = element recur { type-freq, (type-until | type-count)?, element interval { xsd:positiveInteger }?, type-bysecond*, type-byminute*, type-byhour*, type-byday*, type-bymonthday*, type-byyearday*, type-byweekno*, type-bymonth*, type-bysetpos*, element wkst { type-weekday }? } type-freq = element freq { "SECONDLY" | "MINUTELY" | "HOURLY" | "DAILY" | "WEEKLY" | "MONTHLY" | "YEARLY" } Daboo, et al. Standards Track [Page 29] RFC 6321 xCal August 2011 type-until = element until { type-date | type-date-time } type-count = element count { xsd:positiveInteger } type-bysecond = element bysecond { xsd:positiveInteger } type-byminute = element byminute { xsd:positiveInteger } type-byhour = element byhour { xsd:positiveInteger } type-weekday = ( "SU" | "MO" | "TU" | "WE" | "TH" | "FR" | "SA" ) type-byday = element byday { xsd:integer?, type-weekday } type-bymonthday = element bymonthday { xsd:integer } type-byyearday = element byyearday { xsd:integer } type-byweekno = element byweekno { xsd:integer } Daboo, et al. Standards Track [Page 30] RFC 6321 xCal August 2011 type-bymonth = element bymonth { xsd:positiveInteger } type-bysetpos = element bysetpos { xsd:integer } # 3.3.11 TEXT value-text = element text { xsd:string } # 3.3.12 TIME pattern-time = xsd:string { pattern = "\d\d:\d\d:\d\dZ?" } value-time = element time { pattern-time } # 3.3.13 URI value-uri = element uri { xsd:anyURI } # 3.3.14 UTC-OFFSET value-utc-offset = element utc-offset { xsd:string { pattern = "(+|-)\d\d:\d\d(:\d\d)?" } } # UNKNOWN value-unknown = element unknown { xsd:string } # 3.4 iCalendar Stream start = element icalendar { vcalendar+ } Daboo, et al. Standards Track [Page 31] RFC 6321 xCal August 2011 # 3.6 Calendar Components vcalendar = element vcalendar { type-calprops, type-component } type-calprops = element properties { property-prodid & property-version & property-calscale? & property-method? } type-component = element components { ( component-vevent | component-vtodo | component-vjournal | component-vfreebusy | component-vtimezone )* } # 3.6.1 Event Component component-vevent = element vevent { type-eventprop, element components { component-valarm+ }? } type-eventprop = element properties { property-dtstamp & property-dtstart & property-uid & property-class? & property-created? & property-description? & property-geo? & property-last-mod? & property-location? & property-organizer? & property-priority? & property-seq? & property-status-event? & Daboo, et al. Standards Track [Page 32] RFC 6321 xCal August 2011 property-summary? & property-transp? & property-url? & property-recurid? & property-rrule? & (property-dtend | property-duration)? & property-attach* & property-attendee* & property-categories* & property-comment* & property-contact* & property-exdate* & property-rstatus* & property-related* & property-resources* & property-rdate* } # 3.6.2 To-do Component component-vtodo = element vtodo { type-todoprop, element components { component-valarm+ }? } type-todoprop = element properties { property-dtstamp & property-uid & property-class? & property-completed? & property-created? & property-description? & property-geo? & property-last-mod? & property-location? & property-organizer? & property-percent? & property-priority? & property-recurid? & property-seq? & property-status-todo? & property-summary? & Daboo, et al. Standards Track [Page 33] RFC 6321 xCal August 2011 property-url? & property-rrule? & ( (property-dtstart?, property-dtend? ) | (property-dtstart, property-duration)? ) & property-attach* & property-attendee* & property-categories* & property-comment* & property-contact* & property-exdate* & property-rstatus* & property-related* & property-resources* & property-rdate* } # 3.6.3 Journal Component component-vjournal = element vjournal { type-jourprop } type-jourprop = element properties { property-dtstamp & property-uid & property-class? & property-created? & property-dtstart? & property-last-mod? & property-organizer? & property-recurid? & property-seq? & property-status-jour? & property-summary? & property-url? & property-rrule? & property-attach* & property-attendee* & property-categories* & property-comment* & Daboo, et al. Standards Track [Page 34] RFC 6321 xCal August 2011 property-contact* & property-description? & property-exdate* & property-related* & property-rdate* & property-rstatus* } # 3.6.4 Free/Busy Component component-vfreebusy = element vfreebusy { type-fbprop } type-fbprop = element properties { property-dtstamp & property-uid & property-contact? & property-dtstart? & property-dtend? & property-duration? & property-organizer? & property-url? & property-attendee* & property-comment* & property-freebusy* & property-rstatus* } # 3.6.5 Time Zone Component component-vtimezone = element vtimezone { element properties { property-tzid & property-last-mod? & property-tzuurl? }, element components { (component-standard | component-daylight) & component-standard* & component-daylight* } } Daboo, et al. Standards Track [Page 35] RFC 6321 xCal August 2011 component-standard = element standard { type-tzprop } component-daylight = element daylight { type-tzprop } type-tzprop = element properties { property-dtstart & property-tzoffsetto & property-tzoffsetfrom & property-rrule? & property-comment* & property-rdate* & property-tzname* } # 3.6.6 Alarm Component component-valarm = element valarm { audioprop | dispprop | emailprop } type-audioprop = element properties { property-action & property-trigger & (property-duration, property-repeat)? & property-attach? } type-dispprop = element properties { property-action & property-description & property-trigger & property-summary & property-attendee+ & (property-duration, property-repeat)? & property-attach* } Daboo, et al. Standards Track [Page 36] RFC 6321 xCal August 2011 type-emailprop = element properties { property-action & property-description & property-trigger & (property-duration, property-repeat)? } # 3.7 Calendar Properties # 3.7.1 Calendar Scale property-calscale = element calscale { element parameters { empty }?, element text { "GREGORIAN" } } # 3.7.2 Method property-method = element method { element parameters { empty }?, value-text } # 3.7.3 Product Identifier property-prodid = element prodid { element parameters { empty }?, value-text } # 3.7.4 Version property-version = element version { element parameters { empty }?, element text { "2.0" } } Daboo, et al. Standards Track [Page 37] RFC 6321 xCal August 2011 # 3.8 Component Properties # 3.8.1 Descriptive Component Properties # 3.8.1.1 Attachment property-attach = element attach { element parameters { fmttypeparam? & encodingparam? }?, value-uri | value-binary } # 3.8.1.2 Categories property-categories = element categories { element parameters { languageparam? & }?, value-text+ } # 3.8.1.3 Classification property-class = element class { element parameters { empty }?, element text { "PUBLIC" | "PRIVATE" | "CONFIDENTIAL" } } # 3.8.1.4 Comment property-comment = element comment { element parameters { altrepparam? & languageparam? }?, Daboo, et al. Standards Track [Page 38] RFC 6321 xCal August 2011 value-text } # 3.8.1.5 Description property-description = element description { element parameters { altrepparam? & languageparam? }?, value-text } # 3.8.1.6 Geographic Position property-geo = element geo { element parameters { empty }?, element latitude { xsd:float }, element longitude { xsd:float } } # 3.8.1.7 Location property-location = element location { element parameters { altrepparam? & languageparam? }?, value-text } # 3.8.1.8 Percent Complete property-percent = element percent-complete { element parameters { empty }?, value-integer } Daboo, et al. Standards Track [Page 39] RFC 6321 xCal August 2011 # 3.8.1.9 Priority property-priority = element priority { element parameters { empty }?, value-integer } # 3.8.1.10 Resources property-resources = element resources { element parameters { altrepparam? & languageparam? }?, value-text+ } # 3.8.1.11 Status property-status-event = element status { element parameters { empty }?, element text { "TENTATIVE" | "CONFIRMED" | "CANCELLED" } } property-status-todo = element status { element parameters { empty }?, element text { "NEEDS-ACTION" | "COMPLETED" | "IN-PROCESS" | "CANCELLED" } } Daboo, et al. Standards Track [Page 40] RFC 6321 xCal August 2011 property-status-jour = element status { element parameters { empty }?, element text { "DRAFT" | "FINAL" | "CANCELLED" } } # 3.8.1.12 Summary property-summary = element summary { element parameters { altrepparam? & languageparam? }?, value-text } # 3.8.2 Date and Time Component Properties # 3.8.2.1 Date/Time Completed property-completed = element completed { element parameters { empty }?, value-date-time } # 3.8.2.2 Date/Time End property-dtend = element dtend { element parameters { tzidparam? }?, value-date-time | value-date } Daboo, et al. Standards Track [Page 41] RFC 6321 xCal August 2011 # 3.8.2.3 Date/Time Due property-due = element due { element parameters { tzidparam? }?, value-date-time | value-date } # 3.8.2.4 Date/Time Start property-dtstart = element dtstart { element parameters { tzidparam? }?, value-date-time | value-date } # 3.8.2.5 Duration property-duration = element duration { element parameters { empty }?, value-duration } # 3.8.2.6 Free/Busy Time property-freebusy = element freebusy { element parameters { fbtypeparam? }?, value-period+ } # 3.8.2.7 Time Transparency property-transp = element transp { Daboo, et al. Standards Track [Page 42] RFC 6321 xCal August 2011 element parameters { empty }?, element text { "OPAQUE" | "TRANSPARENT" } } # 3.8.3 Time Zone Component Properties # 3.8.3.1 Time Zone Identifier property-tzid = element tzid { element parameters { empty }?, value-text } # 3.8.3.2 Time Zone Name property-tzname = element tzname { element parameters { languageparam? }?, value-text } # 3.8.3.3 Time Zone Offset From property-tzoffsetfrom = element tzoffsetfrom { element parameters { empty }?, value-utc-offset } # 3.8.3.4 Time Zone Offset To property-tzoffsetto = element tzoffsetto { element parameters { empty }?, value-utc-offset } Daboo, et al. Standards Track [Page 43] RFC 6321 xCal August 2011 # 3.8.3.5 Time Zone URL property-tzurl = element tzurl { element parameters { empty }?, value-uri } # 3.8.4 Relationship Component Properties # 3.8.4.1 Attendee property-attendee = element attendee { element parameters { cutypeparam? & memberparam? & roleparam? & partstatparam? & rsvpparam? & deltoparam? & delfromparam? & sentbyparam? & cnparam? & dirparam? & languageparam? }?, value-cal-address } # 3.8.4.2 Contact property-contact = element contact { element parameters { altrepparam? & languageparam? }?, value-text } # 3.8.4.3 Organizer property-organizer = element organizer { Daboo, et al. Standards Track [Page 44] RFC 6321 xCal August 2011 element parameters { cnparam? & dirparam? & sentbyparam? & languageparam? }?, value-cal-address } # 3.8.4.4 Recurrence ID property-recurid = element recurrence-id { element parameters { tzidparam? & rangeparam? }?, value-date-time | value-date } # 3.8.4.5 Related-To property-related = element related-to { element parameters { reltypeparam? }?, value-text } # 3.8.4.6 Uniform Resource Locator property-url = element url { element parameters { empty }?, value-uri } # 3.8.4.7 Unique Identifier property-uid = element uid { element parameters { empty }?, Daboo, et al. Standards Track [Page 45] RFC 6321 xCal August 2011 value-text } # 3.8.5 Recurrence Component Properties # 3.8.5.1 Exception Date/Times property-exdate = element exdate { element parameters { tzidparam? }?, value-date-time+ | value-date+ } # 3.8.5.2 Recurrence Date/Times property-rdate = element rdate { element parameters { tzidparam? }?, value-date-time+ | value-date+ | value-period+ } # 3.8.5.3 Recurrence Rule property-rrule = element rrule { element parameters { empty }?, value-recur } # 3.8.6 Alarm Component Properties # 3.8.6.1 Action property-action = element action { element parameters { empty }?, Daboo, et al. Standards Track [Page 46] RFC 6321 xCal August 2011 element text { "AUDIO" | "DISPLAY" | "EMAIL" } } # 3.8.6.2 Repeat Count property-repeat = element repeat { element parameters { empty }?, value-integer } # 3.8.6.3 Trigger property-trigger = element trigger { ( element parameters { trigrelparam? }?, value-duration ) | ( element parameters { empty }?, value-date-time ) } # 3.8.7 Change Management Component Properties # 3.8.7.1 Date/Time Created property-created = element created { element parameters { empty }?, value-date-time } # 3.8.7.2 Date/Time Stamp property-dtstamp = element dtstamp { Daboo, et al. Standards Track [Page 47] RFC 6321 xCal August 2011 element parameters { empty }?, value-date-time } # 3.8.7.3 Last Modified property-last-mod = element last-modified { element parameters { empty }?, value-date-time } # 3.8.7.4 Sequence Number property-seq = element sequence { element parameters { empty }?, value-integer } # 3.8.8 Miscellaneous Component Properties # 3.8.8.3 Request Status property-rstatus = element request-status { element parameters { languageparam? }?, element code { xsd:string }, element description { xsd:string }, element data { xsd:string }? } Daboo, et al. Standards Track [Page 48] RFC 6321 xCal August 2011 Appendix B. Examples This section contains two examples of iCalendar objects with their xCal representation. B.1. Example 1 B.1.1. iCalendar Data BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//Example Inc.//Example Calendar//EN VERSION:2.0 BEGIN:VEVENT DTSTAMP:20080205T191224Z DTSTART:20081006 SUMMARY:Planning meeting UID:4088E990AD89CB3DBB484909 END:VEVENT END:VCALENDAR B.1.2. XML Data GREGORIAN -//Example Inc.//Example Calendar//EN 2.0 2008-02-05T19:12:24Z 2008-10-06 Planning meeting Daboo, et al. Standards Track [Page 49] RFC 6321 xCal August 2011 4088E990AD89CB3DBB484909 B.2. Example 2 B.2.1. iCalendar Data VERSION:2.0 PRODID:-//Example Corp.//Example Client//EN BEGIN:VTIMEZONE LAST-MODIFIED:20040110T032845Z TZID:US/Eastern BEGIN:DAYLIGHT DTSTART:20000404T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 END:DAYLIGHT BEGIN:STANDARD DTSTART:20001026T020000 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 END:STANDARD END:VTIMEZONE BEGIN:VEVENT DTSTAMP:20060206T001121Z DTSTART;TZID=US/Eastern:20060102T120000 DURATION:PT1H RRULE:FREQ=DAILY;COUNT=5 RDATE;TZID=US/Eastern;VALUE=PERIOD:20060102T150000/PT2H SUMMARY:Event #2 DESCRIPTION:We are having a meeting all this week at 12 pm fo r one hour\, with an additional meeting on the first day 2 h ours long.\nPlease bring your own lunch for the 12 pm meetin gs. UID:00959BC664CA650E933C892C@example.com END:VEVENT BEGIN:VEVENT Daboo, et al. Standards Track [Page 50] RFC 6321 xCal August 2011 DTSTAMP:20060206T001121Z DTSTART;TZID=US/Eastern:20060104T140000 DURATION:PT1H RECURRENCE-ID;TZID=US/Eastern:20060104T120000 SUMMARY:Event #2 bis UID:00959BC664CA650E933C892C@example.com END:VEVENT END:VCALENDAR B.2.2. XML Data -//Example Inc.//Example Client//EN 2.0 2004-01-10T03:28:45Z US/Eastern 2000-04-04T02:00:00 YEARLY 1SU 4 EDT -05:00 Daboo, et al. Standards Track [Page 51] RFC 6321 xCal August 2011 -04:00 2000-10-26T02:00:00 YEARLY -1SU 10 EST -04:00 -05:00 2006-02-06T00:11:21Z US/Eastern 2006-01-02T12:00:00 PT1H DAILY Daboo, et al. Standards Track [Page 52] RFC 6321 xCal August 2011 5 US/Eastern 2006-01-02T15:00:00 PT2H Event #2 We are having a meeting all this week at 12 pm for one hour, with an additional meeting on the first day 2 hours long. Please bring your own lunch for the 12 pm meetings. 00959BC664CA650E933C892C@example.com 2006-02-06T00:11:21Z US/Eastern 2006-01-04T14:00:00 PT1H US/Eastern 2006-01-04T12:00:00 Event #2 bis Daboo, et al. Standards Track [Page 53] RFC 6321 xCal August 2011 00959BC664CA650E933C892C@example.com Authors' Addresses Cyrus Daboo Apple Inc. 1 Infinite Loop Cupertino, CA 95014 USA EMail: cyrus@daboo.name URI: http://www.apple.com/ Mike Douglass Rensselaer Polytechnic Institute 110 8th Street Troy, NY 12180 USA EMail: douglm@rpi.edu URI: http://www.rpi.edu/ Steven Lees Microsoft Corporation One Microsoft Way Redmond, WA 98052 USA EMail: steven.lees@microsoft.com URI: http://www.microsoft.com/ Daboo, et al. Standards Track [Page 54]
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4