idnits 2.17.1 draft-daboo-et-al-icalendar-in-xml-06.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 (September 3, 2010) is 4955 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) No issues found here. Summary: 0 errors (**), 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: March 7, 2011 RPI 6 S. Lees 7 Microsoft 8 September 3, 2010 10 xCal: The XML format for iCalendar 11 draft-daboo-et-al-icalendar-in-xml-06 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 March 7, 2011. 34 Copyright Notice 36 Copyright (c) 2010 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 . . . . . . . . . . . . . . 4 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 . . . . . . . . . . . . . 8 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) . . . . . . . . . . . . . 9 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) . . . . . . . . . . . 11 67 3.6.3. Calendar User Address (RFC5545 section 3.3.3) . . . . 11 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) . . . . . . . . . . . . 12 72 3.6.8. Integer (RFC5545 section 3.3.8) . . . . . . . . . . . 12 73 3.6.9. Period of Time (RFC5545 section 3.3.9) . . . . . . . . 12 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) . . . . . . . . . . . . . 13 78 3.6.14. UTC Offset (RFC5545 section 3.3.14) . . . . . . . . . 13 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 . . . . . . . . . . . . . . 14 83 5. Security Considerations . . . . . . . . . . . . . . . . . . . 15 84 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 16 85 6.1. Namespace Registration . . . . . . . . . . . . . . . . . . 16 86 6.2. Media Type . . . . . . . . . . . . . . . . . . . . . . . . 16 87 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 17 88 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 17 89 8.1. Normative References . . . . . . . . . . . . . . . . . . . 17 90 8.2. Informative References . . . . . . . . . . . . . . . . . . 18 91 Appendix A. Relax NG Schema . . . . . . . . . . . . . . . . . . . 18 92 Appendix B. Examples . . . . . . . . . . . . . . . . . . . . . . 41 93 B.1. Example 1 . . . . . . . . . . . . . . . . . . . . . . . . 41 94 B.1.1. iCalendar Data . . . . . . . . . . . . . . . . . . . . 41 95 B.1.2. XML Data . . . . . . . . . . . . . . . . . . . . . . . 42 96 B.2. Example 2 . . . . . . . . . . . . . . . . . . . . . . . . 42 97 B.2.1. iCalendar Data . . . . . . . . . . . . . . . . . . . . 43 98 B.2.2. XML Data . . . . . . . . . . . . . . . . . . . . . . . 43 99 Appendix C. Change History (to be removed prior to 100 publication as an RFC) . . . . . . . . . . . . . . . 46 102 1. Introduction 104 The iCalendar data format [RFC5545] is a widely deployed interchange 105 format for calendaring and scheduling data. While many applications 106 and services consume and generate calendar data, iCalendar is a 107 specialized format that requires its own parser/generator. In 108 contrast, XML-based formats are widely used for interoperability 109 between applications, and the many tools that generate, parse, and 110 manipulate XML make it easier to work with than iCalendar. 112 The purpose of this specification is to define "xCal", an XML format 113 for iCalendar data. xCal is defined so that iCalendar data to be 114 converted to XML, and then back to iCalendar, without losing any 115 semantic meaning in the data. Anyone creating XML calendar data 116 according to this specification will know that their data can be 117 converted to a valid iCalendar representation as well. 119 Two 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 2. Conventions Used in This Document 131 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 132 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 133 document are to be interpreted as described in [RFC2119]. 135 When XML element types in the namespace 136 "urn:ietf:params:xml:ns:icalendar-2.0" are referenced in this 137 document outside of the context of an XML fragment, the string 138 "ICAL:" will be prefixed to the element types. 140 Some examples in this document contain "partial" XML documents used 141 for illustrative purposes. In these examples, three periods "..." 142 are used to indicate a portion of the document that has been removed 143 for compactness. 145 3. Converting from iCalendar to xCal 147 This section describes how iCalendar data is converted to XML using a 148 simple mapping between the iCalendar data model and XML elements. 150 3.1. Pre-processing 152 iCalendar uses a line folding mechanism to limit lines of data to a 153 maximum line length (typically 72 characters) to ensure maximum 154 likelihood of preserving data integrity as it is transported via 155 various means (e.g., email) - see Section 3.1 of [RFC5545]. Prior to 156 converting iCalendar data into XML all folded lines MUST be unfolded. 158 iCalendar data uses an "escape" character sequence for text values 159 and parameter values. When such text elements are converted into XML 160 the escaping MUST be removed. 162 iCalendar uses a base64 encoding for binary data. The base64 163 encoding MUST remain when converted to XML. 165 3.2. iCalendar stream (RFC5545 section 3.4) 167 At the top level of the iCalendar object model is an "iCalendar 168 stream". This object encompasses multiple "iCalendar objects". In 169 XML, the entire stream is contained in the root ICAL:icalendar XML 170 element. 172 An iCalendar stream can contain one or more iCalendar objects. Each 173 iCalendar object, delimited by BEGIN:VCALENDAR and END:VCALENDAR, is 174 enclosed by the ICAL:vcalendar XML element. 176 Example: 178 179 180 181 ... 182 183 185 iCalendar objects are comprised of a set of "components", 186 "properties", "parameters" and "values". A "component" can contain 187 other "components" or "properties". A "property" has a value and 188 optionally a set of "parameters". 190 In xCal, "components" are contained within an ICAL:components XML 191 element. With that element, another ICAL:components element could 192 appear (representing components nested within components) or the 193 ICAL:properties XML element could appear. ICAL:properties is used to 194 encapsulate iCalendar properties. 196 Each iCalendar property will be mapped to its own XML element as 197 described below. Within each of these elements there is an optional 198 ICAL:parameters XML element used to encapsulate any iCalendar 199 parameters. Additionally there will be one or more XML elements 200 representing the value of the iCalendar property. 202 Example: 204 205 206 207 208 ... 209 210 211 ... 212 213 214 216 +------------------+----------------+------------------+ 217 | Item | XML element | XML Definition | 218 +------------------+----------------+------------------+ 219 | iCalendar Stream | ICAL:icalendar | Appendix A # 3.4 | 220 | VCALENDAR | ICAL:vcalendar | Appendix A # 3.6 | 221 +------------------+----------------+------------------+ 223 3.3. Components (RFC5545 section 3.6) 225 Each calendar component in the VCALENDAR object, delimited by BEGIN 226 and END, will be converted to an enclosing XML element with the same 227 name, but in lowercase: 229 +-----------+----------------+--------------------+ 230 | Component | XML element | XML Definition | 231 +-----------+----------------+--------------------+ 232 | VEVENT | ICAL:vevent | Appendix A # 3.6.1 | 233 | VTODO | ICAL:vtodo | Appendix A # 3.6.2 | 234 | VJOURNAL | ICAL:vjournal | Appendix A # 3.6.3 | 235 | VFREEBUSY | ICAL:vfreebusy | Appendix A # 3.6.4 | 236 | VTIMEZONE | ICAL:vtimezone | Appendix A # 3.6.5 | 237 | STANDARD | ICAL:standard | Appendix A # 3.6.5 | 238 | DAYLIGHT | ICAL:daylight | Appendix A # 3.6.5 | 239 | VALARM | ICAL:valarm | Appendix A # 3.6.6 | 240 +-----------+----------------+--------------------+ 242 3.4. Properties (RFC5545 section 3.7 and 3.8) 244 iCalendar properties , whether they apply to the VCALENDAR object or 245 to a component, are handled in a consistent way in the xCal format. 247 iCalendar properties are enclosed in the XML element ICAL:properties. 249 Each invidivual iCalendar property is represented in XML by an 250 element of the same name as the iCalendar property, but in lowercase. 251 For example, the CALSCALE property is represented in XML by the ICAL: 252 calscale element. 254 Example: 256 257 258 259 260 ... 261 ... 262 ... 263 264 265 ... 266 267 268 270 Each property can contain an ICAL:parameters XML element 271 encapsulating any iCalendar parameters associated with the iCalendar 272 property. 274 Each property will contain one or more "value" XML elements as 275 described below representing the value of the iCalendar property. 277 +------------------+-----------------------+-----------------------+ 278 | Property | XML element | XML Definition | 279 +------------------+-----------------------+-----------------------+ 280 | CALSCALE | ICAL:calscale | Appendix A # 3.7.1 | 281 | METHOD | ICAL:method | Appendix A # 3.7.2 | 282 | PRODID | ICAL:prodid | Appendix A # 3.7.3 | 283 | VERSION | ICAL:version | Appendix A # 3.7.4 | 284 | ATTACH | ICAL:attach | Appendix A # 3.8.1.1 | 285 | CATEGORIES | ICAL:categories | Appendix A # 3.8.1.2 | 286 | CLASS | ICAL:class | Appendix A # 3.8.1.3 | 287 | COMMENT | ICAL:comment | Appendix A # 3.8.1.4 | 288 | DESCRIPTION | ICAL:description | Appendix A # 3.8.1.5 | 289 | GEO | ICAL:geo | Appendix A # 3.8.1.6 | 290 | LOCATION | ICAL:location | Appendix A # 3.8.1.7 | 291 | PERCENT-COMPLETE | ICAL:percent-complete | Appendix A # 3.8.1.8 | 292 | PRIORITY | ICAL:priority | Appendix A # 3.8.1.9 | 293 | RESOURCES | ICAL:resources | Appendix A # 3.8.1.10 | 294 | STATUS | ICAL:status | Appendix A # 3.8.1.11 | 295 | SUMMARY | ICAL:summary | Appendix A # 3.8.1.12 | 296 | COMPLETED | ICAL:completed | Appendix A # 3.8.2.1 | 297 | DTEND | ICAL:dtend | Appendix A # 3.8.2.2 | 298 | DUE | ICAL:due | Appendix A # 3.8.2.3 | 299 | DTSTART | ICAL:dtstart | Appendix A # 3.8.2.4 | 300 | DURATION | ICAL:duration | Appendix A # 3.8.2.5 | 301 | FREEBUSY | ICAL:freebusy | Appendix A # 3.8.2.6 | 302 | TRANSP | ICAL:transp | Appendix A # 3.8.2.7 | 303 | TZID | ICAL:tzid | Appendix A # 3.8.3.1 | 304 | TZNAME | ICAL:tzname | Appendix A # 3.8.3.2 | 305 | TZOFFSETFROM | ICAL:tzoffsetfrom | Appendix A # 3.8.3.3 | 306 | TZOFFSETTO | ICAL:tzoffsetto | Appendix A # 3.8.3.4 | 307 | TZURL | ICAL:tzurl | Appendix A # 3.8.3.5 | 308 | ATTENDEE | ICAL:attendee | Appendix A # 3.8.4.1 | 309 | CONTACT | ICAL:contact | Appendix A # 3.8.4.2 | 310 | ORGANIZER | ICAL:organizer | Appendix A # 3.8.4.3 | 311 | RECURRENCE-ID | ICAL:recurrence-id | Appendix A # 3.8.4.4 | 312 | RELATED-TO | ICAL:related-to | Appendix A # 3.8.4.5 | 313 | URL | ICAL:url | Appendix A # 3.8.4.6 | 314 | UID | ICAL:uid | Appendix A # 3.8.4.7 | 315 | EXDATE | ICAL:exdate | Appendix A # 3.8.5.1 | 316 | RDATE | ICAL:rdate | Appendix A # 3.8.5.2 | 317 | RRULE | ICAL:rrule | Appendix A # 3.8.5.3 | 318 | ACTION | ICAL:action | Appendix A # 3.8.6.1 | 319 | REPEAT | ICAL:repeat | Appendix A # 3.8.6.2 | 320 | TRIGGER | ICAL:trigger | Appendix A # 3.8.6.3 | 321 | CREATED | ICAL:created | Appendix A # 3.8.7.1 | 322 | DTSTAMP | ICAL:dtstamp | Appendix A # 3.8.7.2 | 323 | LAST-MODIFIED | ICAL:last-modified | Appendix A # 3.8.7.3 | 324 | SEQUENCE | ICAL:sequence | Appendix A # 3.8.7.4 | 325 | REQUEST-STATUS | ICAL:request-status | Appendix A # 3.8.8.3 | 326 +------------------+-----------------------+-----------------------+ 328 3.4.1. Special Cases for Properties 330 Some properties in iCalendar can contain "structured" value data. 331 This includes lists of "standard" value types, as well as values with 332 specific "fields". In xCal, these "structured" values are 333 represented as separate XML elements in various ways for ease of 334 processing using standard XML tools. 336 3.4.1.1. Multi-valued Properties 338 The following iCalendar properties can have values that consist of a 339 list of "standard" iCalendar values separated by a specific 340 delimiter. In XML these properties are represented by an XML element 341 that contains multiple "value" elements (Section 3.6). 343 +------------+-----------------+-----------------------+ 344 | Property | XML element | XML Definition | 345 +------------+-----------------+-----------------------+ 346 | CATEGORIES | ICAL:categories | Appendix A # 3.8.1.2 | 347 | RESOURCES | ICAL:resources | Appendix A # 3.8.1.10 | 348 | FREEBUSY | ICAL:freebusy | Appendix A # 3.8.2.6 | 349 | EXDATE | ICAL:exdate | Appendix A # 3.8.5.1 | 350 | RDATE | ICAL:rdate | Appendix A # 3.8.5.2 | 351 +------------+-----------------+-----------------------+ 353 3.4.1.2. GEO Property 355 In iCalendar, the GEO property value is defined as a semi-colon 356 separated list of two FLOAT values, the first representing latitude 357 and the second longitude. 359 In xCal, the value for the ICAL:geo element is represented by an 360 ICAL:value element containing an ICAL:latitude element and an ICAL: 361 longitude element, each of which contain text values representing the 362 FLOAT values. See Appendix A # 3.8.1.6. 364 3.4.1.3. REQUEST-STATUS Property 366 In iCalendar, the REQUEST-STATUS property value is defined as a semi- 367 colon separated list of two or three TEXT values. The first 368 represents a code, the second a description, and the third (optional) 369 additional data. 371 In xCal, the value for the ICAL:request-status element is represented 372 by an ICAL:value element containing an ICAL:code element, and iCAL: 373 description element, and optionally and ICAL:data element, each of 374 which contain the corresponding TEXT values. See Appendix A # 375 3.8.8.3. 377 3.5. Parameters (RFC5545 section 3.2) 379 iCalendar parameters are enclosed in the XML element ICAL:parameters 380 which optionally occurs once in each property XML element. 382 Each invidivual iCalendar parameter is represented in xCal by an 383 element of the same name as the iCalendar parameter, but in 384 lowercase. For example, the PARTSTAT parameter is represented in XML 385 by the ICAL:partstat element. 387 Example: 389 390 391 392 ... 393 394 ... 395 396 397 NEEDS-ACTION 398 399 ... 400 401 402 404 Each parameter contains either text, or one or more child XML 405 elements representing iCalendar value types. 407 +----------------+---------------------+---------------------+ 408 | Parameter | XML element | XML Definition | 409 +----------------+---------------------+---------------------+ 410 | ALTREP | ICAL:altrep | Appendix A # 3.2.1 | 411 | CN | ICAL:cn | Appendix A # 3.2.2 | 412 | CUTYPE | ICAL:cutype | Appendix A # 3.2.3 | 413 | DELEGATED-FROM | ICAL:delegated-from | Appendix A # 3.2.4 | 414 | DELEGATED-TO | ICAL:delegated-to | Appendix A # 3.2.5 | 415 | DIR | ICAL:dir | Appendix A # 3.2.6 | 416 | ENCODING | ICAL:encoding | Appendix A # 3.2.7 | 417 | FMTTYPE | ICAL:fmttype | Appendix A # 3.2.8 | 418 | FBTYPE | ICAL:fbtype | Appendix A # 3.2.9 | 419 | LANGUAGE | ICAL:language | Appendix A # 3.2.10 | 420 | MEMBER | ICAL:member | Appendix A # 3.2.11 | 421 | PARTSTAT | ICAL:partstat | Appendix A # 3.2.12 | 422 | RANGE | ICAL:range | Appendix A # 3.2.13 | 423 | RELATED | ICAL:related | Appendix A # 3.2.14 | 424 | RELTYPE | ICAL:reltype | Appendix A # 3.2.15 | 425 | ROLE | ICAL:role | Appendix A # 3.2.16 | 426 | RSVP | ICAL:rsvp | Appendix A # 3.2.17 | 427 | SENT-BY | ICAL:sent-by | Appendix A # 3.2.18 | 428 | TZID | ICAL:tzid | Appendix A # 3.2.19 | 429 +----------------+---------------------+---------------------+ 431 3.5.1. VALUE parameter 433 iCalendar defines a VALUE parameter (Section 3.2.20 of [RFC5545]. 434 This parameter is not mapped to an xCal XML element. Instead, the 435 value type is handled by having different XML elements for each 436 value, and these appear inside of ICAL:property elements. Thus, when 437 converting from iCalendar to XML, any VALUE parameters are skipped. 438 When converting from XML into iCalendar, the appropriate VALUE 439 parameter MUST be included in the iCalendar property if the value 440 type is not the default value type for that property. 442 3.6. Values (RFC5545 section 3.3) 444 iCalendar value types are mapped into XML elements with a matching 445 name in all lowercase. In some cases, iCalendar defines "structured" 446 values and these are mapped into separate child elements in each 447 value element, as described by the simple DTD definitions below. 449 Some properties allow for multiple values and these are represented 450 by separate matching value XML elements. 452 3.6.1. Binary (RFC5545 section 3.3.1) 454 Description: iCalendar BINARY property values are represented by the 455 ICAL:binary XML element. The content of the element is base64 456 encoded data. Whitespace MAY be inserted into the data at any 457 point to "wrap" the data to reasonable line lengths. When 458 converting back to iCalendar the whitespace MUST first be removed. 460 XML Definition: Appendix A # 3.3.1 462 3.6.2. Boolean (RFC5545 section 3.3.2) 464 Description: iCalendar BOOLEAN property values are represented by 465 the ICAL:boolean XML element. The content of the element is text 466 containing either of "TRUE" or "FALSE". 468 XML Definition: Appendix A # 3.3.2 470 3.6.3. Calendar User Address (RFC5545 section 3.3.3) 472 Description: iCalendar CAL-ADDRESS property values are represented 473 by the ICAL:cal-address XML element. The content of the element 474 is a URI. 476 XML Definition: Appendix A # 3.3.3 478 3.6.4. Date (RFC5545 section 3.3.4) 480 Description: iCalendar DATE property values are represented by the 481 ICAL:date XML element. The content of the element is the same 482 date value specified by RFC5545. 484 XML Definition: Appendix A # 3.3.4 486 3.6.5. Date-Time (RFC5545 section 3.3.5) 488 Description: iCalendar DATE-TIME property values are represented by 489 the ICAL:date-time XML element. The content of the element is the 490 same date-time value specified by RFC5545. 492 XML Definition: Appendix A # 3.3.5 494 3.6.6. Duration (RFC5545 section 3.3.6) 496 Description: iCalendar DURATION property values are represented by 497 the ICAL:duration XML element. The content of the element is the 498 same duration value specified by RFC5545. 500 XML Definition: Appendix A # 3.3.6 502 3.6.7. Float (RFC5545 section 3.3.7) 504 Description: iCalendar FLOAT property values are represented by the 505 ICAL:float XML element. The content of the element is a text 506 representation of a floating point number. 508 XML Definition: Appendix A # 3.3.7 510 3.6.8. Integer (RFC5545 section 3.3.8) 512 Description: iCalendar INTEGER property values are represented by 513 the ICAL:integer XML element. The content of the element is a 514 text representation of an integer number. 516 XML Definition: Appendix A # 3.3.8 518 3.6.9. Period of Time (RFC5545 section 3.3.9) 519 Description: iCalendar PERIOD property values are represented by the 520 ICAL:period XML element. The content of the element is the same 521 period value specified by RFC5545. 523 XML Definition: Appendix A # 3.3.9 525 3.6.10. Recurrence Rule (RFC5545 section 3.3.10) 527 Description: iCalendar RECUR property values are represented by the 528 ICAL:recur XML element. The content of the element is child 529 elements representing the various components of a recurrence rule. 531 XML Definition: Appendix A # 3.3.10 533 3.6.11. Text (RFC5545 section 3.3.11) 535 Description: iCalendar TEXT property values are represented by the 536 ICAL:text XML element. The content of the element is simple text. 538 XML Definition: Appendix A # 3.3.11 540 3.6.12. Time (RFC5545 section 3.3.12) 542 Description: iCalendar TIME property values are represented by the 543 ICAL:time XML element. The content of the element is the same 544 time value specified by RFC5545. 546 XML Definition: Appendix A # 3.3.12 548 3.6.13. URI (RFC5545 section 3.3.13) 550 Description: iCalendar URI property values are represented by the 551 ICAL:uri XML element. The content of the element is a URI. 553 XML Definition: Appendix A # 3.3.13 555 3.6.14. UTC Offset (RFC5545 section 3.3.14) 557 Description: iCalendar UTC-OFFSET property values are represented by 558 the ICAL:utc-offset XML element. The content of the element is 559 the same UTC offset value specified by RFC5545. 561 XML Definition: Appendix A # 3.3.14 563 3.7. Extensions 565 iCalendar extension properties and parameters (those with an "X-" 566 prefix in their name) are handled in the same way as other properties 567 and parameters: the property or parameter is represented by an XML 568 element with the same name, but in lowercase. e.g., the "X-FOO" 569 property in iCalendar turns into the ICAL:x-foo element in XML. 571 4. Converting from XML into iCalendar 573 When converting component, property and parameter values, the names 574 SHOULD be converted to uppercase. Although iCalendar names are case 575 insensitive, common practice is to keep them all uppercase following 576 the actual definitions in [RFC5545]. 578 Backslash escaping and line folding MUST be applied to the resulting 579 iCalendar data as required by [RFC5545]. 581 4.1. Converting XML Extensions into iCalendar 583 XML extensions are converted back to iCalendar in one of two ways, 584 depending on whether the extensions are in the iCalendar XML 585 namespace, or in an external namespace. 587 Extensions that are part of the iCalendar XML namespace MUST have 588 element names that being with "x-", and will be converted back to the 589 equivalent extension property in iCalendar. For example, the "x-foo" 590 element will convert to the "X-FOO" iCalendar property. 592 Extensions that are in a namespace other than the iCalendar XML 593 namespace SHOULD be preserved in the iCalendar representation using 594 the XML iCalendar property described in Section 4.2. 596 4.2. The XML property for iCalendar 598 This section describes an extension property for iCalendar, as 599 covered in section 8.2.3 of [RFC5545]. 601 Property name: XML 603 Purpose: To embed XML-encoded calendar data in the iCalendar format. 605 Value type: A single text value. 607 Property parameters: VALUE, ENCODING. 609 Conformance: The property can appear on any iCalendar component. 611 Description: The value of this property is an XML element. The XML 612 property MUST NOT be used to contain properties that are already 613 defined in iCalendar, or properties that use the "X-" iCalendar 614 extension property syntax. Since all elements in the 615 urn:ietf:params:xml:ns:icalendar-2.0 namespace convert to a well- 616 defined iCalendar object, the elements in this property MUST NOT be 617 in the urn:ietf:params:xml:ns:icalendar-2.0 namespace. The XML 618 element which is the value of this property MUST have an XML 619 namespace declaration. 621 Note that the source XML may contain characters not allowed in 622 iCalendar such as control characters. If this is the case, then the 623 XML data MUST be base64 encoded. As required by [RFC5545], the 624 ENCODING paramater MUST be present and set to "BASE64", and the VALUE 625 parameter must be present and set to "BINARY". 627 There can be more than one XML property present for a given iCalendar 628 object. The ordering of XML properties is not preserved in the 629 conversion between XML and iCalendar. 631 Format definition: This property is defined by the following 632 notation: 634 xml = "XML:" text CRLF 636 Example: The following is an example of an iCalendar event with a 637 location embedded in KML markup inside the XML property. 639 BEGIN:VCALENDAR 640 CALSCALE:GREGORIAN 641 PRODID:-//Example Inc.//Example Calendar//EN 642 VERSION:2.0 643 BEGIN:VEVENT 644 DTSTAMP:20080205T191224Z 645 DTSTART:20081006 646 SUMMARY:Planning meeting 647 UID:4088E990AD89CB3DBB484909 648 XML:... 649 END:VEVENT 650 END:VCALENDAR 652 5. Security Considerations 654 This extension does not introduce any new security concerns than 655 those already described in iCalendar. 657 6. IANA Considerations 659 This document defines a new URN to identify a new XML namespace for 660 iCalendar data. The URN conforms to a registry mechanism described 661 in [RFC3688]. 663 This document defines a new media type. The registration is in 664 Section 6.2. 666 This document defines a new property for iCalendar. The registration 667 is in Section 4.2. 669 6.1. Namespace Registration 671 Registration request for the iCalendar namespace: 673 URI: urn:ietf:params:xml:ns:icalendar-2.0 675 Registrant Contact: See the "Authors' Addresses" section of this 676 document. 678 XML: None. Namespace URIs do not represent an XML specification. 680 6.2. Media Type 682 This section defines the MIME media type for use with iCalendar in 683 XML data. 685 To: ietf-types@iana.org 687 Subject: Registration of media type application/calendar+xml 689 Type name: application 691 Subtype name: calendar+xml 693 Required parameters: none 695 Optional parameters: charset, method, component and optinfo as 696 defined for the text/calendar media type 698 Encoding considerations: iCalendar data is typically UTF-8 and thus 699 the XML representation will follow that. As a result, for 7-bit 700 transports, data in UTF-8 MUST be encoded in quoted-printable or 701 base64. 703 Security considerations: See Section 5. 705 Interoperability considerations: This media type provides an 706 alternative syntax to iCalendar data based on XML. 708 Published specification: This specification. 710 Applications which use this media type: Applications that currently 711 make use of the text/calendar media type can use this as an 712 alternative. 714 Additional information: 716 Magic number(s): None 718 File extension(s): XML data should use "xml" as the file 719 extension. 721 Macintosh file type code(s): None specified. 723 Person & email address to contact for further information: See the 724 "Author's Address" section of this document. 726 Intended usage: COMMON 728 Restrictions on usage: There are no restrictions on where this media 729 type can be used. 731 Author: See the "Author's Address" section of this document. 733 Change controller: IETF 735 7. Acknowledgments 737 This specification originated from the work of the XML technical 738 committee of the Calendaring and Scheduling Consortium. 740 8. References 742 8.1. Normative References 744 [RFC2119] Bradner, S., "Key words for use in RFCs to 745 Indicate Requirement Levels", BCP 14, 746 RFC 2119, March 1997. 748 [RFC3688] Mealling, M., "The IETF XML Registry", 749 BCP 81, RFC 3688, January 2004. 751 [RFC5545] Desruisseaux, B., "Internet Calendaring and 752 Scheduling Core Object Specification 753 (iCalendar)", RFC 5545, September 2009. 755 [W3C.REC-xml-20040204] Maler, E., Yergeau, F., Paoli, J., Sperberg- 756 McQueen, C., and T. Bray, "Extensible Markup 757 Language (XML) 1.0 (Third Edition)", World 758 Wide Web Consortium FirstEdition REC-xml- 759 20040204, February 2004, 760 . 762 8.2. Informative References 764 Appendix A. Relax NG Schema 766 Below is a Relax NG schema for iCalendar in XML. This schema uses 767 the compact notation of Relax NG. The numeric section numbers given 768 in the comments refer to section in [RFC5545]. The ordering of 769 elements follows the section ordering of [RFC5545]. 771 The Relax NG compact notation "?" operator is used to indicate an 772 unordered list of items. However, that operator, as defined, allows 773 "mixing" each element that it operates on at any depth within the 774 other elements, rather than just allowing "mixing" of siblings only. 775 As a result, the schema provided allows certain constructs that are 776 not allowed in iCalendar. Given that there is no sibling-only 777 unordered list operator in RelaxNG, this is the best representation 778 that can be given. 780 # Relax NG Schema for iCalendar in XML 782 default namespace = "urn:ietf:params:xml:ns:icalendar-2.0" 784 # 3.2 Property Parameters 786 # 3.2.1 Alternate Text Representation 788 altrepparam = element altrep { value-uri } 790 # 3.2.2 Common Name 792 cnparam = element cn { text } 794 # 3.2.3 Calendar User Type 796 cutypeparam = element cutype { 797 "INDIVIDUAL" | 798 "GROUP" | 799 "RESOURCE" | 800 "ROOM" | 801 "UNKNOWN" 802 } 804 # 3.2.4 Delegators 806 delfromparam = element delegated-from { value-cal-address+ } 808 # 3.2.5 Delegatees 810 deltoparam = element delegated-to { value-cal-address+ } 812 # 3.2.6 Directory Entry Reference 814 dirparam = element dir { value-uri } 816 # 3.2.7 Inline Encoding 818 encodingparam = element encoding { 819 "8BIT" | 820 "BASE64" 821 } 823 # 3.2.8 Format Type 825 fmttypeparam = element fmttype { text } 827 # 3.2.9 Free/Busy Time Type 829 fbtypeparam = element fbtype { 830 "FREE" | 831 "BUSY" | 832 "BUSY-UNAVAILABLE" | 833 "BUSY-TENTATIVE" 834 } 836 # 3.2.10 Language 838 languageparam = element language { text } 840 # 3.2.11 Group or List Membership 842 memberparam = element member { value-cal-address+ } 844 # 3.2.12 Participation Status 845 partstatparam = element partstat { 846 type-partstat-event | 847 type-partstat-todo | 848 type-partstat-jour 849 } 851 type-partstat-event = ( 852 "NEEDS-ACTION" | 853 "ACCEPTED" | 854 "DECLINED" | 855 "TENTATIVE" | 856 "DELEGATED" 857 ) 859 type-partstat-todo = ( 860 "NEEDS-ACTION" | 861 "ACCEPTED" | 862 "DECLINED" | 863 "TENTATIVE" | 864 "DELEGATED" | 865 "COMPLETED" | 866 "IN-PROCESS" 867 ) 869 type-partstat-jour = ( 870 "NEEDS-ACTION" | 871 "ACCEPTED" | 872 "DECLINED" 873 ) 875 # 3.2.13 Recurrence Identifier Range 877 rangeparam = element range { 878 "THISANDFUTURE" 879 } 881 # 3.2.14 Alarm Trigger Relationship 883 trigrelparam = element related { 884 "START" | 885 "END" 886 } 888 # 3.2.15 Relationship Type 890 reltypeparam = element reltype { 891 "PARENT" | 892 "CHILD" | 893 "SIBLING" 894 } 896 # 3.2.16 Participation Role 898 roleparam = element role { 899 "CHAIR" | 900 "REQ-PARTICIPANT" | 901 "OPT-PARTICIPANT" | 902 "NON-PARTICIPANT" 903 } 905 # 3.2.17 RSVP Expectation 907 rsvpparam = element rsvp { 908 "TRUE" | 909 "FALSE" 910 } 912 # 3.2.18 Sent By 914 sentbyparam = element sent-by { value-cal-address } 916 # 3.2.19 Time Zone Identifier 918 tzidparam = element tzid { text } 920 # 3.3 Property Value Data Types 922 # 3.3.1 BINARY 924 value-binary = element binary { text } 926 # 3.3.2 BOOLEAN 928 value-boolean = element boolean { 929 ("TRUE" | "FALSE") 930 } 932 # 3.3.3 CAL-ADDRESS 934 value-cal-address = element cal-address { text } 936 # 3.3.4 DATE 938 value-date = element date { 939 text 940 } 941 # 3.3.5 DATE-TIME 943 value-date-time = element date-time { 944 text 945 } 947 # 3.3.6 DURATION 949 value-duration = element duration { 950 text 951 } 953 # 3.3.7 FLOAT 955 value-float = element float { text } 957 # 3.3.8 INTEGER 959 value-integer = element integer { text } 961 # 3.3.9 PERIOD 963 value-period = element period { 964 text 965 } 967 # 3.3.10 RECUR 969 value-recur = element recur { 970 type-freq, 971 (type-until | type-count)?, 972 element interval { text }?, 973 element bysecond { text }*, 974 element byminute { text }*, 975 element byhour { text }*, 976 type-byday*, 977 type-bymonthday*, 978 type-byyearday*, 979 type-byweekno*, 980 element bymonth { text }*, 981 type-bysetpos*, 982 element wkst { type-weekday }? 983 } 985 type-freq = element freq { 986 "SECONDLY" | 987 "MINUTELY" | 988 "HOURLY" | 989 "DAILY" | 990 "WEEKLY" | 991 "MONTHLY" | 992 "YEARLY" 993 } 995 type-until = element until { 996 type-date | 997 type-date-time 998 } 1000 type-count = element count { text } 1002 type-weekday = ( 1003 "SU" | 1004 "MO" | 1005 "TU" | 1006 "WE" | 1007 "TH" | 1008 "FR" | 1009 "SA" 1010 ) 1012 type-byday = element byday { 1013 text 1014 } 1016 type-bymonthday = element bymonthday { 1017 text 1018 } 1020 type-byyearday = element byyearday { 1021 text 1022 } 1024 type-byweekno = element byweekno { 1025 text 1026 } 1028 type-bysetpos = element bysetpos { 1029 text 1030 } 1032 # 3.3.11 TEXT 1034 value-text = element text { text } 1036 # 3.3.12 TIME 1037 value-time = element time { text } 1039 # 3.3.13 URI 1041 value-uri = element uri { text } 1043 # 3.3.14 UTC-OFFSET 1045 value-utc-offset = element utc-offset { text } 1047 # 3.4 iCalendar Stream 1049 start = element icalendar { vcalendar+ } 1051 # 3.6 Calendar Components 1053 vcalendar = element vcalendar { 1054 type-calprops, 1055 type-component 1056 } 1058 type-calprops = element properties { 1059 property-prodid & 1060 property-version & 1061 property-calscale? & 1062 property-method? 1063 } 1065 type-component = element components { 1066 ( 1067 component-vevent | 1068 component-vtodo | 1069 component-vjournal | 1070 component-vfreebusy | 1071 component-vtimezone 1072 )* 1073 } 1075 # 3.6.1 Event Component 1077 component-vevent = element vevent { 1078 type-eventprop, 1079 element components { 1080 component-valarm+ 1081 }? 1082 } 1083 type-eventprop = element properties { 1084 property-dtstamp & 1085 property-dtstart & 1086 property-uid & 1088 property-class? & 1089 property-created? & 1090 property-description? & 1091 property-geo? & 1092 property-last-mod? & 1093 property-location? & 1094 property-organizer? & 1095 property-priority? & 1096 property-seq? & 1097 property-status-event? & 1098 property-summary? & 1099 property-transp? & 1100 property-url? & 1101 property-recurid? & 1103 property-rrule? & 1105 (property-dtend | property-duration)? & 1107 property-attach* & 1108 property-attendee* & 1109 property-categories* & 1110 property-comment* & 1111 property-contact* & 1112 property-exdate* & 1113 property-rstatus* & 1114 property-related* & 1115 property-resources* & 1116 property-rdate* 1117 } 1119 # 3.6.2 To-do Component 1121 component-vtodo = element vtodo { 1122 type-todoprop, 1123 element components { 1124 component-valarm+ 1125 }? 1126 } 1128 type-todoprop = element properties { 1129 property-dtstamp & 1130 property-uid & 1131 property-class? & 1132 property-completed? & 1133 property-created? & 1134 property-description? & 1135 property-geo? & 1136 property-last-mod? & 1137 property-location? & 1138 property-organizer? & 1139 property-percent? & 1140 property-priority? & 1141 property-recurid? & 1142 property-seq? & 1143 property-status-todo? & 1144 property-summary? & 1145 property-url? & 1147 property-rrule? & 1149 ( 1150 (property-dtstart?, property-dtend? ) | 1151 (property-dtstart, property-duration)? 1152 ) & 1154 property-attach* & 1155 property-attendee* & 1156 property-categories* & 1157 property-comment* & 1158 property-contact* & 1159 property-exdate* & 1160 property-rstatus* & 1161 property-related* & 1162 property-resources* & 1163 property-rdate* 1164 } 1166 # 3.6.3 Journal Component 1168 component-vjournal = element vjournal { 1169 type-jourprop 1170 } 1172 type-jourprop = element properties { 1173 property-dtstamp & 1174 property-uid & 1176 property-class? & 1177 property-created? & 1178 property-dtstart? & 1179 property-last-mod? & 1180 property-organizer? & 1181 property-recurid? & 1182 property-seq? & 1183 property-status-jour? & 1184 property-summary? & 1185 property-url? & 1187 property-rrule? & 1189 property-attach* & 1190 property-attendee* & 1191 property-categories* & 1192 property-comment* & 1193 property-contact* & 1194 property-description? & 1195 property-exdate* & 1196 property-related* & 1197 property-rdate* & 1198 property-rstatus* 1199 } 1201 # 3.6.4 Free/Busy Component 1203 component-vfreebusy = element vfreebusy { 1204 type-fbprop 1205 } 1207 type-fbprop = element properties { 1208 property-dtstamp & 1209 property-uid & 1211 property-contact? & 1212 property-dtstart? & 1213 property-dtend? & 1214 property-duration? & 1215 property-organizer? & 1216 property-url? & 1218 property-attendee* & 1219 property-comment* & 1220 property-freebusy* & 1221 property-rstatus* 1222 } 1224 # 3.6.5 Time Zone Component 1226 component-vtimezone = element vtimezone { 1227 element properties { 1228 property-tzid & 1230 property-last-mod? & 1231 property-tzuurl? 1232 }, 1233 element components { 1234 (component-standard | component-daylight) & 1235 component-standard* & 1236 component-daylight* 1237 } 1238 } 1240 component-standard = element standard { 1241 type-tzprop 1242 } 1244 component-daylight = element daylight { 1245 type-tzprop 1246 } 1248 type-tzprop = element properties { 1249 property-dtstart & 1250 property-tzoffsetto & 1251 property-tzoffsetfrom & 1253 property-rrule? & 1255 property-comment* & 1256 property-rdate* & 1257 property-tzname* 1258 } 1260 # 3.6.6 Alarm Component 1262 component-valarm = element valarm { 1263 audioprop | dispprop | emailprop 1264 } 1266 type-audioprop = element properties { 1267 property-action & 1268 property-trigger & 1270 (property-duration, property-repeat)? & 1272 property-attach? 1273 } 1274 type-dispprop = element properties { 1275 property-action & 1276 property-description & 1277 property-trigger & 1278 property-summary & 1280 property-attendee+ & 1282 (property-duration, property-repeat)? & 1284 property-attach* 1285 } 1287 type-emailprop = element properties { 1288 property-action & 1289 property-description & 1290 property-trigger & 1292 (property-duration, property-repeat)? 1293 } 1295 # 3.7 Calendar Properties 1297 # 3.7.1 Calendar Scale 1299 property-calscale = element calscale { 1301 element parameters { empty }?, 1303 element text { "GREGORIAN" } 1304 } 1306 # 3.7.2 Method 1308 property-method = element method { 1310 element parameters { empty }?, 1312 value-text 1313 } 1315 # 3.7.3 Product Identifier 1317 property-prodid = element prodid { 1319 element parameters { empty }?, 1321 value-text 1323 } 1325 # 3.7.4 Version 1327 property-version = element version { 1329 element parameters { empty }?, 1331 value-text 1332 } 1334 # 3.8 Component Properties 1336 # 3.8.1 Descriptive Component Properties 1338 # 3.8.1.1 Attachment 1340 property-attach = element attach { 1342 element parameters { 1343 fmttypeparam? & 1344 encodingparam? 1345 }?, 1347 value-uri | value-binary 1348 } 1350 # 3.8.1.2 Categories 1352 property-categories = element categories { 1354 element parameters { 1355 languageparam? & 1356 }?, 1358 value-text+ 1359 } 1361 # 3.8.1.3 Classification 1363 property-class = element class { 1365 element parameters { empty }?, 1367 element text { 1368 "PUBLIC" | 1369 "PRIVATE" | 1370 "CONFIDENTIAL" 1372 } 1373 } 1375 # 3.8.1.4 Comment 1377 property-comment = element comment { 1379 element parameters { 1380 altrepparam? & 1381 languageparam? 1382 }?, 1384 value-text 1385 } 1387 # 3.8.1.5 Description 1389 property-description = element description { 1391 element parameters { 1392 altrepparam? & 1393 languageparam? 1394 }?, 1396 value-text 1397 } 1399 # 3.8.1.6 Geographic Position 1401 property-geo = element geo { 1403 element parameters { empty }?, 1405 element value { 1406 element latitude { text }, 1407 element longitude { text } 1408 } 1409 } 1411 # 3.8.1.7 Location 1413 property-location = element location { 1415 element parameters { 1416 altrepparam? & 1417 languageparam? 1418 }?, 1419 value-text 1420 } 1422 # 3.8.1.8 Percent Complete 1424 property-percent = element percent-complete { 1426 element parameters { empty }?, 1428 value-integer 1429 } 1431 # 3.8.1.9 Priority 1433 property-priority = element priority { 1435 element parameters { empty }?, 1437 value-integer 1438 } 1440 # 3.8.1.10 Resources 1442 property-resources = element resources { 1444 element parameters { 1445 altrepparam? & 1446 languageparam? 1447 }?, 1449 value-text+ 1450 } 1452 # 3.8.1.11 Status 1454 property-status-event = element status { 1456 element parameters { empty }?, 1458 element text { 1459 "TENTATIVE" | 1460 "CONFIRMED" | 1461 "CANCELLED" 1462 } 1463 } 1465 property-status-todo = element status { 1466 element parameters { empty }?, 1468 element text { 1469 "NEEDS-ACTION" | 1470 "COMPLETED" | 1471 "IN-PROCESS" | 1472 "CANCELLED" 1473 } 1474 } 1476 property-status-jour = element status { 1478 element parameters { empty }?, 1480 element text { 1481 "DRAFT" | 1482 "FINAL" | 1483 "CANCELLED" 1484 } 1485 } 1487 # 3.8.1.12 Summary 1489 property-summary = element summary { 1491 element parameters { 1492 altrepparam? & 1493 languageparam? 1494 }?, 1496 value-text 1497 } 1499 # 3.8.2 Date and Time Component Properties 1501 # 3.8.2.1 Date/Time Completed 1503 property-completed = element completed { 1505 element parameters { empty }?, 1507 value-date-time 1508 } 1510 # 3.8.2.2 Date/Time End 1512 property-dtend = element dtend { 1513 element parameters { 1514 tzidparam? 1515 }?, 1517 value-date-time | 1518 value-date 1519 } 1521 # 3.8.2.3 Date/Time Due 1523 property-due = element due { 1525 element parameters { 1526 tzidparam? 1527 }?, 1529 value-date-time | 1530 value-date 1531 } 1533 # 3.8.2.4 Date/Time Start 1535 property-dtstart = element dtstart { 1537 element parameters { 1538 tzidparam? 1539 }?, 1541 value-date-time | 1542 value-date 1543 } 1545 # 3.8.2.5 Duration 1547 property-duration = element duration { 1549 element parameters { empty }?, 1551 value-duration 1552 } 1554 # 3.8.2.6 Free/Busy Time 1556 property-freebusy = element freebusy { 1558 element parameters { 1559 fbtypeparam? 1560 }?, 1561 value-period+ 1562 } 1564 # 3.8.2.7 Time Transparency 1566 property-transp = element transp { 1568 element parameters { empty }?, 1570 element text { 1571 "OPAQUE" | 1572 "TRANSPARENT" 1573 } 1574 } 1576 # 3.8.3 Time Zone Component Properties 1578 # 3.8.3.1 Time Zone Identifier 1580 property-tzid = element tzid { 1582 element parameters { empty }?, 1584 value-text 1585 } 1587 # 3.8.3.2 Time Zone Name 1589 property-tzname = element tzname { 1591 element parameters { 1592 languageparam? 1593 }?, 1595 value-text 1596 } 1598 # 3.8.3.3 Time Zone Offset From 1600 property-tzoffsetfrom = element tzoffsetfrom { 1602 element parameters { empty }?, 1604 value-utc-offset 1605 } 1607 # 3.8.3.4 Time Zone Offset To 1608 property-tzoffsetto = element tzoffsetto { 1610 element parameters { empty }?, 1612 value-utc-offset 1613 } 1615 # 3.8.3.5 Time Zone URL 1617 property-tzurl = element tzurl { 1619 element parameters { empty }?, 1621 value-uri 1622 } 1624 # 3.8.4 Relationship Component Properties 1626 # 3.8.4.1 Attendee 1628 property-attendee = element attendee { 1630 element parameters { 1631 cutypeparam? & 1632 memberparam? & 1633 roleparam? & 1634 partstatparam? & 1635 rsvpparam? & 1636 deltoparam? & 1637 delfromparam? & 1638 sentbyparam? & 1639 cnparam? & 1640 dirparam? & 1641 languageparam? 1642 }?, 1644 value-cal-address 1645 } 1647 # 3.8.4.2 Contact 1649 property-contact = element contact { 1651 element parameters { 1652 altrepparam? & 1653 languageparam? 1654 }?, 1655 value-text 1656 } 1658 # 3.8.4.3 Organizer 1660 property-organizer = element organizer { 1662 element parameters { 1663 cnparam? & 1664 dirparam? & 1665 sentbyparam? & 1666 languageparam? 1667 }?, 1669 value-cal-address 1670 } 1672 # 3.8.4.4 Recurrence ID 1674 property-recurid = element recurrence-id { 1676 element parameters { 1677 tzidparam? & 1678 rangeparam? 1679 }?, 1681 value-date-time | 1682 value-date 1683 } 1685 # 3.8.4.5 Related-To 1687 property-related = element related-to { 1689 element parameters { 1690 reltypeparam? 1691 }?, 1693 value-text 1694 } 1696 # 3.8.4.6 Uniform Resource Locator 1698 property-url = element url { 1700 element parameters { empty }?, 1702 value-uri 1704 } 1706 # 3.8.4.7 Unique Identifier 1708 property-uid = element uid { 1710 element parameters { empty }?, 1712 value-text 1713 } 1715 # 3.8.5 Recurrence Component Properties 1717 # 3.8.5.1 Exception Date/Times 1719 property-exdate = element exdate { 1721 element parameters { 1722 tzidparam? 1723 }?, 1725 value-date-time+ | 1726 value-date+ 1727 } 1729 # 3.8.5.2 Recurrence Date/Times 1731 property-rdate = element rdate { 1733 element parameters { 1734 tzidparam? 1735 }?, 1737 value-date-time+ | 1738 value-date+ | 1739 value-period+ 1740 } 1742 # 3.8.5.3 Recurrence Rule 1744 property-rrule = element rrule { 1746 element parameters { empty }?, 1748 value-recur 1749 } 1751 # 3.8.6 Alarm Component Properties 1752 # 3.8.6.1 Action 1754 property-action = element action { 1756 element parameters { empty }?, 1758 element text { 1759 "AUDIO" | 1760 "DISPLAY" | 1761 "EMAIL" 1762 } 1763 } 1765 # 3.8.6.2 Repeat Count 1767 property-repeat = element repeat { 1769 element parameters { empty }?, 1771 value-integer 1772 } 1774 # 3.8.6.3 Trigger 1776 property-repeat = element repeat { 1778 ( 1779 element parameters { 1780 trigrelparam? 1781 }?, 1783 value-duration 1784 ) | 1785 ( 1786 element parameters { empty }?, 1788 value-date-time 1789 ) 1790 } 1792 # 3.8.7 Change Management Component Properties 1794 # 3.8.7.1 Date/Time Created 1796 property-created = element created { 1798 element parameters { empty }?, 1799 value-date-time 1800 } 1802 # 3.8.7.2 Date/Time Stamp 1804 property-dtstamp = element dtstamp { 1806 element parameters { empty }?, 1808 value-date-time 1809 } 1811 # 3.8.7.3 Last Modified 1813 property-last-mod = element last-modified { 1815 element parameters { empty }?, 1817 value-date-time 1818 } 1820 # 3.8.7.4 Sequence Number 1822 property-seq = element sequence { 1824 element parameters { empty }?, 1826 value-integer 1827 } 1829 # 3.8.8 Miscellaneous Component Properties 1831 # 3.8.8.3 Request Status 1833 property-rstatus = element request-status { 1835 element parameters { 1836 languageparam? 1837 }?, 1839 element value { 1840 element code { text }, 1841 element description { text }, 1842 element data { text }? 1843 } 1844 } 1846 Appendix B. Examples 1848 This section contains two examples of iCalendar objects with their 1849 xCal representation. 1851 B.1. Example 1 1853 B.1.1. iCalendar Data 1855 BEGIN:VCALENDAR 1856 CALSCALE:GREGORIAN 1857 PRODID:-//Example Inc.//Example Calendar//EN 1858 VERSION:2.0 1859 BEGIN:VEVENT 1860 DTSTAMP:20080205T191224Z 1861 DTSTART:20081006 1862 SUMMARY:Planning meeting 1863 UID:4088E990AD89CB3DBB484909 1864 END:VEVENT 1865 END:VCALENDAR 1867 B.1.2. XML Data 1869 1870 1871 1872 1873 GREGORIAN 1874 1875 -//Example Inc.//Example Calendar//EN 1876 1877 2.0 1878 1879 1880 1881 1882 20080205T191224Z 1883 20081006 1884 1885 Planning meeting 1886 1887 1888 4088E990AD89CB3DBB484909 1889 1890 1891 1892 1893 1894 1896 B.2. Example 2 1897 B.2.1. iCalendar Data 1899 VERSION:2.0 1900 PRODID:-//Example Corp.//Example Client//EN 1901 BEGIN:VTIMEZONE 1902 LAST-MODIFIED:20040110T032845Z 1903 TZID:US/Eastern 1904 BEGIN:DAYLIGHT 1905 DTSTART:20000404T020000 1906 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 1907 TZNAME:EDT 1908 TZOFFSETFROM:-0500 1909 TZOFFSETTO:-0400 1910 END:DAYLIGHT 1911 BEGIN:STANDARD 1912 DTSTART:20001026T020000 1913 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 1914 TZNAME:EST 1915 TZOFFSETFROM:-0400 1916 TZOFFSETTO:-0500 1917 END:STANDARD 1918 END:VTIMEZONE 1919 BEGIN:VEVENT 1920 DTSTAMP:20060206T001121Z 1921 DTSTART;TZID=US/Eastern:20060102T120000 1922 DURATION:PT1H 1923 RRULE:FREQ=DAILY;COUNT=5 1924 SUMMARY:Event #2 1925 UID:00959BC664CA650E933C892C@example.com 1926 END:VEVENT 1927 BEGIN:VEVENT 1928 DTSTAMP:20060206T001121Z 1929 DTSTART;TZID=US/Eastern:20060104T140000 1930 DURATION:PT1H 1931 RECURRENCE-ID;TZID=US/Eastern:20060104T120000 1932 SUMMARY:Event #2 bis 1933 UID:00959BC664CA650E933C892C@example.com 1934 END:VEVENT 1935 END:VCALENDAR 1937 B.2.2. XML Data 1939 1940 1941 1942 1943 1944 -//Example Inc.//Example Client//EN 1946 1947 1948 2.0 1949 1950 1951 1952 1953 1954 20040110T032845Z 1955 US/Eastern 1956 1957 1958 1959 1960 1961 20000404T020000 1962 1963 1964 1965 YEARLY 1966 1SU 1967 4 1968 1969 1970 1971 EDT 1972 1973 1974 -0500 1975 1976 1977 -0400 1978 1979 1980 1981 1982 1983 1984 20001026T020000 1985 1986 1987 1988 YEARLY 1989 -1SU 1990 10 1991 1992 1993 1994 EST 1995 1996 1997 -0400 1998 1999 2000 -0500 2001 2002 2003 2004 2005 2006 2007 2008 20060206T001121Z 2009 2010 2011 US/Eastern 2012 2013 20060102T120000 2014 2015 2016 PT1H 2017 2018 2019 2020 DAILY 2021 5 2022 2023 2024 2025 Event #2 2026 2027 2028 00959BC664CA650E933C892C@example.com 2029 2030 2031 2032 2033 2034 20060206T001121Z 2035 2036 2037 US/Eastern 2038 2039 20060104T140000 2040 2041 2042 PT1H 2043 2044 2045 2046 US/Eastern 2047 2048 20060104T120000 2049 2050 2051 Event #2 bis 2052 2053 2054 00959BC664CA650E933C892C@example.com 2055 2056 2057 2058 2059 2060 2062 Appendix C. Change History (to be removed prior to publication as an 2063 RFC) 2065 Changes from -05: 2067 1. Removed the ordwk and weekday elements from the byday element in 2068 a recurrence rule. The byday element now takes a text value 2069 which is the same as the value used in [RFC5545]. 2071 2. Added another example of an iCalendar object converted to xCal. 2073 3. Fixed the MIME type registration (another instance of xml+ 2074 calendar corrected to calendar+xml). 2076 Changes from -04: 2078 1. Added description to XML extension discussing how to handle 2079 binary data in XML. 2081 2. Removed empty Appendix B. 2083 Changes from -03: 2085 1. Changed the proposed MIME type from xml+calendar to calendar+xml. 2087 2. Fixed several references to sections of RFC5545. 2089 3. Updated example in Appendix C. 2091 4. Corrected the definition and grammar for TIME and UTC-OFFSET 2092 properties. 2094 Changes from -02: 2096 1. Removed the LINK extension and related sections. The concept 2097 will be addressed in a separate specification. 2099 2. Various minor edits for clarity and consistency. 2101 Changes from -01: 2103 1. Added LINK extension to iCalendar and section discussing links in 2104 XML format. 2106 2. Adopted "xCal" as the short name for the specification. 2108 Changes from -00: 2110 1. Changed 2445bis references to RFC5545. 2112 2. Added a version number to the XML namespace for iCalendar. 2114 3. Changed the values for the date, date-time, period, and duration 2115 elements to exactly match the values specified in RFC5545. 2116 Previously these were broken out into separate elements for day, 2117 month, year, etc. 2119 4. Added specification for XML property in iCalendar. 2121 Authors' Addresses 2123 Cyrus Daboo 2124 Apple Inc. 2125 1 Infinite Loop 2126 Cupertino, CA 95014 2127 USA 2129 EMail: cyrus@daboo.name 2130 URI: http://www.apple.com/ 2131 Mike Douglass 2132 Rensselaer Polytechnic Institute 2133 110 8th Street 2134 Troy, NY 12180 2135 USA 2137 EMail: douglm@rpi.edu 2138 URI: http://www.rpi.edu/ 2140 Steven Lees 2141 Microsoft Corporation 2142 One Microsoft Way 2143 Redmond, WA 98052 2144 USA 2146 EMail: steven.lees@microsoft.com 2147 URI: http://www.microsoft.com/