idnits 2.17.1 draft-daboo-et-al-icalendar-in-xml-07.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 (October 13, 2010) is 4937 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: April 16, 2011 RPI 6 S. Lees 7 Microsoft 8 October 13, 2010 10 xCal: The XML format for iCalendar 11 draft-daboo-et-al-icalendar-in-xml-07 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 April 16, 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 . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . 16 86 6.2. Media Type . . . . . . . . . . . . . . . . . . . . . . . . 17 87 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 18 88 8. Normative References . . . . . . . . . . . . . . . . . . . . . 18 89 Appendix A. Relax NG Schema . . . . . . . . . . . . . . . . . . . 18 90 Appendix B. Examples . . . . . . . . . . . . . . . . . . . . . . 41 91 B.1. Example 1 . . . . . . . . . . . . . . . . . . . . . . . . 41 92 B.1.1. iCalendar Data . . . . . . . . . . . . . . . . . . . . 41 93 B.1.2. XML Data . . . . . . . . . . . . . . . . . . . . . . . 42 94 B.2. Example 2 . . . . . . . . . . . . . . . . . . . . . . . . 42 95 B.2.1. iCalendar Data . . . . . . . . . . . . . . . . . . . . 43 96 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 invidivual 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 invidivual 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: A single text value. 616 Property parameters: VALUE, ENCODING. 618 Conformance: The property can appear on any iCalendar component. 620 Description: The value of this property is an XML element. The XML 621 property MUST NOT be used to contain properties that are already 622 defined in iCalendar, or properties that use the "X-" iCalendar 623 extension property syntax. Since all elements in the 624 urn:ietf:params:xml:ns:icalendar-2.0 namespace convert to a well- 625 defined iCalendar object, the elements in this property MUST NOT be 626 in the urn:ietf:params:xml:ns:icalendar-2.0 namespace. The XML 627 element which is the value of this property MUST have an XML 628 namespace declaration. 630 Note that the source XML may contain characters not allowed in 631 iCalendar such as control characters. If this is the case, then the 632 XML data MUST be base64 encoded. As required by [RFC5545], the 633 ENCODING paramater MUST be present and set to "BASE64", and the VALUE 634 parameter must be present and set to "BINARY". 636 There can be more than one XML property present for a given iCalendar 637 object. The ordering of XML properties is not preserved in the 638 conversion between XML and iCalendar. 640 Format definition: This property is defined by the following 641 notation: 643 xml = "XML:" text CRLF 645 Example: The following is an example of an iCalendar event with a 646 location embedded in KML markup inside the XML property. 648 BEGIN:VCALENDAR 649 CALSCALE:GREGORIAN 650 PRODID:-//Example Inc.//Example Calendar//EN 651 VERSION:2.0 652 BEGIN:VEVENT 653 DTSTAMP:20080205T191224Z 654 DTSTART:20081006 655 SUMMARY:Planning meeting 656 UID:4088E990AD89CB3DBB484909 657 XML:... 658 END:VEVENT 659 END:VCALENDAR 661 5. Security Considerations 663 For security considerations specific to calendar data, see Section 7 664 of [RFC5545]. Since this specification is a mapping from iCalendar, 665 no new security concerns are introduced related to calendar data. 667 The use of XML as a format does have security risks. Section 7 of 668 [RFC3470] discusses these risks. See also the security disussion for 669 the application/xml type in [RFC3023]. 671 6. IANA Considerations 673 This document defines a new URN to identify a new XML namespace for 674 iCalendar data. The URN conforms to a registry mechanism described 675 in [RFC3688]. 677 This document defines a new media type. The registration is in 678 Section 6.2. 680 This document defines a new property for iCalendar. The registration 681 is in Section 4.2. 683 6.1. Namespace Registration 685 Registration request for the iCalendar namespace: 687 URI: urn:ietf:params:xml:ns:icalendar-2.0 689 Registrant Contact: See the "Authors' Addresses" section of this 690 document. 692 XML: None. Namespace URIs do not represent an XML specification. 694 6.2. Media Type 696 This section defines the MIME media type for use with iCalendar in 697 XML data. 699 Type name: application 701 Subtype name: calendar+xml 703 Required parameters: none 705 Optional parameters: method, component and optinfo as defined for 706 the text/calendar media type in [RFC5545]; charset as defined for 707 application/xml in [RFC3023]; per [RFC3023], use of charset is 708 "STRONGLY RECOMMENDED" 710 Encoding considerations: Same as encoding considerations of 711 application/xml as specified in [RFC3023] 713 Security considerations: See Section 5. 715 Interoperability considerations: This media type provides an 716 alternative format for iCalendar data based on XML. 718 Published specification: This specification. 720 Applications which use this media type: Applications that currently 721 make use of the text/calendar media type can use this as an 722 alternative. 724 Additional information: 726 Magic number(s): None 728 File extension(s): xcs 730 Macintosh file type code(s): None specified. 732 Person & email address to contact for further information: 733 ietf-calsify@osafoundation.org 735 Intended usage: COMMON 737 Restrictions on usage: There are no restrictions on where this media 738 type can be used. 740 Author: See the "Author's Address" section of this document. 742 Change controller: IETF 744 7. Acknowledgments 746 This specification originated from the work of the XML technical 747 committee of the Calendaring and Scheduling Consortium. 749 8. Normative References 751 [RFC2119] Bradner, S., "Key words for use in RFCs to 752 Indicate Requirement Levels", BCP 14, 753 RFC 2119, March 1997. 755 [RFC3023] Murata, M., St. Laurent, S., and D. Kohn, 756 "XML Media Types", RFC 3023, January 2001. 758 [RFC3470] Hollenbeck, S., Rose, M., and L. Masinter, 759 "Guidelines for the Use of Extensible Markup 760 Language (XML) within IETF Protocols", 761 BCP 70, RFC 3470, January 2003. 763 [RFC3688] Mealling, M., "The IETF XML Registry", 764 BCP 81, RFC 3688, January 2004. 766 [RFC5545] Desruisseaux, B., "Internet Calendaring and 767 Scheduling Core Object Specification 768 (iCalendar)", RFC 5545, September 2009. 770 [W3C.REC-xml-20081126] Sperberg-McQueen, C., Yergeau, F., Bray, T., 771 Paoli, J., and E. Maler, "Extensible Markup 772 Language (XML) 1.0 (Fifth Edition)", World 773 Wide Web Consortium Recommendation REC-xml- 774 20081126, November 2008, 775 . 777 Appendix A. Relax NG Schema 779 Below is a Relax NG schema for iCalendar in XML. The schema is non- 780 normative and given for reference only. 782 This schema uses the compact notation of Relax NG. The numeric 783 section numbers given in the comments refer to section in [RFC5545]. 784 The ordering of elements follows the section ordering of [RFC5545]. 786 The Relax NG compact notation "?" operator is used to indicate an 787 unordered list of items. However, that operator, as defined, allows 788 "mixing" each element that it operates on at any depth within the 789 other elements, rather than just allowing "mixing" of siblings only. 790 As a result, the schema provided allows certain constructs that are 791 not allowed in iCalendar. Given that there is no sibling-only 792 unordered list operator in RelaxNG, this is the best representation 793 that can be given. 795 # Relax NG Schema for iCalendar in XML 797 default namespace = "urn:ietf:params:xml:ns:icalendar-2.0" 799 # 3.2 Property Parameters 801 # 3.2.1 Alternate Text Representation 803 altrepparam = element altrep { value-uri } 805 # 3.2.2 Common Name 807 cnparam = element cn { text } 809 # 3.2.3 Calendar User Type 811 cutypeparam = element cutype { 812 "INDIVIDUAL" | 813 "GROUP" | 814 "RESOURCE" | 815 "ROOM" | 816 "UNKNOWN" 817 } 819 # 3.2.4 Delegators 821 delfromparam = element delegated-from { value-cal-address+ } 823 # 3.2.5 Delegatees 825 deltoparam = element delegated-to { value-cal-address+ } 827 # 3.2.6 Directory Entry Reference 829 dirparam = element dir { value-uri } 831 # 3.2.7 Inline Encoding 833 encodingparam = element encoding { 834 "8BIT" | 835 "BASE64" 837 } 839 # 3.2.8 Format Type 841 fmttypeparam = element fmttype { text } 843 # 3.2.9 Free/Busy Time Type 845 fbtypeparam = element fbtype { 846 "FREE" | 847 "BUSY" | 848 "BUSY-UNAVAILABLE" | 849 "BUSY-TENTATIVE" 850 } 852 # 3.2.10 Language 854 languageparam = element language { text } 856 # 3.2.11 Group or List Membership 858 memberparam = element member { value-cal-address+ } 860 # 3.2.12 Participation Status 862 partstatparam = element partstat { 863 type-partstat-event | 864 type-partstat-todo | 865 type-partstat-jour 866 } 868 type-partstat-event = ( 869 "NEEDS-ACTION" | 870 "ACCEPTED" | 871 "DECLINED" | 872 "TENTATIVE" | 873 "DELEGATED" 874 ) 876 type-partstat-todo = ( 877 "NEEDS-ACTION" | 878 "ACCEPTED" | 879 "DECLINED" | 880 "TENTATIVE" | 881 "DELEGATED" | 882 "COMPLETED" | 883 "IN-PROCESS" 885 ) 887 type-partstat-jour = ( 888 "NEEDS-ACTION" | 889 "ACCEPTED" | 890 "DECLINED" 891 ) 893 # 3.2.13 Recurrence Identifier Range 895 rangeparam = element range { 896 "THISANDFUTURE" 897 } 899 # 3.2.14 Alarm Trigger Relationship 901 trigrelparam = element related { 902 "START" | 903 "END" 904 } 906 # 3.2.15 Relationship Type 908 reltypeparam = element reltype { 909 "PARENT" | 910 "CHILD" | 911 "SIBLING" 912 } 914 # 3.2.16 Participation Role 916 roleparam = element role { 917 "CHAIR" | 918 "REQ-PARTICIPANT" | 919 "OPT-PARTICIPANT" | 920 "NON-PARTICIPANT" 921 } 923 # 3.2.17 RSVP Expectation 925 rsvpparam = element rsvp { 926 "TRUE" | 927 "FALSE" 928 } 930 # 3.2.18 Sent By 932 sentbyparam = element sent-by { value-cal-address } 933 # 3.2.19 Time Zone Identifier 935 tzidparam = element tzid { text } 937 # 3.3 Property Value Data Types 939 # 3.3.1 BINARY 941 value-binary = element binary { text } 943 # 3.3.2 BOOLEAN 945 value-boolean = element boolean { 946 ("TRUE" | "FALSE") 947 } 949 # 3.3.3 CAL-ADDRESS 951 value-cal-address = element cal-address { text } 953 # 3.3.4 DATE 955 value-date = element date { 956 text 957 } 959 # 3.3.5 DATE-TIME 961 value-date-time = element date-time { 962 text 963 } 965 # 3.3.6 DURATION 967 value-duration = element duration { 968 text 969 } 971 # 3.3.7 FLOAT 973 value-float = element float { text } 975 # 3.3.8 INTEGER 977 value-integer = element integer { text } 979 # 3.3.9 PERIOD 980 value-period = element period { 981 text 982 } 984 # 3.3.10 RECUR 986 value-recur = element recur { 987 type-freq, 988 (type-until | type-count)?, 989 element interval { text }?, 990 element bysecond { text }*, 991 element byminute { text }*, 992 element byhour { text }*, 993 type-byday*, 994 type-bymonthday*, 995 type-byyearday*, 996 type-byweekno*, 997 element bymonth { text }*, 998 type-bysetpos*, 999 element wkst { type-weekday }? 1000 } 1002 type-freq = element freq { 1003 "SECONDLY" | 1004 "MINUTELY" | 1005 "HOURLY" | 1006 "DAILY" | 1007 "WEEKLY" | 1008 "MONTHLY" | 1009 "YEARLY" 1010 } 1012 type-until = element until { 1013 type-date | 1014 type-date-time 1015 } 1017 type-count = element count { text } 1019 type-weekday = ( 1020 "SU" | 1021 "MO" | 1022 "TU" | 1023 "WE" | 1024 "TH" | 1025 "FR" | 1026 "SA" 1027 ) 1028 type-byday = element byday { 1029 text 1030 } 1032 type-bymonthday = element bymonthday { 1033 text 1034 } 1036 type-byyearday = element byyearday { 1037 text 1038 } 1040 type-byweekno = element byweekno { 1041 text 1042 } 1044 type-bysetpos = element bysetpos { 1045 text 1046 } 1048 # 3.3.11 TEXT 1050 value-text = element text { text } 1052 # 3.3.12 TIME 1054 value-time = element time { text } 1056 # 3.3.13 URI 1058 value-uri = element uri { text } 1060 # 3.3.14 UTC-OFFSET 1062 value-utc-offset = element utc-offset { text } 1064 # 3.4 iCalendar Stream 1066 start = element icalendar { vcalendar+ } 1068 # 3.6 Calendar Components 1070 vcalendar = element vcalendar { 1071 type-calprops, 1072 type-component 1073 } 1074 type-calprops = element properties { 1075 property-prodid & 1076 property-version & 1077 property-calscale? & 1078 property-method? 1079 } 1081 type-component = element components { 1082 ( 1083 component-vevent | 1084 component-vtodo | 1085 component-vjournal | 1086 component-vfreebusy | 1087 component-vtimezone 1088 )* 1089 } 1091 # 3.6.1 Event Component 1093 component-vevent = element vevent { 1094 type-eventprop, 1095 element components { 1096 component-valarm+ 1097 }? 1098 } 1100 type-eventprop = element properties { 1101 property-dtstamp & 1102 property-dtstart & 1103 property-uid & 1105 property-class? & 1106 property-created? & 1107 property-description? & 1108 property-geo? & 1109 property-last-mod? & 1110 property-location? & 1111 property-organizer? & 1112 property-priority? & 1113 property-seq? & 1114 property-status-event? & 1115 property-summary? & 1116 property-transp? & 1117 property-url? & 1118 property-recurid? & 1120 property-rrule? & 1121 (property-dtend | property-duration)? & 1123 property-attach* & 1124 property-attendee* & 1125 property-categories* & 1126 property-comment* & 1127 property-contact* & 1128 property-exdate* & 1129 property-rstatus* & 1130 property-related* & 1131 property-resources* & 1132 property-rdate* 1133 } 1135 # 3.6.2 To-do Component 1137 component-vtodo = element vtodo { 1138 type-todoprop, 1139 element components { 1140 component-valarm+ 1141 }? 1142 } 1144 type-todoprop = element properties { 1145 property-dtstamp & 1146 property-uid & 1148 property-class? & 1149 property-completed? & 1150 property-created? & 1151 property-description? & 1152 property-geo? & 1153 property-last-mod? & 1154 property-location? & 1155 property-organizer? & 1156 property-percent? & 1157 property-priority? & 1158 property-recurid? & 1159 property-seq? & 1160 property-status-todo? & 1161 property-summary? & 1162 property-url? & 1164 property-rrule? & 1166 ( 1167 (property-dtstart?, property-dtend? ) | 1168 (property-dtstart, property-duration)? 1170 ) & 1172 property-attach* & 1173 property-attendee* & 1174 property-categories* & 1175 property-comment* & 1176 property-contact* & 1177 property-exdate* & 1178 property-rstatus* & 1179 property-related* & 1180 property-resources* & 1181 property-rdate* 1182 } 1184 # 3.6.3 Journal Component 1186 component-vjournal = element vjournal { 1187 type-jourprop 1188 } 1190 type-jourprop = element properties { 1191 property-dtstamp & 1192 property-uid & 1194 property-class? & 1195 property-created? & 1196 property-dtstart? & 1197 property-last-mod? & 1198 property-organizer? & 1199 property-recurid? & 1200 property-seq? & 1201 property-status-jour? & 1202 property-summary? & 1203 property-url? & 1205 property-rrule? & 1207 property-attach* & 1208 property-attendee* & 1209 property-categories* & 1210 property-comment* & 1211 property-contact* & 1212 property-description? & 1213 property-exdate* & 1214 property-related* & 1215 property-rdate* & 1216 property-rstatus* 1217 } 1218 # 3.6.4 Free/Busy Component 1220 component-vfreebusy = element vfreebusy { 1221 type-fbprop 1222 } 1224 type-fbprop = element properties { 1225 property-dtstamp & 1226 property-uid & 1228 property-contact? & 1229 property-dtstart? & 1230 property-dtend? & 1231 property-duration? & 1232 property-organizer? & 1233 property-url? & 1235 property-attendee* & 1236 property-comment* & 1237 property-freebusy* & 1238 property-rstatus* 1239 } 1241 # 3.6.5 Time Zone Component 1243 component-vtimezone = element vtimezone { 1244 element properties { 1245 property-tzid & 1247 property-last-mod? & 1248 property-tzuurl? 1249 }, 1250 element components { 1251 (component-standard | component-daylight) & 1252 component-standard* & 1253 component-daylight* 1254 } 1255 } 1257 component-standard = element standard { 1258 type-tzprop 1259 } 1261 component-daylight = element daylight { 1262 type-tzprop 1263 } 1265 type-tzprop = element properties { 1266 property-dtstart & 1267 property-tzoffsetto & 1268 property-tzoffsetfrom & 1270 property-rrule? & 1272 property-comment* & 1273 property-rdate* & 1274 property-tzname* 1275 } 1277 # 3.6.6 Alarm Component 1279 component-valarm = element valarm { 1280 audioprop | dispprop | emailprop 1281 } 1283 type-audioprop = element properties { 1284 property-action & 1285 property-trigger & 1287 (property-duration, property-repeat)? & 1289 property-attach? 1290 } 1292 type-dispprop = element properties { 1293 property-action & 1294 property-description & 1295 property-trigger & 1296 property-summary & 1298 property-attendee+ & 1300 (property-duration, property-repeat)? & 1302 property-attach* 1303 } 1305 type-emailprop = element properties { 1306 property-action & 1307 property-description & 1308 property-trigger & 1310 (property-duration, property-repeat)? 1311 } 1313 # 3.7 Calendar Properties 1314 # 3.7.1 Calendar Scale 1316 property-calscale = element calscale { 1318 element parameters { empty }?, 1320 element text { "GREGORIAN" } 1321 } 1323 # 3.7.2 Method 1325 property-method = element method { 1327 element parameters { empty }?, 1329 value-text 1330 } 1332 # 3.7.3 Product Identifier 1334 property-prodid = element prodid { 1336 element parameters { empty }?, 1338 value-text 1339 } 1341 # 3.7.4 Version 1343 property-version = element version { 1345 element parameters { empty }?, 1347 value-text 1348 } 1350 # 3.8 Component Properties 1352 # 3.8.1 Descriptive Component Properties 1354 # 3.8.1.1 Attachment 1356 property-attach = element attach { 1358 element parameters { 1359 fmttypeparam? & 1360 encodingparam? 1361 }?, 1362 value-uri | value-binary 1363 } 1365 # 3.8.1.2 Categories 1367 property-categories = element categories { 1369 element parameters { 1370 languageparam? & 1371 }?, 1373 value-text+ 1374 } 1376 # 3.8.1.3 Classification 1378 property-class = element class { 1380 element parameters { empty }?, 1382 element text { 1383 "PUBLIC" | 1384 "PRIVATE" | 1385 "CONFIDENTIAL" 1386 } 1387 } 1389 # 3.8.1.4 Comment 1391 property-comment = element comment { 1393 element parameters { 1394 altrepparam? & 1395 languageparam? 1396 }?, 1398 value-text 1399 } 1401 # 3.8.1.5 Description 1403 property-description = element description { 1405 element parameters { 1406 altrepparam? & 1407 languageparam? 1408 }?, 1409 value-text 1410 } 1412 # 3.8.1.6 Geographic Position 1414 property-geo = element geo { 1416 element parameters { empty }?, 1418 element value { 1419 element latitude { text }, 1420 element longitude { text } 1421 } 1422 } 1424 # 3.8.1.7 Location 1426 property-location = element location { 1428 element parameters { 1429 altrepparam? & 1430 languageparam? 1431 }?, 1433 value-text 1434 } 1436 # 3.8.1.8 Percent Complete 1438 property-percent = element percent-complete { 1440 element parameters { empty }?, 1442 value-integer 1443 } 1445 # 3.8.1.9 Priority 1447 property-priority = element priority { 1449 element parameters { empty }?, 1451 value-integer 1452 } 1454 # 3.8.1.10 Resources 1456 property-resources = element resources { 1457 element parameters { 1458 altrepparam? & 1459 languageparam? 1460 }?, 1462 value-text+ 1463 } 1465 # 3.8.1.11 Status 1467 property-status-event = element status { 1469 element parameters { empty }?, 1471 element text { 1472 "TENTATIVE" | 1473 "CONFIRMED" | 1474 "CANCELLED" 1475 } 1476 } 1478 property-status-todo = element status { 1480 element parameters { empty }?, 1482 element text { 1483 "NEEDS-ACTION" | 1484 "COMPLETED" | 1485 "IN-PROCESS" | 1486 "CANCELLED" 1487 } 1488 } 1490 property-status-jour = element status { 1492 element parameters { empty }?, 1494 element text { 1495 "DRAFT" | 1496 "FINAL" | 1497 "CANCELLED" 1498 } 1499 } 1501 # 3.8.1.12 Summary 1503 property-summary = element summary { 1504 element parameters { 1505 altrepparam? & 1506 languageparam? 1507 }?, 1509 value-text 1510 } 1512 # 3.8.2 Date and Time Component Properties 1514 # 3.8.2.1 Date/Time Completed 1516 property-completed = element completed { 1518 element parameters { empty }?, 1520 value-date-time 1521 } 1523 # 3.8.2.2 Date/Time End 1525 property-dtend = element dtend { 1527 element parameters { 1528 tzidparam? 1529 }?, 1531 value-date-time | 1532 value-date 1533 } 1535 # 3.8.2.3 Date/Time Due 1537 property-due = element due { 1539 element parameters { 1540 tzidparam? 1541 }?, 1543 value-date-time | 1544 value-date 1545 } 1547 # 3.8.2.4 Date/Time Start 1549 property-dtstart = element dtstart { 1551 element parameters { 1552 tzidparam? 1553 }?, 1555 value-date-time | 1556 value-date 1557 } 1559 # 3.8.2.5 Duration 1561 property-duration = element duration { 1563 element parameters { empty }?, 1565 value-duration 1566 } 1568 # 3.8.2.6 Free/Busy Time 1570 property-freebusy = element freebusy { 1572 element parameters { 1573 fbtypeparam? 1574 }?, 1576 value-period+ 1577 } 1579 # 3.8.2.7 Time Transparency 1581 property-transp = element transp { 1583 element parameters { empty }?, 1585 element text { 1586 "OPAQUE" | 1587 "TRANSPARENT" 1588 } 1589 } 1591 # 3.8.3 Time Zone Component Properties 1593 # 3.8.3.1 Time Zone Identifier 1595 property-tzid = element tzid { 1597 element parameters { empty }?, 1598 value-text 1599 } 1601 # 3.8.3.2 Time Zone Name 1603 property-tzname = element tzname { 1605 element parameters { 1606 languageparam? 1607 }?, 1609 value-text 1610 } 1612 # 3.8.3.3 Time Zone Offset From 1614 property-tzoffsetfrom = element tzoffsetfrom { 1616 element parameters { empty }?, 1618 value-utc-offset 1619 } 1621 # 3.8.3.4 Time Zone Offset To 1623 property-tzoffsetto = element tzoffsetto { 1625 element parameters { empty }?, 1627 value-utc-offset 1628 } 1630 # 3.8.3.5 Time Zone URL 1632 property-tzurl = element tzurl { 1634 element parameters { empty }?, 1636 value-uri 1637 } 1639 # 3.8.4 Relationship Component Properties 1641 # 3.8.4.1 Attendee 1643 property-attendee = element attendee { 1645 element parameters { 1646 cutypeparam? & 1647 memberparam? & 1648 roleparam? & 1649 partstatparam? & 1650 rsvpparam? & 1651 deltoparam? & 1652 delfromparam? & 1653 sentbyparam? & 1654 cnparam? & 1655 dirparam? & 1656 languageparam? 1657 }?, 1659 value-cal-address 1660 } 1662 # 3.8.4.2 Contact 1664 property-contact = element contact { 1666 element parameters { 1667 altrepparam? & 1668 languageparam? 1669 }?, 1671 value-text 1672 } 1674 # 3.8.4.3 Organizer 1676 property-organizer = element organizer { 1678 element parameters { 1679 cnparam? & 1680 dirparam? & 1681 sentbyparam? & 1682 languageparam? 1683 }?, 1685 value-cal-address 1686 } 1688 # 3.8.4.4 Recurrence ID 1690 property-recurid = element recurrence-id { 1692 element parameters { 1693 tzidparam? & 1694 rangeparam? 1695 }?, 1697 value-date-time | 1698 value-date 1699 } 1701 # 3.8.4.5 Related-To 1703 property-related = element related-to { 1705 element parameters { 1706 reltypeparam? 1707 }?, 1709 value-text 1710 } 1712 # 3.8.4.6 Uniform Resource Locator 1714 property-url = element url { 1716 element parameters { empty }?, 1718 value-uri 1719 } 1721 # 3.8.4.7 Unique Identifier 1723 property-uid = element uid { 1725 element parameters { empty }?, 1727 value-text 1728 } 1730 # 3.8.5 Recurrence Component Properties 1732 # 3.8.5.1 Exception Date/Times 1734 property-exdate = element exdate { 1736 element parameters { 1737 tzidparam? 1738 }?, 1740 value-date-time+ | 1741 value-date+ 1743 } 1745 # 3.8.5.2 Recurrence Date/Times 1747 property-rdate = element rdate { 1749 element parameters { 1750 tzidparam? 1751 }?, 1753 value-date-time+ | 1754 value-date+ | 1755 value-period+ 1756 } 1758 # 3.8.5.3 Recurrence Rule 1760 property-rrule = element rrule { 1762 element parameters { empty }?, 1764 value-recur 1765 } 1767 # 3.8.6 Alarm Component Properties 1769 # 3.8.6.1 Action 1771 property-action = element action { 1773 element parameters { empty }?, 1775 element text { 1776 "AUDIO" | 1777 "DISPLAY" | 1778 "EMAIL" 1779 } 1780 } 1782 # 3.8.6.2 Repeat Count 1784 property-repeat = element repeat { 1786 element parameters { empty }?, 1788 value-integer 1789 } 1790 # 3.8.6.3 Trigger 1792 property-repeat = element repeat { 1794 ( 1795 element parameters { 1796 trigrelparam? 1797 }?, 1799 value-duration 1800 ) | 1801 ( 1802 element parameters { empty }?, 1804 value-date-time 1805 ) 1806 } 1808 # 3.8.7 Change Management Component Properties 1810 # 3.8.7.1 Date/Time Created 1812 property-created = element created { 1814 element parameters { empty }?, 1816 value-date-time 1817 } 1819 # 3.8.7.2 Date/Time Stamp 1821 property-dtstamp = element dtstamp { 1823 element parameters { empty }?, 1825 value-date-time 1826 } 1828 # 3.8.7.3 Last Modified 1830 property-last-mod = element last-modified { 1832 element parameters { empty }?, 1834 value-date-time 1835 } 1837 # 3.8.7.4 Sequence Number 1838 property-seq = element sequence { 1840 element parameters { empty }?, 1842 value-integer 1843 } 1845 # 3.8.8 Miscellaneous Component Properties 1847 # 3.8.8.3 Request Status 1849 property-rstatus = element request-status { 1851 element parameters { 1852 languageparam? 1853 }?, 1855 element value { 1856 element code { text }, 1857 element description { text }, 1858 element data { text }? 1859 } 1860 } 1862 Appendix B. Examples 1864 This section contains two examples of iCalendar objects with their 1865 xCal representation. 1867 B.1. Example 1 1869 B.1.1. iCalendar Data 1871 BEGIN:VCALENDAR 1872 CALSCALE:GREGORIAN 1873 PRODID:-//Example Inc.//Example Calendar//EN 1874 VERSION:2.0 1875 BEGIN:VEVENT 1876 DTSTAMP:20080205T191224Z 1877 DTSTART:20081006 1878 SUMMARY:Planning meeting 1879 UID:4088E990AD89CB3DBB484909 1880 END:VEVENT 1881 END:VCALENDAR 1883 B.1.2. XML Data 1885 1886 1887 1888 1889 GREGORIAN 1890 1891 -//Example Inc.//Example Calendar//EN 1892 1893 2.0 1894 1895 1896 1897 1898 20080205T191224Z 1899 20081006 1900 1901 Planning meeting 1902 1903 1904 4088E990AD89CB3DBB484909 1905 1906 1907 1908 1909 1910 1912 B.2. Example 2 1913 B.2.1. iCalendar Data 1915 VERSION:2.0 1916 PRODID:-//Example Corp.//Example Client//EN 1917 BEGIN:VTIMEZONE 1918 LAST-MODIFIED:20040110T032845Z 1919 TZID:US/Eastern 1920 BEGIN:DAYLIGHT 1921 DTSTART:20000404T020000 1922 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 1923 TZNAME:EDT 1924 TZOFFSETFROM:-0500 1925 TZOFFSETTO:-0400 1926 END:DAYLIGHT 1927 BEGIN:STANDARD 1928 DTSTART:20001026T020000 1929 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 1930 TZNAME:EST 1931 TZOFFSETFROM:-0400 1932 TZOFFSETTO:-0500 1933 END:STANDARD 1934 END:VTIMEZONE 1935 BEGIN:VEVENT 1936 DTSTAMP:20060206T001121Z 1937 DTSTART;TZID=US/Eastern:20060102T120000 1938 DURATION:PT1H 1939 RRULE:FREQ=DAILY;COUNT=5 1940 SUMMARY:Event #2 1941 UID:00959BC664CA650E933C892C@example.com 1942 END:VEVENT 1943 BEGIN:VEVENT 1944 DTSTAMP:20060206T001121Z 1945 DTSTART;TZID=US/Eastern:20060104T140000 1946 DURATION:PT1H 1947 RECURRENCE-ID;TZID=US/Eastern:20060104T120000 1948 SUMMARY:Event #2 bis 1949 UID:00959BC664CA650E933C892C@example.com 1950 END:VEVENT 1951 END:VCALENDAR 1953 B.2.2. XML Data 1955 1956 1957 1958 1959 1960 -//Example Inc.//Example Client//EN 1962 1963 1964 2.0 1965 1966 1967 1968 1969 1970 1971 20040110T032845Z 1972 1973 US/Eastern 1974 1975 1976 1977 1978 1979 20000404T020000 1980 1981 1982 1983 YEARLY 1984 1SU 1985 4 1986 1987 1988 1989 EDT 1990 1991 1992 -0500 1993 1994 1995 -0400 1996 1997 1998 1999 2000 2001 2002 20001026T020000 2003 2004 2005 2006 YEARLY 2007 -1SU 2008 10 2009 2011 2012 2013 EST 2014 2015 2016 -0400 2017 2018 2019 -0500 2020 2021 2022 2023 2024 2025 2026 2027 20060206T001121Z 2028 2029 2030 US/Eastern 2031 2032 20060102T120000 2033 2034 2035 PT1H 2036 2037 2038 2039 DAILY 2040 5 2041 2042 2043 2044 Event #2 2045 2046 2047 00959BC664CA650E933C892C@example.com 2048 2049 2050 2051 2052 2053 20060206T001121Z 2054 2055 2056 US/Eastern 2057 2058 20060104T140000 2060 2061 2062 PT1H 2063 2064 2065 2066 US/Eastern 2067 2068 20060104T120000 2069 2070 2071 Event #2 bis 2072 2073 2074 00959BC664CA650E933C892C@example.com 2075 2076 2077 2078 2079 2080 2082 Appendix C. Change History (to be removed prior to publication as an 2083 RFC) 2085 Changes from -06: 2087 1. Updated XML reference to latest version. 2089 2. Corrected dtstamp elements in samples. 2091 3. Removed empty informative references section. 2093 4. Changed media type registration file extension to "xcs" (feedback 2094 from ietf-types) 2096 5. Changed media type registration follow up email to ietf-calsify 2097 (feedback from ietf-types) 2099 6. Updated several parts of the specification to show how future 2100 extensions to iCalendar can be handled without changing this 2101 specification (feedback from ietf-types) 2103 7. Updated security concerns in section 5 (feedback from ietf-types) 2105 8. Updated encoding considerations in section 5 (feedback from ietf- 2106 types) 2108 Changes from -05: 2110 1. Removed the ordwk and weekday elements from the byday element in 2111 a recurrence rule. The byday element now takes a text value 2112 which is the same as the value used in [RFC5545]. 2114 2. Added another example of an iCalendar object converted to xCal. 2116 3. Fixed the MIME type registration (another instance of xml+ 2117 calendar corrected to calendar+xml). 2119 Changes from -04: 2121 1. Added description to XML extension discussing how to handle 2122 binary data in XML. 2124 2. Removed empty Appendix B. 2126 Changes from -03: 2128 1. Changed the proposed MIME type from xml+calendar to calendar+xml. 2130 2. Fixed several references to sections of RFC5545. 2132 3. Updated example in Appendix C. 2134 4. Corrected the definition and grammar for TIME and UTC-OFFSET 2135 properties. 2137 Changes from -02: 2139 1. Removed the LINK extension and related sections. The concept 2140 will be addressed in a separate specification. 2142 2. Various minor edits for clarity and consistency. 2144 Changes from -01: 2146 1. Added LINK extension to iCalendar and section discussing links in 2147 XML format. 2149 2. Adopted "xCal" as the short name for the specification. 2151 Changes from -00: 2153 1. Changed 2445bis references to RFC5545. 2155 2. Added a version number to the XML namespace for iCalendar. 2157 3. Changed the values for the date, date-time, period, and duration 2158 elements to exactly match the values specified in RFC5545. 2159 Previously these were broken out into separate elements for day, 2160 month, year, etc. 2162 4. Added specification for XML property in iCalendar. 2164 Authors' Addresses 2166 Cyrus Daboo 2167 Apple Inc. 2168 1 Infinite Loop 2169 Cupertino, CA 95014 2170 USA 2172 EMail: cyrus@daboo.name 2173 URI: http://www.apple.com/ 2175 Mike Douglass 2176 Rensselaer Polytechnic Institute 2177 110 8th Street 2178 Troy, NY 12180 2179 USA 2181 EMail: douglm@rpi.edu 2182 URI: http://www.rpi.edu/ 2184 Steven Lees 2185 Microsoft Corporation 2186 One Microsoft Way 2187 Redmond, WA 98052 2188 USA 2190 EMail: steven.lees@microsoft.com 2191 URI: http://www.microsoft.com/