idnits 2.17.1 draft-daboo-et-al-icalendar-in-xml-08.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- == There are 91 instances of lines with non-RFC6890-compliant IPv4 addresses in the document. If these are example addresses, they should be changed. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (April 7, 2011) is 4740 days in the past. Is this intentional? -- Found something which looks like a code comment -- if you have code sections in the document, please surround them with '' and '' lines. Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) ** Obsolete normative reference: RFC 3023 (Obsoleted by RFC 7303) Summary: 1 error (**), 0 flaws (~~), 2 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group C. Daboo 3 Internet-Draft Apple, Inc. 4 Intended status: Standards Track M. Douglass 5 Expires: October 9, 2011 RPI 6 S. Lees 7 Microsoft 8 April 7, 2011 10 xCal: The XML format for iCalendar 11 draft-daboo-et-al-icalendar-in-xml-08 13 Abstract 15 This specification defines "xCal", an XML format for iCalendar data. 17 Status of This Memo 19 This Internet-Draft is submitted in full conformance with the 20 provisions of BCP 78 and BCP 79. 22 Internet-Drafts are working documents of the Internet Engineering 23 Task Force (IETF). Note that other groups may also distribute 24 working documents as Internet-Drafts. The list of current Internet- 25 Drafts is at http://datatracker.ietf.org/drafts/current/. 27 Internet-Drafts are draft documents valid for a maximum of six months 28 and may be updated, replaced, or obsoleted by other documents at any 29 time. It is inappropriate to use Internet-Drafts as reference 30 material or to cite them other than as "work in progress." 32 This Internet-Draft will expire on October 9, 2011. 34 Copyright Notice 36 Copyright (c) 2011 IETF Trust and the persons identified as the 37 document authors. All rights reserved. 39 This document is subject to BCP 78 and the IETF Trust's Legal 40 Provisions Relating to IETF Documents 41 (http://trustee.ietf.org/license-info) in effect on the date of 42 publication of this document. Please review these documents 43 carefully, as they describe your rights and restrictions with respect 44 to this document. Code Components extracted from this document must 45 include Simplified BSD License text as described in Section 4.e of 46 the Trust Legal Provisions and are provided without warranty as 47 described in the Simplified BSD License. 49 Table of Contents 51 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 52 2. Conventions Used in This Document . . . . . . . . . . . . . . 4 53 3. Converting from iCalendar to xCal . . . . . . . . . . . . . . 5 54 3.1. Pre-processing . . . . . . . . . . . . . . . . . . . . . . 5 55 3.2. iCalendar stream (RFC5545 section 3.4) . . . . . . . . . . 5 56 3.3. Components (RFC5545 section 3.6) . . . . . . . . . . . . . 6 57 3.4. Properties (RFC5545 section 3.7 and 3.8) . . . . . . . . . 7 58 3.4.1. Special Cases for Properties . . . . . . . . . . . . . 9 59 3.4.1.1. Multi-valued Properties . . . . . . . . . . . . . 9 60 3.4.1.2. GEO Property . . . . . . . . . . . . . . . . . . . 9 61 3.4.1.3. REQUEST-STATUS Property . . . . . . . . . . . . . 9 62 3.5. Parameters (RFC5545 section 3.2) . . . . . . . . . . . . . 10 63 3.5.1. VALUE parameter . . . . . . . . . . . . . . . . . . . 11 64 3.6. Values (RFC5545 section 3.3) . . . . . . . . . . . . . . . 11 65 3.6.1. Binary (RFC5545 section 3.3.1) . . . . . . . . . . . . 11 66 3.6.2. Boolean (RFC5545 section 3.3.2) . . . . . . . . . . . 12 67 3.6.3. Calendar User Address (RFC5545 section 3.3.3) . . . . 12 68 3.6.4. Date (RFC5545 section 3.3.4) . . . . . . . . . . . . . 12 69 3.6.5. Date-Time (RFC5545 section 3.3.5) . . . . . . . . . . 12 70 3.6.6. Duration (RFC5545 section 3.3.6) . . . . . . . . . . . 12 71 3.6.7. Float (RFC5545 section 3.3.7) . . . . . . . . . . . . 13 72 3.6.8. Integer (RFC5545 section 3.3.8) . . . . . . . . . . . 13 73 3.6.9. Period of Time (RFC5545 section 3.3.9) . . . . . . . . 13 74 3.6.10. Recurrence Rule (RFC5545 section 3.3.10) . . . . . . . 13 75 3.6.11. Text (RFC5545 section 3.3.11) . . . . . . . . . . . . 13 76 3.6.12. Time (RFC5545 section 3.3.12) . . . . . . . . . . . . 13 77 3.6.13. URI (RFC5545 section 3.3.13) . . . . . . . . . . . . . 14 78 3.6.14. UTC Offset (RFC5545 section 3.3.14) . . . . . . . . . 14 79 3.7. Extensions . . . . . . . . . . . . . . . . . . . . . . . . 14 80 4. Converting from XML into iCalendar . . . . . . . . . . . . . . 14 81 4.1. Converting XML Extensions into iCalendar . . . . . . . . . 14 82 4.2. The XML property for iCalendar . . . . . . . . . . . . . . 15 83 5. Security Considerations . . . . . . . . . . . . . . . . . . . 16 84 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 16 85 6.1. Namespace Registration . . . . . . . . . . . . . . . . . . 17 86 6.2. Media Type . . . . . . . . . . . . . . . . . . . . . . . . 17 87 6.3. iCalendar Property Registrations . . . . . . . . . . . . . 18 88 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 18 89 8. Normative References . . . . . . . . . . . . . . . . . . . . . 18 90 Appendix A. Relax NG Schema . . . . . . . . . . . . . . . . . . . 19 91 Appendix B. Examples . . . . . . . . . . . . . . . . . . . . . . 41 92 B.1. Example 1 . . . . . . . . . . . . . . . . . . . . . . . . 41 93 B.1.1. iCalendar Data . . . . . . . . . . . . . . . . . . . . 42 94 B.1.2. XML Data . . . . . . . . . . . . . . . . . . . . . . . 42 95 B.2. Example 2 . . . . . . . . . . . . . . . . . . . . . . . . 42 96 B.2.1. iCalendar Data . . . . . . . . . . . . . . . . . . . . 43 97 B.2.2. XML Data . . . . . . . . . . . . . . . . . . . . . . . 43 98 Appendix C. Change History (to be removed prior to 99 publication as an RFC) . . . . . . . . . . . . . . . 46 101 1. Introduction 103 The iCalendar data format [RFC5545] is a widely deployed interchange 104 format for calendaring and scheduling data. While many applications 105 and services consume and generate calendar data, iCalendar is a 106 specialized format that requires its own parser/generator. In 107 contrast, XML-based formats are widely used for interoperability 108 between applications, and the many tools that generate, parse, and 109 manipulate XML make it easier to work with than iCalendar. 111 The purpose of this specification is to define "xCal", an XML format 112 for iCalendar data. xCal is defined as a straightforward mapping into 113 XML from iCalendar, so that iCalendar data to be converted to XML, 114 and then back to iCalendar, without losing any semantic meaning in 115 the data. Anyone creating XML calendar data according to this 116 specification will know that their data can be converted to a valid 117 iCalendar representation as well. 119 Key design considerations are: 121 Round-tripping (converting an iCalendar instance to XML and back) 122 will give the same result as the starting point. 124 Preserve the semantics of the iCalendar data. While a simple 125 consumer can easily browse the calendar data in XML, a full 126 understanding of iCalendar is still required in order to modify 127 and/or fully comprehend the calendar data. 129 Ability to handle many extensions to the underlying iCalendar 130 specification without requiring an update to this document. 132 2. Conventions Used in This Document 134 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 135 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 136 document are to be interpreted as described in [RFC2119]. 138 When XML element types in the namespace 139 "urn:ietf:params:xml:ns:icalendar-2.0" are referenced in this 140 document outside of the context of an XML fragment, the string 141 "ICAL:" will be prefixed to the element types. 143 Some examples in this document contain "partial" XML documents used 144 for illustrative purposes. In these examples, three periods "..." 145 are used to indicate a portion of the document that has been removed 146 for compactness. 148 3. Converting from iCalendar to xCal 150 This section describes how iCalendar data is converted to XML using a 151 simple mapping between the iCalendar data model and XML elements. 153 3.1. Pre-processing 155 iCalendar uses a line folding mechanism to limit lines of data to a 156 maximum line length (typically 72 characters) to ensure maximum 157 likelihood of preserving data integrity as it is transported via 158 various means (e.g., email) - see Section 3.1 of [RFC5545]. Prior to 159 converting iCalendar data into XML all folded lines MUST be unfolded. 161 iCalendar data uses an "escape" character sequence for text values 162 and parameter values. When such text elements are converted into XML 163 the escaping MUST be removed. 165 iCalendar uses a base64 encoding for binary data. The base64 166 encoding MUST remain when converted to XML. 168 3.2. iCalendar stream (RFC5545 section 3.4) 170 At the top level of the iCalendar object model is an "iCalendar 171 stream". This object encompasses multiple "iCalendar objects". In 172 XML, the entire stream is contained in the root ICAL:icalendar XML 173 element. 175 An iCalendar stream can contain one or more iCalendar objects. Each 176 iCalendar object, delimited by BEGIN:VCALENDAR and END:VCALENDAR, is 177 enclosed by the ICAL:vcalendar XML element. 179 Example: 181 182 183 184 ... 185 186 188 iCalendar objects are comprised of a set of "components", 189 "properties", "parameters" and "values". A "component" can contain 190 other "components" or "properties". A "property" has a value and 191 optionally a set of "parameters". 193 In xCal, "components" are contained within an ICAL:components XML 194 element. With that element, another ICAL:components element could 195 appear (representing components nested within components) or the 196 ICAL:properties XML element could appear. ICAL:properties is used to 197 encapsulate iCalendar properties. 199 Each iCalendar property will be mapped to its own XML element as 200 described below. Within each of these elements there is an optional 201 ICAL:parameters XML element used to encapsulate any iCalendar 202 parameters. Additionally there will be one or more XML elements 203 representing the value of the iCalendar property. 205 Example: 207 208 209 210 211 ... 212 213 214 ... 215 216 217 219 +------------------+----------------+------------------+ 220 | Item | XML element | XML Definition | 221 +------------------+----------------+------------------+ 222 | iCalendar Stream | ICAL:icalendar | Appendix A # 3.4 | 223 | VCALENDAR | ICAL:vcalendar | Appendix A # 3.6 | 224 +------------------+----------------+------------------+ 226 3.3. Components (RFC5545 section 3.6) 228 Each calendar component in the VCALENDAR object, delimited by BEGIN 229 and END, will be converted to an enclosing XML element with the same 230 name, but in lowercase. Any iCalendar components added in the future 231 will be converted in the same way. As a non-normative reference, the 232 table below shows the current iCalendar components and their XML 233 equivalents. 235 +-----------+----------------+--------------------+ 236 | Component | XML element | XML Definition | 237 +-----------+----------------+--------------------+ 238 | VEVENT | ICAL:vevent | Appendix A # 3.6.1 | 239 | VTODO | ICAL:vtodo | Appendix A # 3.6.2 | 240 | VJOURNAL | ICAL:vjournal | Appendix A # 3.6.3 | 241 | VFREEBUSY | ICAL:vfreebusy | Appendix A # 3.6.4 | 242 | VTIMEZONE | ICAL:vtimezone | Appendix A # 3.6.5 | 243 | STANDARD | ICAL:standard | Appendix A # 3.6.5 | 244 | DAYLIGHT | ICAL:daylight | Appendix A # 3.6.5 | 245 | VALARM | ICAL:valarm | Appendix A # 3.6.6 | 246 +-----------+----------------+--------------------+ 248 3.4. Properties (RFC5545 section 3.7 and 3.8) 250 iCalendar properties , whether they apply to the VCALENDAR object or 251 to a component, are handled in a consistent way in the xCal format. 253 iCalendar properties are enclosed in the XML element ICAL:properties. 255 Each individual iCalendar property is represented in XML by an 256 element of the same name as the iCalendar property, but in lowercase. 257 For example, the CALSCALE property is represented in XML by the ICAL: 258 calscale element. 260 Example: 262 263 264 265 266 ... 267 ... 268 ... 269 270 271 ... 272 273 274 276 Each property can contain an ICAL:parameters XML element 277 encapsulating any iCalendar parameters associated with the iCalendar 278 property. 280 Each property will contain one or more "value" XML elements as 281 described below representing the value of the iCalendar property. As 282 with components, the table is a non-normative reference and is not 283 meant to be exclusive. Any iCalendar properties added in the future 284 will be converted using the same mapping rule. 286 +------------------+-----------------------+-----------------------+ 287 | Property | XML element | XML Definition | 288 +------------------+-----------------------+-----------------------+ 289 | CALSCALE | ICAL:calscale | Appendix A # 3.7.1 | 290 | METHOD | ICAL:method | Appendix A # 3.7.2 | 291 | PRODID | ICAL:prodid | Appendix A # 3.7.3 | 292 | VERSION | ICAL:version | Appendix A # 3.7.4 | 293 | ATTACH | ICAL:attach | Appendix A # 3.8.1.1 | 294 | CATEGORIES | ICAL:categories | Appendix A # 3.8.1.2 | 295 | CLASS | ICAL:class | Appendix A # 3.8.1.3 | 296 | COMMENT | ICAL:comment | Appendix A # 3.8.1.4 | 297 | DESCRIPTION | ICAL:description | Appendix A # 3.8.1.5 | 298 | GEO | ICAL:geo | Appendix A # 3.8.1.6 | 299 | LOCATION | ICAL:location | Appendix A # 3.8.1.7 | 300 | PERCENT-COMPLETE | ICAL:percent-complete | Appendix A # 3.8.1.8 | 301 | PRIORITY | ICAL:priority | Appendix A # 3.8.1.9 | 302 | RESOURCES | ICAL:resources | Appendix A # 3.8.1.10 | 303 | STATUS | ICAL:status | Appendix A # 3.8.1.11 | 304 | SUMMARY | ICAL:summary | Appendix A # 3.8.1.12 | 305 | COMPLETED | ICAL:completed | Appendix A # 3.8.2.1 | 306 | DTEND | ICAL:dtend | Appendix A # 3.8.2.2 | 307 | DUE | ICAL:due | Appendix A # 3.8.2.3 | 308 | DTSTART | ICAL:dtstart | Appendix A # 3.8.2.4 | 309 | DURATION | ICAL:duration | Appendix A # 3.8.2.5 | 310 | FREEBUSY | ICAL:freebusy | Appendix A # 3.8.2.6 | 311 | TRANSP | ICAL:transp | Appendix A # 3.8.2.7 | 312 | TZID | ICAL:tzid | Appendix A # 3.8.3.1 | 313 | TZNAME | ICAL:tzname | Appendix A # 3.8.3.2 | 314 | TZOFFSETFROM | ICAL:tzoffsetfrom | Appendix A # 3.8.3.3 | 315 | TZOFFSETTO | ICAL:tzoffsetto | Appendix A # 3.8.3.4 | 316 | TZURL | ICAL:tzurl | Appendix A # 3.8.3.5 | 317 | ATTENDEE | ICAL:attendee | Appendix A # 3.8.4.1 | 318 | CONTACT | ICAL:contact | Appendix A # 3.8.4.2 | 319 | ORGANIZER | ICAL:organizer | Appendix A # 3.8.4.3 | 320 | RECURRENCE-ID | ICAL:recurrence-id | Appendix A # 3.8.4.4 | 321 | RELATED-TO | ICAL:related-to | Appendix A # 3.8.4.5 | 322 | URL | ICAL:url | Appendix A # 3.8.4.6 | 323 | UID | ICAL:uid | Appendix A # 3.8.4.7 | 324 | EXDATE | ICAL:exdate | Appendix A # 3.8.5.1 | 325 | RDATE | ICAL:rdate | Appendix A # 3.8.5.2 | 326 | RRULE | ICAL:rrule | Appendix A # 3.8.5.3 | 327 | ACTION | ICAL:action | Appendix A # 3.8.6.1 | 328 | REPEAT | ICAL:repeat | Appendix A # 3.8.6.2 | 329 | TRIGGER | ICAL:trigger | Appendix A # 3.8.6.3 | 330 | CREATED | ICAL:created | Appendix A # 3.8.7.1 | 331 | DTSTAMP | ICAL:dtstamp | Appendix A # 3.8.7.2 | 332 | LAST-MODIFIED | ICAL:last-modified | Appendix A # 3.8.7.3 | 333 | SEQUENCE | ICAL:sequence | Appendix A # 3.8.7.4 | 334 | REQUEST-STATUS | ICAL:request-status | Appendix A # 3.8.8.3 | 335 +------------------+-----------------------+-----------------------+ 337 3.4.1. Special Cases for Properties 339 This section describes some properties that have special handling 340 when converting to XML. 342 3.4.1.1. Multi-valued Properties 344 The following iCalendar properties can have values that consist of a 345 list of "standard" iCalendar values separated by a specific 346 delimiter. In XML these properties are represented by an XML element 347 that contains multiple "value" elements (Section 3.6). 349 +------------+-----------------+-----------------------+ 350 | Property | XML element | XML Definition | 351 +------------+-----------------+-----------------------+ 352 | CATEGORIES | ICAL:categories | Appendix A # 3.8.1.2 | 353 | RESOURCES | ICAL:resources | Appendix A # 3.8.1.10 | 354 | FREEBUSY | ICAL:freebusy | Appendix A # 3.8.2.6 | 355 | EXDATE | ICAL:exdate | Appendix A # 3.8.5.1 | 356 | RDATE | ICAL:rdate | Appendix A # 3.8.5.2 | 357 +------------+-----------------+-----------------------+ 359 3.4.1.2. GEO Property 361 In iCalendar, the GEO property value is defined as a semi-colon 362 separated list of two FLOAT values, the first representing latitude 363 and the second longitude. 365 In xCal, the value for the ICAL:geo element is represented by an 366 ICAL:value element containing an ICAL:latitude element and an ICAL: 367 longitude element, each of which contain text values representing the 368 FLOAT values. See Appendix A # 3.8.1.6. 370 3.4.1.3. REQUEST-STATUS Property 372 In iCalendar, the REQUEST-STATUS property value is defined as a semi- 373 colon separated list of two or three TEXT values. The first 374 represents a code, the second a description, and the third (optional) 375 additional data. 377 In xCal, the value for the ICAL:request-status element is represented 378 by an ICAL:value element containing an ICAL:code element, and iCAL: 380 description element, and optionally and ICAL:data element, each of 381 which contain the corresponding TEXT values. See Appendix A # 382 3.8.8.3. 384 3.5. Parameters (RFC5545 section 3.2) 386 iCalendar parameters are enclosed in the XML element ICAL:parameters 387 which optionally occurs once in each property XML element. 389 Each individual iCalendar parameter is represented in xCal by an 390 element of the same name as the iCalendar parameter, but in 391 lowercase. For example, the PARTSTAT parameter is represented in XML 392 by the ICAL:partstat element. 394 Example: 396 397 398 399 ... 400 401 ... 402 403 404 NEEDS-ACTION 405 406 ... 407 408 409 411 Each parameter contains either text, or one or more child XML 412 elements representing iCalendar value types. 414 As with components and properties, the table below is shown as a non- 415 normative reference. Any parameters added to iCalendar in the future 416 will be converted by the rule given above. 418 +----------------+---------------------+---------------------+ 419 | Parameter | XML element | XML Definition | 420 +----------------+---------------------+---------------------+ 421 | ALTREP | ICAL:altrep | Appendix A # 3.2.1 | 422 | CN | ICAL:cn | Appendix A # 3.2.2 | 423 | CUTYPE | ICAL:cutype | Appendix A # 3.2.3 | 424 | DELEGATED-FROM | ICAL:delegated-from | Appendix A # 3.2.4 | 425 | DELEGATED-TO | ICAL:delegated-to | Appendix A # 3.2.5 | 426 | DIR | ICAL:dir | Appendix A # 3.2.6 | 427 | ENCODING | ICAL:encoding | Appendix A # 3.2.7 | 428 | FMTTYPE | ICAL:fmttype | Appendix A # 3.2.8 | 429 | FBTYPE | ICAL:fbtype | Appendix A # 3.2.9 | 430 | LANGUAGE | ICAL:language | Appendix A # 3.2.10 | 431 | MEMBER | ICAL:member | Appendix A # 3.2.11 | 432 | PARTSTAT | ICAL:partstat | Appendix A # 3.2.12 | 433 | RANGE | ICAL:range | Appendix A # 3.2.13 | 434 | RELATED | ICAL:related | Appendix A # 3.2.14 | 435 | RELTYPE | ICAL:reltype | Appendix A # 3.2.15 | 436 | ROLE | ICAL:role | Appendix A # 3.2.16 | 437 | RSVP | ICAL:rsvp | Appendix A # 3.2.17 | 438 | SENT-BY | ICAL:sent-by | Appendix A # 3.2.18 | 439 | TZID | ICAL:tzid | Appendix A # 3.2.19 | 440 +----------------+---------------------+---------------------+ 442 3.5.1. VALUE parameter 444 iCalendar defines a VALUE parameter (Section 3.2.20 of [RFC5545]). 445 This parameter is not mapped to an xCal XML element. Instead, the 446 value type is handled by having different XML elements for each 447 value, and these appear inside of ICAL:property elements. Thus, when 448 converting from iCalendar to XML, any VALUE parameters are skipped. 449 When converting from XML into iCalendar, the appropriate VALUE 450 parameter MUST be included in the iCalendar property if the value 451 type is not the default value type for that property. 453 3.6. Values (RFC5545 section 3.3) 455 In the typical case, iCalendar value types are mapped into XML 456 elements with a matching name in all lowercase. In the case of the 457 value for a recurrence rule (see below), iCalendar defines 458 "structured" values and these are mapped into separate child elements 459 for each value element. 461 3.6.1. Binary (RFC5545 section 3.3.1) 462 Description: iCalendar BINARY property values are represented by the 463 ICAL:binary XML element. The content of the element is base64 464 encoded data. Whitespace MAY be inserted into the data at any 465 point to "wrap" the data to reasonable line lengths. When 466 converting back to iCalendar the whitespace MUST first be removed. 468 XML Definition: Appendix A # 3.3.1 470 3.6.2. Boolean (RFC5545 section 3.3.2) 472 Description: iCalendar BOOLEAN property values are represented by 473 the ICAL:boolean XML element. The content of the element is text 474 containing either of "TRUE" or "FALSE". 476 XML Definition: Appendix A # 3.3.2 478 3.6.3. Calendar User Address (RFC5545 section 3.3.3) 480 Description: iCalendar CAL-ADDRESS property values are represented 481 by the ICAL:cal-address XML element. The content of the element 482 is a URI. 484 XML Definition: Appendix A # 3.3.3 486 3.6.4. Date (RFC5545 section 3.3.4) 488 Description: iCalendar DATE property values are represented by the 489 ICAL:date XML element. The content of the element is the same 490 date value specified by RFC5545. 492 XML Definition: Appendix A # 3.3.4 494 3.6.5. Date-Time (RFC5545 section 3.3.5) 496 Description: iCalendar DATE-TIME property values are represented by 497 the ICAL:date-time XML element. The content of the element is the 498 same date-time value specified by RFC5545. 500 XML Definition: Appendix A # 3.3.5 502 3.6.6. Duration (RFC5545 section 3.3.6) 504 Description: iCalendar DURATION property values are represented by 505 the ICAL:duration XML element. The content of the element is the 506 same duration value specified by RFC5545. 508 XML Definition: Appendix A # 3.3.6 510 3.6.7. Float (RFC5545 section 3.3.7) 512 Description: iCalendar FLOAT property values are represented by the 513 ICAL:float XML element. The content of the element is a text 514 representation of a floating point number. 516 XML Definition: Appendix A # 3.3.7 518 3.6.8. Integer (RFC5545 section 3.3.8) 520 Description: iCalendar INTEGER property values are represented by 521 the ICAL:integer XML element. The content of the element is a 522 text representation of an integer number. 524 XML Definition: Appendix A # 3.3.8 526 3.6.9. Period of Time (RFC5545 section 3.3.9) 528 Description: iCalendar PERIOD property values are represented by the 529 ICAL:period XML element. The content of the element is the same 530 period value specified by RFC5545. 532 XML Definition: Appendix A # 3.3.9 534 3.6.10. Recurrence Rule (RFC5545 section 3.3.10) 536 Description: iCalendar RECUR property values are represented by the 537 ICAL:recur XML element. The content of the element is child 538 elements representing the various components of a recurrence rule. 540 XML Definition: Appendix A # 3.3.10 542 3.6.11. Text (RFC5545 section 3.3.11) 544 Description: iCalendar TEXT property values are represented by the 545 ICAL:text XML element. The content of the element is simple text. 547 XML Definition: Appendix A # 3.3.11 549 3.6.12. Time (RFC5545 section 3.3.12) 551 Description: iCalendar TIME property values are represented by the 552 ICAL:time XML element. The content of the element is the same 553 time value specified by RFC5545. 555 XML Definition: Appendix A # 3.3.12 557 3.6.13. URI (RFC5545 section 3.3.13) 559 Description: iCalendar URI property values are represented by the 560 ICAL:uri XML element. The content of the element is a URI. 562 XML Definition: Appendix A # 3.3.13 564 3.6.14. UTC Offset (RFC5545 section 3.3.14) 566 Description: iCalendar UTC-OFFSET property values are represented by 567 the ICAL:utc-offset XML element. The content of the element is 568 the same UTC offset value specified by RFC5545. 570 XML Definition: Appendix A # 3.3.14 572 3.7. Extensions 574 iCalendar extension properties and parameters (those with an "X-" 575 prefix in their name) are handled in the same way as other properties 576 and parameters: the property or parameter is represented by an XML 577 element with the same name, but in lowercase. e.g., the "X-FOO" 578 property in iCalendar turns into the ICAL:x-foo element in XML. 580 4. Converting from XML into iCalendar 582 When converting component, property and parameter values, the names 583 SHOULD be converted to uppercase. Although iCalendar names are case 584 insensitive, common practice is to keep them all uppercase following 585 the actual definitions in [RFC5545]. 587 Backslash escaping and line folding MUST be applied to the resulting 588 iCalendar data as required by [RFC5545]. 590 4.1. Converting XML Extensions into iCalendar 592 XML extensions are converted back to iCalendar in one of two ways, 593 depending on whether the extensions are in the iCalendar XML 594 namespace, or in an external namespace. 596 Extensions that are part of the iCalendar XML namespace MUST have 597 element names that being with "x-", and will be converted back to the 598 equivalent extension property in iCalendar. For example, the "x-foo" 599 element will convert to the "X-FOO" iCalendar property. 601 Extensions that are in a namespace other than the iCalendar XML 602 namespace SHOULD be preserved in the iCalendar representation using 603 the XML iCalendar property described in Section 4.2. 605 4.2. The XML property for iCalendar 607 This section describes an extension property for iCalendar, as 608 covered in section 8.2.3 of [RFC5545]. 610 Property name: XML 612 Purpose: To embed XML-encoded calendar data in the iCalendar format. 614 Value type: The default value type is TEXT. The value type can also 615 be set to BINARY to indicate base64 encoded content. 617 Property parameters: IANA, non-standard, inline encoding, and value 618 data type property parameters can be specified on this property. 620 Conformance: The property can appear on any iCalendar component. 622 Description: The value of this property is an XML element. The XML 623 property MUST NOT be used to contain properties that are already 624 defined in iCalendar, or properties that use the "X-" iCalendar 625 extension property syntax. Since all elements in the 626 urn:ietf:params:xml:ns:icalendar-2.0 namespace convert to a well- 627 defined iCalendar object, the elements in this property MUST NOT be 628 in the urn:ietf:params:xml:ns:icalendar-2.0 namespace. The XML 629 element which is the value of this property MUST have an XML 630 namespace declaration. 632 Note that the source XML may contain characters not allowed in 633 iCalendar such as control characters. If this is the case, then the 634 XML data MUST be base64 encoded. As required by [RFC5545], the 635 ENCODING paramater MUST be present and set to "BASE64", and the VALUE 636 parameter must be present and set to "BINARY". 638 There can be more than one XML property present for a given iCalendar 639 object. The ordering of XML properties is not preserved in the 640 conversion between XML and iCalendar. 642 Format definition: This property is defined by the following 643 notation: 645 xml = "XML" xmlparam ( ":" text ) / 646 ( 647 ";" "ENCODING" "=" "BASE64" 648 ";" "VALUE" "=" "BINARY" 649 ":" binary 650 ) 651 CRLF 653 xmlparam = *(";" other-param) 655 Example: The following is an example of an iCalendar event with a 656 location embedded in KML markup inside the XML property. 658 BEGIN:VCALENDAR 659 CALSCALE:GREGORIAN 660 PRODID:-//Example Inc.//Example Calendar//EN 661 VERSION:2.0 662 BEGIN:VEVENT 663 DTSTAMP:20080205T191224Z 664 DTSTART:20081006 665 SUMMARY:Planning meeting 666 UID:4088E990AD89CB3DBB484909 667 XML:... 668 END:VEVENT 669 END:VCALENDAR 671 5. Security Considerations 673 For security considerations specific to calendar data, see Section 7 674 of [RFC5545]. Since this specification is a mapping from iCalendar, 675 no new security concerns are introduced related to calendar data. 677 The use of XML as a format does have security risks. Section 7 of 678 [RFC3470] discusses these risks. See also the security discussion 679 for the application/xml type in [RFC3023]. 681 6. IANA Considerations 683 This document defines a new URN to identify a new XML namespace for 684 iCalendar data. The URN conforms to a registry mechanism described 685 in [RFC3688]. 687 This document defines a new media type. The registration is in 688 Section 6.2. 690 This document defines a new property for iCalendar. The registration 691 is in Section 6.3. 693 6.1. Namespace Registration 695 Registration request for the iCalendar namespace: 697 URI: urn:ietf:params:xml:ns:icalendar-2.0 699 Registrant Contact: See the "Authors' Addresses" section of this 700 document. 702 XML: None. Namespace URIs do not represent an XML specification. 704 6.2. Media Type 706 This section defines the MIME media type for use with iCalendar in 707 XML data. 709 Type name: application 711 Subtype name: calendar+xml 713 Required parameters: none 715 Optional parameters: method, component and optinfo as defined for 716 the text/calendar media type in [RFC5545]; charset as defined for 717 application/xml in [RFC3023]; per [RFC3023], use of the charset 718 parameter with the value "utf-8" is "STRONGLY RECOMMENDED" 720 Encoding considerations: Same as encoding considerations of 721 application/xml as specified in [RFC3023] 723 Security considerations: See Section 5. 725 Interoperability considerations: This media type provides an 726 alternative format for iCalendar data based on XML. 728 Published specification: This specification. 730 Applications which use this media type: Applications that currently 731 make use of the text/calendar media type can use this as an 732 alternative. 734 Additional information: 736 Magic number(s): None 737 File extension(s): xcs 739 Macintosh file type code(s): None specified. 741 Person & email address to contact for further information: 742 calsify@ietf.org 744 Intended usage: COMMON 746 Restrictions on usage: There are no restrictions on where this media 747 type can be used. 749 Author: See the "Author's Address" section of this document. 751 Change controller: IETF 753 6.3. iCalendar Property Registrations 755 This document defines the following new iCalendar property to be 756 added to the registry defined in Section 8.2.3 of [RFC5545]: 758 +----------+---------+----------------------+ 759 | Property | Status | Reference | 760 +----------+---------+----------------------+ 761 | XML | Current | RFCXXXX, Section 4.2 | 762 +----------+---------+----------------------+ 764 7. Acknowledgments 766 This specification originated from the work of the XML technical 767 committee of the Calendaring and Scheduling Consortium. 769 8. Normative References 771 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 772 Requirement Levels", BCP 14, RFC 2119, March 1997. 774 [RFC3023] Murata, M., St. Laurent, S., and D. Kohn, "XML Media 775 Types", RFC 3023, January 2001. 777 [RFC3470] Hollenbeck, S., Rose, M., and L. Masinter, "Guidelines for 778 the Use of Extensible Markup Language (XML) 779 within IETF Protocols", BCP 70, RFC 3470, January 2003. 781 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 782 January 2004. 784 [RFC5545] Desruisseaux, B., "Internet Calendaring and Scheduling 785 Core Object Specification (iCalendar)", RFC 5545, 786 September 2009. 788 Appendix A. Relax NG Schema 790 Below is a Relax NG schema for iCalendar in XML. The schema is non- 791 normative and given for reference only. 793 This schema uses the compact notation of Relax NG. The numeric 794 section numbers given in the comments refer to section in [RFC5545]. 795 The ordering of elements follows the section ordering of [RFC5545]. 797 The Relax NG compact notation "?" operator is used to indicate an 798 unordered list of items. However, that operator, as defined, allows 799 "mixing" each element that it operates on at any depth within the 800 other elements, rather than just allowing "mixing" of siblings only. 801 As a result, the schema provided allows certain constructs that are 802 not allowed in iCalendar. Given that there is no sibling-only 803 unordered list operator in RelaxNG, this is the best representation 804 that can be given. 806 # Relax NG Schema for iCalendar in XML 808 default namespace = "urn:ietf:params:xml:ns:icalendar-2.0" 810 # 3.2 Property Parameters 812 # 3.2.1 Alternate Text Representation 814 altrepparam = element altrep { value-uri } 816 # 3.2.2 Common Name 818 cnparam = element cn { text } 820 # 3.2.3 Calendar User Type 822 cutypeparam = element cutype { 823 "INDIVIDUAL" | 824 "GROUP" | 825 "RESOURCE" | 826 "ROOM" | 827 "UNKNOWN" 828 } 830 # 3.2.4 Delegators 832 delfromparam = element delegated-from { value-cal-address+ } 833 # 3.2.5 Delegatees 835 deltoparam = element delegated-to { value-cal-address+ } 837 # 3.2.6 Directory Entry Reference 839 dirparam = element dir { value-uri } 841 # 3.2.7 Inline Encoding 843 encodingparam = element encoding { 844 "8BIT" | 845 "BASE64" 846 } 848 # 3.2.8 Format Type 850 fmttypeparam = element fmttype { text } 852 # 3.2.9 Free/Busy Time Type 854 fbtypeparam = element fbtype { 855 "FREE" | 856 "BUSY" | 857 "BUSY-UNAVAILABLE" | 858 "BUSY-TENTATIVE" 859 } 861 # 3.2.10 Language 863 languageparam = element language { text } 865 # 3.2.11 Group or List Membership 867 memberparam = element member { value-cal-address+ } 869 # 3.2.12 Participation Status 871 partstatparam = element partstat { 872 type-partstat-event | 873 type-partstat-todo | 874 type-partstat-jour 875 } 877 type-partstat-event = ( 878 "NEEDS-ACTION" | 879 "ACCEPTED" | 880 "DECLINED" | 881 "TENTATIVE" | 882 "DELEGATED" 883 ) 885 type-partstat-todo = ( 886 "NEEDS-ACTION" | 887 "ACCEPTED" | 888 "DECLINED" | 889 "TENTATIVE" | 890 "DELEGATED" | 891 "COMPLETED" | 892 "IN-PROCESS" 893 ) 895 type-partstat-jour = ( 896 "NEEDS-ACTION" | 897 "ACCEPTED" | 898 "DECLINED" 899 ) 901 # 3.2.13 Recurrence Identifier Range 903 rangeparam = element range { 904 "THISANDFUTURE" 905 } 907 # 3.2.14 Alarm Trigger Relationship 909 trigrelparam = element related { 910 "START" | 911 "END" 912 } 914 # 3.2.15 Relationship Type 916 reltypeparam = element reltype { 917 "PARENT" | 918 "CHILD" | 919 "SIBLING" 920 } 922 # 3.2.16 Participation Role 924 roleparam = element role { 925 "CHAIR" | 926 "REQ-PARTICIPANT" | 927 "OPT-PARTICIPANT" | 928 "NON-PARTICIPANT" 929 } 931 # 3.2.17 RSVP Expectation 933 rsvpparam = element rsvp { 934 "TRUE" | 935 "FALSE" 936 } 938 # 3.2.18 Sent By 940 sentbyparam = element sent-by { value-cal-address } 942 # 3.2.19 Time Zone Identifier 944 tzidparam = element tzid { text } 946 # 3.3 Property Value Data Types 948 # 3.3.1 BINARY 950 value-binary = element binary { text } 952 # 3.3.2 BOOLEAN 954 value-boolean = element boolean { 955 ("TRUE" | "FALSE") 956 } 958 # 3.3.3 CAL-ADDRESS 960 value-cal-address = element cal-address { text } 962 # 3.3.4 DATE 964 value-date = element date { 965 text 966 } 968 # 3.3.5 DATE-TIME 970 value-date-time = element date-time { 971 text 972 } 974 # 3.3.6 DURATION 975 value-duration = element duration { 976 text 977 } 979 # 3.3.7 FLOAT 981 value-float = element float { text } 983 # 3.3.8 INTEGER 985 value-integer = element integer { text } 987 # 3.3.9 PERIOD 989 value-period = element period { 990 text 991 } 993 # 3.3.10 RECUR 995 value-recur = element recur { 996 type-freq, 997 (type-until | type-count)?, 998 element interval { text }?, 999 element bysecond { text }*, 1000 element byminute { text }*, 1001 element byhour { text }*, 1002 type-byday*, 1003 type-bymonthday*, 1004 type-byyearday*, 1005 type-byweekno*, 1006 element bymonth { text }*, 1007 type-bysetpos*, 1008 element wkst { type-weekday }? 1009 } 1011 type-freq = element freq { 1012 "SECONDLY" | 1013 "MINUTELY" | 1014 "HOURLY" | 1015 "DAILY" | 1016 "WEEKLY" | 1017 "MONTHLY" | 1018 "YEARLY" 1019 } 1021 type-until = element until { 1022 type-date | 1023 type-date-time 1024 } 1026 type-count = element count { text } 1028 type-weekday = ( 1029 "SU" | 1030 "MO" | 1031 "TU" | 1032 "WE" | 1033 "TH" | 1034 "FR" | 1035 "SA" 1036 ) 1038 type-byday = element byday { 1039 text 1040 } 1042 type-bymonthday = element bymonthday { 1043 text 1044 } 1046 type-byyearday = element byyearday { 1047 text 1048 } 1050 type-byweekno = element byweekno { 1051 text 1052 } 1054 type-bysetpos = element bysetpos { 1055 text 1056 } 1058 # 3.3.11 TEXT 1060 value-text = element text { text } 1062 # 3.3.12 TIME 1064 value-time = element time { text } 1066 # 3.3.13 URI 1068 value-uri = element uri { text } 1070 # 3.3.14 UTC-OFFSET 1071 value-utc-offset = element utc-offset { text } 1073 # 3.4 iCalendar Stream 1075 start = element icalendar { vcalendar+ } 1077 # 3.6 Calendar Components 1079 vcalendar = element vcalendar { 1080 type-calprops, 1081 type-component 1082 } 1084 type-calprops = element properties { 1085 property-prodid & 1086 property-version & 1087 property-calscale? & 1088 property-method? 1089 } 1091 type-component = element components { 1092 ( 1093 component-vevent | 1094 component-vtodo | 1095 component-vjournal | 1096 component-vfreebusy | 1097 component-vtimezone 1098 )* 1099 } 1101 # 3.6.1 Event Component 1103 component-vevent = element vevent { 1104 type-eventprop, 1105 element components { 1106 component-valarm+ 1107 }? 1108 } 1110 type-eventprop = element properties { 1111 property-dtstamp & 1112 property-dtstart & 1113 property-uid & 1115 property-class? & 1116 property-created? & 1117 property-description? & 1118 property-geo? & 1119 property-last-mod? & 1120 property-location? & 1121 property-organizer? & 1122 property-priority? & 1123 property-seq? & 1124 property-status-event? & 1125 property-summary? & 1126 property-transp? & 1127 property-url? & 1128 property-recurid? & 1130 property-rrule? & 1132 (property-dtend | property-duration)? & 1134 property-attach* & 1135 property-attendee* & 1136 property-categories* & 1137 property-comment* & 1138 property-contact* & 1139 property-exdate* & 1140 property-rstatus* & 1141 property-related* & 1142 property-resources* & 1143 property-rdate* 1144 } 1146 # 3.6.2 To-do Component 1148 component-vtodo = element vtodo { 1149 type-todoprop, 1150 element components { 1151 component-valarm+ 1152 }? 1153 } 1155 type-todoprop = element properties { 1156 property-dtstamp & 1157 property-uid & 1159 property-class? & 1160 property-completed? & 1161 property-created? & 1162 property-description? & 1163 property-geo? & 1164 property-last-mod? & 1165 property-location? & 1166 property-organizer? & 1167 property-percent? & 1168 property-priority? & 1169 property-recurid? & 1170 property-seq? & 1171 property-status-todo? & 1172 property-summary? & 1173 property-url? & 1175 property-rrule? & 1177 ( 1178 (property-dtstart?, property-dtend? ) | 1179 (property-dtstart, property-duration)? 1180 ) & 1182 property-attach* & 1183 property-attendee* & 1184 property-categories* & 1185 property-comment* & 1186 property-contact* & 1187 property-exdate* & 1188 property-rstatus* & 1189 property-related* & 1190 property-resources* & 1191 property-rdate* 1192 } 1194 # 3.6.3 Journal Component 1196 component-vjournal = element vjournal { 1197 type-jourprop 1198 } 1200 type-jourprop = element properties { 1201 property-dtstamp & 1202 property-uid & 1204 property-class? & 1205 property-created? & 1206 property-dtstart? & 1207 property-last-mod? & 1208 property-organizer? & 1209 property-recurid? & 1210 property-seq? & 1211 property-status-jour? & 1212 property-summary? & 1213 property-url? & 1214 property-rrule? & 1216 property-attach* & 1217 property-attendee* & 1218 property-categories* & 1219 property-comment* & 1220 property-contact* & 1221 property-description? & 1222 property-exdate* & 1223 property-related* & 1224 property-rdate* & 1225 property-rstatus* 1226 } 1228 # 3.6.4 Free/Busy Component 1230 component-vfreebusy = element vfreebusy { 1231 type-fbprop 1232 } 1234 type-fbprop = element properties { 1235 property-dtstamp & 1236 property-uid & 1238 property-contact? & 1239 property-dtstart? & 1240 property-dtend? & 1241 property-duration? & 1242 property-organizer? & 1243 property-url? & 1245 property-attendee* & 1246 property-comment* & 1247 property-freebusy* & 1248 property-rstatus* 1249 } 1251 # 3.6.5 Time Zone Component 1253 component-vtimezone = element vtimezone { 1254 element properties { 1255 property-tzid & 1257 property-last-mod? & 1258 property-tzuurl? 1259 }, 1260 element components { 1261 (component-standard | component-daylight) & 1262 component-standard* & 1263 component-daylight* 1264 } 1265 } 1267 component-standard = element standard { 1268 type-tzprop 1269 } 1271 component-daylight = element daylight { 1272 type-tzprop 1273 } 1275 type-tzprop = element properties { 1276 property-dtstart & 1277 property-tzoffsetto & 1278 property-tzoffsetfrom & 1280 property-rrule? & 1282 property-comment* & 1283 property-rdate* & 1284 property-tzname* 1285 } 1287 # 3.6.6 Alarm Component 1289 component-valarm = element valarm { 1290 audioprop | dispprop | emailprop 1291 } 1293 type-audioprop = element properties { 1294 property-action & 1295 property-trigger & 1297 (property-duration, property-repeat)? & 1299 property-attach? 1300 } 1302 type-dispprop = element properties { 1303 property-action & 1304 property-description & 1305 property-trigger & 1306 property-summary & 1308 property-attendee+ & 1309 (property-duration, property-repeat)? & 1311 property-attach* 1312 } 1314 type-emailprop = element properties { 1315 property-action & 1316 property-description & 1317 property-trigger & 1319 (property-duration, property-repeat)? 1320 } 1322 # 3.7 Calendar Properties 1324 # 3.7.1 Calendar Scale 1326 property-calscale = element calscale { 1328 element parameters { empty }?, 1330 element text { "GREGORIAN" } 1331 } 1333 # 3.7.2 Method 1335 property-method = element method { 1337 element parameters { empty }?, 1339 value-text 1340 } 1342 # 3.7.3 Product Identifier 1344 property-prodid = element prodid { 1346 element parameters { empty }?, 1348 value-text 1349 } 1351 # 3.7.4 Version 1353 property-version = element version { 1355 element parameters { empty }?, 1356 value-text 1357 } 1359 # 3.8 Component Properties 1361 # 3.8.1 Descriptive Component Properties 1363 # 3.8.1.1 Attachment 1365 property-attach = element attach { 1367 element parameters { 1368 fmttypeparam? & 1369 encodingparam? 1370 }?, 1372 value-uri | value-binary 1373 } 1375 # 3.8.1.2 Categories 1377 property-categories = element categories { 1379 element parameters { 1380 languageparam? & 1381 }?, 1383 value-text+ 1384 } 1386 # 3.8.1.3 Classification 1388 property-class = element class { 1390 element parameters { empty }?, 1392 element text { 1393 "PUBLIC" | 1394 "PRIVATE" | 1395 "CONFIDENTIAL" 1396 } 1397 } 1399 # 3.8.1.4 Comment 1401 property-comment = element comment { 1403 element parameters { 1404 altrepparam? & 1405 languageparam? 1406 }?, 1408 value-text 1409 } 1411 # 3.8.1.5 Description 1413 property-description = element description { 1415 element parameters { 1416 altrepparam? & 1417 languageparam? 1418 }?, 1420 value-text 1421 } 1423 # 3.8.1.6 Geographic Position 1425 property-geo = element geo { 1427 element parameters { empty }?, 1429 element value { 1430 element latitude { text }, 1431 element longitude { text } 1432 } 1433 } 1435 # 3.8.1.7 Location 1437 property-location = element location { 1439 element parameters { 1440 altrepparam? & 1441 languageparam? 1442 }?, 1444 value-text 1445 } 1447 # 3.8.1.8 Percent Complete 1449 property-percent = element percent-complete { 1451 element parameters { empty }?, 1452 value-integer 1453 } 1455 # 3.8.1.9 Priority 1457 property-priority = element priority { 1459 element parameters { empty }?, 1461 value-integer 1462 } 1464 # 3.8.1.10 Resources 1466 property-resources = element resources { 1468 element parameters { 1469 altrepparam? & 1470 languageparam? 1471 }?, 1473 value-text+ 1474 } 1476 # 3.8.1.11 Status 1478 property-status-event = element status { 1480 element parameters { empty }?, 1482 element text { 1483 "TENTATIVE" | 1484 "CONFIRMED" | 1485 "CANCELLED" 1486 } 1487 } 1489 property-status-todo = element status { 1491 element parameters { empty }?, 1493 element text { 1494 "NEEDS-ACTION" | 1495 "COMPLETED" | 1496 "IN-PROCESS" | 1497 "CANCELLED" 1498 } 1499 } 1500 property-status-jour = element status { 1502 element parameters { empty }?, 1504 element text { 1505 "DRAFT" | 1506 "FINAL" | 1507 "CANCELLED" 1508 } 1509 } 1511 # 3.8.1.12 Summary 1513 property-summary = element summary { 1515 element parameters { 1516 altrepparam? & 1517 languageparam? 1518 }?, 1520 value-text 1521 } 1523 # 3.8.2 Date and Time Component Properties 1525 # 3.8.2.1 Date/Time Completed 1527 property-completed = element completed { 1529 element parameters { empty }?, 1531 value-date-time 1532 } 1534 # 3.8.2.2 Date/Time End 1536 property-dtend = element dtend { 1538 element parameters { 1539 tzidparam? 1540 }?, 1542 value-date-time | 1543 value-date 1544 } 1546 # 3.8.2.3 Date/Time Due 1547 property-due = element due { 1549 element parameters { 1550 tzidparam? 1551 }?, 1553 value-date-time | 1554 value-date 1555 } 1557 # 3.8.2.4 Date/Time Start 1559 property-dtstart = element dtstart { 1561 element parameters { 1562 tzidparam? 1563 }?, 1565 value-date-time | 1566 value-date 1567 } 1569 # 3.8.2.5 Duration 1571 property-duration = element duration { 1573 element parameters { empty }?, 1575 value-duration 1576 } 1578 # 3.8.2.6 Free/Busy Time 1580 property-freebusy = element freebusy { 1582 element parameters { 1583 fbtypeparam? 1584 }?, 1586 value-period+ 1587 } 1589 # 3.8.2.7 Time Transparency 1591 property-transp = element transp { 1593 element parameters { empty }?, 1594 element text { 1595 "OPAQUE" | 1596 "TRANSPARENT" 1597 } 1598 } 1600 # 3.8.3 Time Zone Component Properties 1602 # 3.8.3.1 Time Zone Identifier 1604 property-tzid = element tzid { 1606 element parameters { empty }?, 1608 value-text 1609 } 1611 # 3.8.3.2 Time Zone Name 1613 property-tzname = element tzname { 1615 element parameters { 1616 languageparam? 1617 }?, 1619 value-text 1620 } 1622 # 3.8.3.3 Time Zone Offset From 1624 property-tzoffsetfrom = element tzoffsetfrom { 1626 element parameters { empty }?, 1628 value-utc-offset 1629 } 1631 # 3.8.3.4 Time Zone Offset To 1633 property-tzoffsetto = element tzoffsetto { 1635 element parameters { empty }?, 1637 value-utc-offset 1638 } 1640 # 3.8.3.5 Time Zone URL 1641 property-tzurl = element tzurl { 1643 element parameters { empty }?, 1645 value-uri 1646 } 1648 # 3.8.4 Relationship Component Properties 1650 # 3.8.4.1 Attendee 1652 property-attendee = element attendee { 1654 element parameters { 1655 cutypeparam? & 1656 memberparam? & 1657 roleparam? & 1658 partstatparam? & 1659 rsvpparam? & 1660 deltoparam? & 1661 delfromparam? & 1662 sentbyparam? & 1663 cnparam? & 1664 dirparam? & 1665 languageparam? 1666 }?, 1668 value-cal-address 1669 } 1671 # 3.8.4.2 Contact 1673 property-contact = element contact { 1675 element parameters { 1676 altrepparam? & 1677 languageparam? 1678 }?, 1680 value-text 1681 } 1683 # 3.8.4.3 Organizer 1685 property-organizer = element organizer { 1687 element parameters { 1688 cnparam? & 1689 dirparam? & 1690 sentbyparam? & 1691 languageparam? 1692 }?, 1694 value-cal-address 1695 } 1697 # 3.8.4.4 Recurrence ID 1699 property-recurid = element recurrence-id { 1701 element parameters { 1702 tzidparam? & 1703 rangeparam? 1704 }?, 1706 value-date-time | 1707 value-date 1708 } 1710 # 3.8.4.5 Related-To 1712 property-related = element related-to { 1714 element parameters { 1715 reltypeparam? 1716 }?, 1718 value-text 1719 } 1721 # 3.8.4.6 Uniform Resource Locator 1723 property-url = element url { 1725 element parameters { empty }?, 1727 value-uri 1728 } 1730 # 3.8.4.7 Unique Identifier 1732 property-uid = element uid { 1734 element parameters { empty }?, 1736 value-text 1738 } 1740 # 3.8.5 Recurrence Component Properties 1742 # 3.8.5.1 Exception Date/Times 1744 property-exdate = element exdate { 1746 element parameters { 1747 tzidparam? 1748 }?, 1750 value-date-time+ | 1751 value-date+ 1752 } 1754 # 3.8.5.2 Recurrence Date/Times 1756 property-rdate = element rdate { 1758 element parameters { 1759 tzidparam? 1760 }?, 1762 value-date-time+ | 1763 value-date+ | 1764 value-period+ 1765 } 1767 # 3.8.5.3 Recurrence Rule 1769 property-rrule = element rrule { 1771 element parameters { empty }?, 1773 value-recur 1774 } 1776 # 3.8.6 Alarm Component Properties 1778 # 3.8.6.1 Action 1780 property-action = element action { 1782 element parameters { empty }?, 1784 element text { 1785 "AUDIO" | 1786 "DISPLAY" | 1787 "EMAIL" 1788 } 1789 } 1791 # 3.8.6.2 Repeat Count 1793 property-repeat = element repeat { 1795 element parameters { empty }?, 1797 value-integer 1798 } 1800 # 3.8.6.3 Trigger 1802 property-trigger = element trigger { 1804 ( 1805 element parameters { 1806 trigrelparam? 1807 }?, 1809 value-duration 1810 ) | 1811 ( 1812 element parameters { empty }?, 1814 value-date-time 1815 ) 1816 } 1818 # 3.8.7 Change Management Component Properties 1820 # 3.8.7.1 Date/Time Created 1822 property-created = element created { 1824 element parameters { empty }?, 1826 value-date-time 1827 } 1829 # 3.8.7.2 Date/Time Stamp 1831 property-dtstamp = element dtstamp { 1833 element parameters { empty }?, 1834 value-date-time 1835 } 1837 # 3.8.7.3 Last Modified 1839 property-last-mod = element last-modified { 1841 element parameters { empty }?, 1843 value-date-time 1844 } 1846 # 3.8.7.4 Sequence Number 1848 property-seq = element sequence { 1850 element parameters { empty }?, 1852 value-integer 1853 } 1855 # 3.8.8 Miscellaneous Component Properties 1857 # 3.8.8.3 Request Status 1859 property-rstatus = element request-status { 1861 element parameters { 1862 languageparam? 1863 }?, 1865 element value { 1866 element code { text }, 1867 element description { text }, 1868 element data { text }? 1869 } 1870 } 1872 Appendix B. Examples 1874 This section contains two examples of iCalendar objects with their 1875 xCal representation. 1877 B.1. Example 1 1878 B.1.1. iCalendar Data 1880 BEGIN:VCALENDAR 1881 CALSCALE:GREGORIAN 1882 PRODID:-//Example Inc.//Example Calendar//EN 1883 VERSION:2.0 1884 BEGIN:VEVENT 1885 DTSTAMP:20080205T191224Z 1886 DTSTART:20081006 1887 SUMMARY:Planning meeting 1888 UID:4088E990AD89CB3DBB484909 1889 END:VEVENT 1890 END:VCALENDAR 1892 B.1.2. XML Data 1894 1895 1896 1897 1898 GREGORIAN 1899 1900 -//Example Inc.//Example Calendar//EN 1901 1902 2.0 1903 1904 1905 1906 1907 20080205T191224Z 1908 20081006 1909 1910 Planning meeting 1911 1912 1913 4088E990AD89CB3DBB484909 1914 1915 1916 1917 1918 1919 1921 B.2. Example 2 1922 B.2.1. iCalendar Data 1924 VERSION:2.0 1925 PRODID:-//Example Corp.//Example Client//EN 1926 BEGIN:VTIMEZONE 1927 LAST-MODIFIED:20040110T032845Z 1928 TZID:US/Eastern 1929 BEGIN:DAYLIGHT 1930 DTSTART:20000404T020000 1931 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 1932 TZNAME:EDT 1933 TZOFFSETFROM:-0500 1934 TZOFFSETTO:-0400 1935 END:DAYLIGHT 1936 BEGIN:STANDARD 1937 DTSTART:20001026T020000 1938 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 1939 TZNAME:EST 1940 TZOFFSETFROM:-0400 1941 TZOFFSETTO:-0500 1942 END:STANDARD 1943 END:VTIMEZONE 1944 BEGIN:VEVENT 1945 DTSTAMP:20060206T001121Z 1946 DTSTART;TZID=US/Eastern:20060102T120000 1947 DURATION:PT1H 1948 RRULE:FREQ=DAILY;COUNT=5 1949 SUMMARY:Event #2 1950 UID:00959BC664CA650E933C892C@example.com 1951 END:VEVENT 1952 BEGIN:VEVENT 1953 DTSTAMP:20060206T001121Z 1954 DTSTART;TZID=US/Eastern:20060104T140000 1955 DURATION:PT1H 1956 RECURRENCE-ID;TZID=US/Eastern:20060104T120000 1957 SUMMARY:Event #2 bis 1958 UID:00959BC664CA650E933C892C@example.com 1959 END:VEVENT 1960 END:VCALENDAR 1962 B.2.2. XML Data 1964 1965 1966 1967 1968 1969 -//Example Inc.//Example Client//EN 1971 1972 1973 2.0 1974 1975 1976 1977 1978 1979 1980 20040110T032845Z 1981 1982 US/Eastern 1983 1984 1985 1986 1987 1988 20000404T020000 1989 1990 1991 1992 YEARLY 1993 1SU 1994 4 1995 1996 1997 1998 EDT 1999 2000 2001 -0500 2002 2003 2004 -0400 2005 2006 2007 2008 2009 2010 2011 20001026T020000 2012 2013 2014 2015 YEARLY 2016 -1SU 2017 10 2018 2020 2021 2022 EST 2023 2024 2025 -0400 2026 2027 2028 -0500 2029 2030 2031 2032 2033 2034 2035 2036 20060206T001121Z 2037 2038 2039 US/Eastern 2040 2041 20060102T120000 2042 2043 2044 PT1H 2045 2046 2047 2048 DAILY 2049 5 2050 2051 2052 2053 Event #2 2054 2055 2056 00959BC664CA650E933C892C@example.com 2057 2058 2059 2060 2061 2062 20060206T001121Z 2063 2064 2065 US/Eastern 2066 2067 20060104T140000 2069 2070 2071 PT1H 2072 2073 2074 2075 US/Eastern 2076 2077 20060104T120000 2078 2079 2080 Event #2 bis 2081 2082 2083 00959BC664CA650E933C892C@example.com 2084 2085 2086 2087 2088 2089 2091 Appendix C. Change History (to be removed prior to publication as an 2092 RFC) 2094 Changes from -07: 2096 1. Updated optional parameters section of media type registration 2097 (feedback from ietf-types) 2099 2. Corrected the schema for the trigger element 2101 3. Updated to ietf.org mailing list 2103 4. Updated definition of iCalendar XML property 2105 Changes from -06: 2107 1. Updated XML reference to latest version. 2109 2. Corrected dtstamp elements in samples. 2111 3. Removed empty informative references section. 2113 4. Changed media type registration file extension to "xcs" (feedback 2114 from ietf-types) 2116 5. Changed media type registration follow up email to ietf-calsify 2117 (feedback from ietf-types) 2119 6. Updated several parts of the specification to show how future 2120 extensions to iCalendar can be handled without changing this 2121 specification (feedback from ietf-types) 2123 7. Updated security concerns in section 5 (feedback from ietf-types) 2125 8. Updated encoding considerations in section 5 (feedback from ietf- 2126 types) 2128 Changes from -05: 2130 1. Removed the ordwk and weekday elements from the byday element in 2131 a recurrence rule. The byday element now takes a text value 2132 which is the same as the value used in [RFC5545]. 2134 2. Added another example of an iCalendar object converted to xCal. 2136 3. Fixed the MIME type registration (another instance of xml+ 2137 calendar corrected to calendar+xml). 2139 Changes from -04: 2141 1. Added description to XML extension discussing how to handle 2142 binary data in XML. 2144 2. Removed empty Appendix B. 2146 Changes from -03: 2148 1. Changed the proposed MIME type from xml+calendar to calendar+xml. 2150 2. Fixed several references to sections of RFC5545. 2152 3. Updated example in Appendix C. 2154 4. Corrected the definition and grammar for TIME and UTC-OFFSET 2155 properties. 2157 Changes from -02: 2159 1. Removed the LINK extension and related sections. The concept 2160 will be addressed in a separate specification. 2162 2. Various minor edits for clarity and consistency. 2164 Changes from -01: 2166 1. Added LINK extension to iCalendar and section discussing links in 2167 XML format. 2169 2. Adopted "xCal" as the short name for the specification. 2171 Changes from -00: 2173 1. Changed 2445bis references to RFC5545. 2175 2. Added a version number to the XML namespace for iCalendar. 2177 3. Changed the values for the date, date-time, period, and duration 2178 elements to exactly match the values specified in RFC5545. 2179 Previously these were broken out into separate elements for day, 2180 month, year, etc. 2182 4. Added specification for XML property in iCalendar. 2184 Authors' Addresses 2186 Cyrus Daboo 2187 Apple Inc. 2188 1 Infinite Loop 2189 Cupertino, CA 95014 2190 USA 2192 EMail: cyrus@daboo.name 2193 URI: http://www.apple.com/ 2195 Mike Douglass 2196 Rensselaer Polytechnic Institute 2197 110 8th Street 2198 Troy, NY 12180 2199 USA 2201 EMail: douglm@rpi.edu 2202 URI: http://www.rpi.edu/ 2203 Steven Lees 2204 Microsoft Corporation 2205 One Microsoft Way 2206 Redmond, WA 98052 2207 USA 2209 EMail: steven.lees@microsoft.com 2210 URI: http://www.microsoft.com/