idnits 2.17.1 draft-daboo-et-al-icalendar-in-xml-01.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- ** You're using the IETF Trust Provisions' Section 6.b License Notice from 12 Sep 2009 rather than the newer Notice from 28 Dec 2009. (See https://trustee.ietf.org/license-info/) 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 (November 25, 2009) is 5265 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: 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: May 29, 2010 RPI 6 S. Lees 7 Microsoft 8 November 25, 2009 10 iCalendar XML Representation 11 draft-daboo-et-al-icalendar-in-xml-01 13 Abstract 15 This specification defines a format for representing iCalendar data 16 in XML. 18 Status of This Memo 20 This Internet-Draft is submitted to IETF in full conformance with the 21 provisions of BCP 78 and BCP 79. 23 Internet-Drafts are working documents of the Internet Engineering 24 Task Force (IETF), its areas, and its working groups. Note that 25 other groups may also distribute working documents as Internet- 26 Drafts. 28 Internet-Drafts are draft documents valid for a maximum of six months 29 and may be updated, replaced, or obsoleted by other documents at any 30 time. It is inappropriate to use Internet-Drafts as reference 31 material or to cite them other than as "work in progress." 33 The list of current Internet-Drafts can be accessed at 34 http://www.ietf.org/ietf/1id-abstracts.txt. 36 The list of Internet-Draft Shadow Directories can be accessed at 37 http://www.ietf.org/shadow.html. 39 This Internet-Draft will expire on May 29, 2010. 41 Copyright Notice 43 Copyright (c) 2009 IETF Trust and the persons identified as the 44 document authors. All rights reserved. 46 This document is subject to BCP 78 and the IETF Trust's Legal 47 Provisions Relating to IETF Documents 48 (http://trustee.ietf.org/license-info) in effect on the date of 49 publication of this document. Please review these documents 50 carefully, as they describe your rights and restrictions with respect 51 to this document. Code Components extracted from this document must 52 include Simplified BSD License text as described in Section 4.e of 53 the Trust Legal Provisions and are provided without warranty as 54 described in the BSD License. 56 Table of Contents 58 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 59 2. Conventions Used in This Document . . . . . . . . . . . . . . 4 60 3. Converting from iCalendar to XML . . . . . . . . . . . . . . . 4 61 3.1. Pre-processing . . . . . . . . . . . . . . . . . . . . . . 5 62 3.2. iCalendar stream (RFC5545 section 3.4) . . . . . . . . . . 5 63 3.3. Components (RFC5545 section 3.6) . . . . . . . . . . . . . 6 64 3.4. Properties (RFC5545 section 3.5) . . . . . . . . . . . . . 7 65 3.4.1. Special Cases for Properties . . . . . . . . . . . . . 8 66 3.4.1.1. Multi-valued Properties . . . . . . . . . . . . . 9 67 3.4.1.2. GEO Property . . . . . . . . . . . . . . . . . . . 9 68 3.4.1.3. REQUEST-STATUS Property . . . . . . . . . . . . . 9 69 3.5. Parameters (RFC5545 section 3.4) . . . . . . . . . . . . . 9 70 3.5.1. VALUE parameter . . . . . . . . . . . . . . . . . . . 11 71 3.6. Values (RFC5545 section 3.3) . . . . . . . . . . . . . . . 11 72 3.6.1. Binary (RFC5545 section 4.3.1) . . . . . . . . . . . . 11 73 3.6.2. Boolean (RFC5545 section 4.3.2) . . . . . . . . . . . 11 74 3.6.3. Calendar User Address (RFC5545 section 4.3.3) . . . . 11 75 3.6.4. Date (RFC5545 section 4.3.4) . . . . . . . . . . . . . 12 76 3.6.5. Date-Time (RFC5545 section 4.3.5) . . . . . . . . . . 12 77 3.6.6. Duration (RFC5545 section 4.3.6) . . . . . . . . . . . 12 78 3.6.7. Float (RFC5545 section 4.3.7) . . . . . . . . . . . . 12 79 3.6.8. Integer (RFC5545 section 4.3.8) . . . . . . . . . . . 12 80 3.6.9. Period of Time (RFC5545 section 4.3.9) . . . . . . . . 12 81 3.6.10. Recurrence Rule (RFC5545 section 4.3.10) . . . . . . . 13 82 3.6.11. Text (RFC5545 section 4.3.11) . . . . . . . . . . . . 13 83 3.6.12. Time (RFC5545 section 4.3.12) . . . . . . . . . . . . 13 84 3.6.13. URI (RFC5545 section 4.3.13) . . . . . . . . . . . . . 13 85 3.6.14. UTC Offset (RFC5545 section 4.3.14) . . . . . . . . . 13 86 3.7. Extensions . . . . . . . . . . . . . . . . . . . . . . . . 14 87 4. Converting from XML into iCalendar . . . . . . . . . . . . . . 14 88 4.1. Converting XML Extensions into iCalendar . . . . . . . . . 14 89 4.2. The XML property for iCalendar . . . . . . . . . . . . . . 14 90 5. Security Considerations . . . . . . . . . . . . . . . . . . . 15 91 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15 92 6.1. Namespace Registration . . . . . . . . . . . . . . . . . . 16 93 6.2. Media Type . . . . . . . . . . . . . . . . . . . . . . . . 16 94 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 17 95 8. Normative References . . . . . . . . . . . . . . . . . . . . . 17 96 Appendix A. Relax NG Schema . . . . . . . . . . . . . . . . . . . 17 97 Appendix B. XML Stylesheet for conversion to iCalendar . . . . . 40 98 Appendix C. Example . . . . . . . . . . . . . . . . . . . . . . . 40 99 C.1. iCalendar Data . . . . . . . . . . . . . . . . . . . . . . 41 100 C.2. XML Data . . . . . . . . . . . . . . . . . . . . . . . . . 42 101 Appendix D. Change History (to be removed prior to 102 publication as an RFC) . . . . . . . . . . . . . . . 42 104 1. Introduction 106 The iCalendar data format [RFC5545] is a widely deployed interchange 107 format for calendaring and scheduling data. While many applications 108 and services consume and generate calendar data, iCalendar is a 109 specialized format that requires its own parser/generator. In 110 contrast, XML-based formats are widely used for interoperability 111 between applications, and the many tools that generate, parse, and 112 manipulate XML make it easier to work with than iCalendar. 114 The purpose of this specification is to define an XML format that 115 allows iCalendar data to be converted to XML, and then back to 116 iCalendar, without losing any semantic meaning in the data. Anyone 117 creating XML calendar data according to this specification will know 118 that their data can be converted to a valid iCalendar representation 119 as well. 121 Two key design considerations are: 123 Round-tripping (converting an iCalendar instance to XML and back) 124 will give the same result as the starting point. 126 Preserve the semantics of the iCalendar data. While a simple 127 consumer can easily browse the calendar data in XML, a full 128 understanding of iCalendar is still required in order to modify 129 and/or fully comprehend the calendar data. 131 2. Conventions Used in This Document 133 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 134 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 135 document are to be interpreted as described in [RFC2119]. 137 When XML element types in the namespace 138 "urn:ietf:params:xml:ns:icalendar-2.0" are referenced in this 139 document outside of the context of an XML fragment, the string 140 "ICAL:" will be prefixed to the element types. 142 Some examples in this document contain "partial" XML documents used 143 for illustrative purposes. In these examples, three periods "..." 144 are used to indicate a portion of the document that has been removed 145 for compactness. 147 3. Converting from iCalendar to XML 149 This section describes how iCalendar data is converted to XML using a 150 simple mapping between the iCalendar data model and XML elements. 152 3.1. Pre-processing 154 iCalendar data uses a line folding mechanism to limit lines of data 155 to a maximum line length (typically 72 characters) to ensure maximum 156 likelihood of preserving data integrity as it is transported via 157 various means (e.g., email) - see Section 3.1 of [RFC5545]. Prior to 158 converting iCalendar data into XML all folded lines MUST be unfolded. 160 iCalendar data uses an "escape" character sequence for text values 161 and parameter values. When such text elements are converted into XML 162 the escaping MUST be removed. 164 iCalendar uses a base64 encoding for binary data. The base64 165 encoding MUST remain when converted to XML. 167 3.2. iCalendar stream (RFC5545 section 3.4) 169 At the top level of the iCalendar object model is an "iCalendar 170 stream". This object encompasses multiple "iCalendar objects". In 171 XML, the entire stream is contained in the root ICAL:icalendar XML 172 element. 174 An iCalendar stream can contain one or more iCalendar objects. Each 175 iCalendar object, delimited by BEGIN:VCALENDAR and END:VCALENDAR, is 176 enclosed by the ICAL:vcalendar XML element. 178 Example: 180 181 182 183 ... 184 185 187 iCalendar objects are comprised of a set of "components", 188 "properties", "parameters" and "values". A "component" can contain 189 other "components" or "properties". A "property" has a value and 190 optionally a set of "parameters". 192 In XML, "components" are contained within an ICAL:components XML 193 element. With that element, another ICAL:components element could 194 appear (representing components nested within components) or the 195 ICAL:properties XML element could appear. ICAL:properties is used to 196 encapsulate iCalendar properties. 198 Each iCalendar property will be mapped to its own XML element as 199 described below. Within each of these elements there is an optional 200 ICAL:parameters XML element used to encapsulate any iCalendar 201 parameters. Additionally there will be one or more XML elements 202 representing the value of the iCalendar property. 204 Example: 206 207 208 209 210 ... 211 212 213 ... 214 215 216 218 +------------------+----------------+------------------+ 219 | Item | XML element | XML Definition | 220 +------------------+----------------+------------------+ 221 | iCalendar Stream | ICAL:icalendar | Appendix A # 3.4 | 222 | VCALENDAR | ICAL:vcalendar | Appendix A # 3.6 | 223 +------------------+----------------+------------------+ 225 3.3. Components (RFC5545 section 3.6) 227 Each calendar component in the VCALENDAR object, delimited by BEGIN 228 and END, will be converted to an enclosing XML element with the same 229 name, but in lowercase: 231 +-----------+----------------+--------------------+ 232 | Component | XML element | XML Definition | 233 +-----------+----------------+--------------------+ 234 | VEVENT | ICAL:vevent | Appendix A # 3.6.1 | 235 | VTODO | ICAL:vtodo | Appendix A # 3.6.2 | 236 | VJOURNAL | ICAL:vjournal | Appendix A # 3.6.3 | 237 | VFREEBUSY | ICAL:vfreebusy | Appendix A # 3.6.4 | 238 | VTIMEZONE | ICAL:vtimezone | Appendix A # 3.6.5 | 239 | STANDARD | ICAL:standard | Appendix A # 3.6.5 | 240 | DAYLIGHT | ICAL:daylight | Appendix A # 3.6.5 | 241 | VALARM | ICAL:valarm | Appendix A # 3.6.6 | 242 +-----------+----------------+--------------------+ 244 3.4. Properties (RFC5545 section 3.5) 246 iCalendar properties , whether they apply to the VCALENDAR object or 247 to a component, are handled in a consistent way. 249 iCalendar properties are enclosed in the XML element ICAL:properties. 251 Each invidivual iCalendar property is represented in XML by an 252 element of the same name as the iCalendar property, but in lowercase. 253 For example, the CALSCALE property is represented in XML by the ICAL: 254 calscale element. 256 Example: 258 259 260 261 262 ... 263 ... 264 ... 265 266 267 ... 268 269 270 272 Each property can contain an ICAL:parameters XML element 273 encapsulating any iCalendar parameters associated with the iCalendar 274 property. 276 Each property will contain one or more "value" XML elements as 277 described below representing the value of the iCalendar property. 279 +------------------+-----------------------+-----------------------+ 280 | Property | XML element | XML Definition | 281 +------------------+-----------------------+-----------------------+ 282 | CALSCALE | ICAL:calscale | Appendix A # 3.7.1 | 283 | METHOD | ICAL:method | Appendix A # 3.7.2 | 284 | PRODID | ICAL:prodid | Appendix A # 3.7.3 | 285 | VERSION | ICAL:version | Appendix A # 3.7.4 | 286 | ATTACH | ICAL:attach | Appendix A # 3.8.1.1 | 287 | CATEGORIES | ICAL:categories | Appendix A # 3.8.1.2 | 288 | CLASS | ICAL:class | Appendix A # 3.8.1.3 | 289 | COMMENT | ICAL:comment | Appendix A # 3.8.1.4 | 290 | DESCRIPTION | ICAL:description | Appendix A # 3.8.1.5 | 291 | GEO | ICAL:geo | Appendix A # 3.8.1.6 | 292 | LOCATION | ICAL:location | Appendix A # 3.8.1.7 | 293 | PERCENT-COMPLETE | ICAL:percent-complete | Appendix A # 3.8.1.8 | 294 | PRIORITY | ICAL:priority | Appendix A # 3.8.1.9 | 295 | RESOURCES | ICAL:resources | Appendix A # 3.8.1.10 | 296 | STATUS | ICAL:status | Appendix A # 3.8.1.11 | 297 | SUMMARY | ICAL:summary | Appendix A # 3.8.1.12 | 298 | COMPLETED | ICAL:completed | Appendix A # 3.8.2.1 | 299 | DTEND | ICAL:dtend | Appendix A # 3.8.2.2 | 300 | DUE | ICAL:due | Appendix A # 3.8.2.3 | 301 | DTSTART | ICAL:dtstart | Appendix A # 3.8.2.4 | 302 | DURATION | ICAL:duration | Appendix A # 3.8.2.5 | 303 | FREEBUSY | ICAL:freebusy | Appendix A # 3.8.2.6 | 304 | TRANSP | ICAL:transp | Appendix A # 3.8.2.7 | 305 | TZID | ICAL:tzid | Appendix A # 3.8.3.1 | 306 | TZNAME | ICAL:tzname | Appendix A # 3.8.3.2 | 307 | TZOFFSETFROM | ICAL:tzoffsetfrom | Appendix A # 3.8.3.3 | 308 | TZOFFSETTO | ICAL:tzoffsetto | Appendix A # 3.8.3.4 | 309 | TZURL | ICAL:tzurl | Appendix A # 3.8.3.5 | 310 | ATTENDEE | ICAL:attendee | Appendix A # 3.8.4.1 | 311 | CONTACT | ICAL:contact | Appendix A # 3.8.4.2 | 312 | ORGANIZER | ICAL:organizer | Appendix A # 3.8.4.3 | 313 | RECURRENCE-ID | ICAL:recurrence-id | Appendix A # 3.8.4.4 | 314 | RELATED-TO | ICAL:related-to | Appendix A # 3.8.4.5 | 315 | URL | ICAL:url | Appendix A # 3.8.4.6 | 316 | UID | ICAL:uid | Appendix A # 3.8.4.7 | 317 | EXDATE | ICAL:exdate | Appendix A # 3.8.5.1 | 318 | RDATE | ICAL:rdate | Appendix A # 3.8.5.2 | 319 | RRULE | ICAL:rrule | Appendix A # 3.8.5.3 | 320 | ACTION | ICAL:action | Appendix A # 3.8.6.1 | 321 | REPEAT | ICAL:repeat | Appendix A # 3.8.6.2 | 322 | TRIGGER | ICAL:trigger | Appendix A # 3.8.6.3 | 323 | CREATED | ICAL:created | Appendix A # 3.8.7.1 | 324 | DTSTAMP | ICAL:dtstamp | Appendix A # 3.8.7.2 | 325 | LAST-MODIFIED | ICAL:last-modified | Appendix A # 3.8.7.3 | 326 | SEQUENCE | ICAL:sequence | Appendix A # 3.8.7.4 | 327 | REQUEST-STATUS | ICAL:request-status | Appendix A # 3.8.8.3 | 328 +------------------+-----------------------+-----------------------+ 330 3.4.1. Special Cases for Properties 332 Some properties in iCalendar can contain "structured" value data. 333 This includes lists of "standard" value types, as well as values with 334 specific "fields". In XML, these "structured" values are represented 335 as separate XML elements in various ways for ease of processing using 336 standard XML tools. 338 3.4.1.1. Multi-valued Properties 340 The following iCalendar properties can have values that consist of a 341 list of "standard" iCalendar values separated by a specific 342 delimiter. In XML these properties are represented by an XML element 343 that contains multiple "value" elements (Section 3.6). 345 +------------+-----------------+-----------------------+ 346 | Property | XML element | XML Definition | 347 +------------+-----------------+-----------------------+ 348 | CATEGORIES | ICAL:categories | Appendix A # 3.8.1.2 | 349 | RESOURCES | ICAL:resources | Appendix A # 3.8.1.10 | 350 | FREEBUSY | ICAL:freebusy | Appendix A # 3.8.2.6 | 351 | EXDATE | ICAL:exdate | Appendix A # 3.8.5.1 | 352 | RDATE | ICAL:rdate | Appendix A # 3.8.5.2 | 353 +------------+-----------------+-----------------------+ 355 3.4.1.2. GEO Property 357 In iCalendar, the GEO property value is defined as a semi-colon 358 separated list of two FLOAT values, the first representing latitude 359 and the second longitude. 361 In XML, the value for the ICAL:geo element is represented by an ICAL: 362 value element containing an ICAL:latitude element and an ICAL: 363 longitude element, each of which contain text values representing the 364 FLOAT values. See Appendix A # 3.8.1.6. 366 3.4.1.3. REQUEST-STATUS Property 368 In Icalendar, the REQUEST-STATUS property value is defined as a semi- 369 colon separated list of two or three TEXT values. The first 370 represents a code, the second a description, and the third (optional) 371 additional data. 373 In XML, the value for the ICAL:request-status element is represented 374 by an ICAL:value element containing an ICAL:code element, and iCAL: 375 description element, and optionally and ICAL:data element, each of 376 which contain the corresponding TEXT values. See Appendix A # 377 3.8.8.3. 379 3.5. Parameters (RFC5545 section 3.4) 381 iCalendar parameters are enclosed in the XML element ICAL:parameters 382 which optionally occurs once in each property XML element. 384 Each invidivual iCalendar parameter is represented in XML by an 385 element of the same name as the iCalendar parameter, but in 386 lowercase. For example, the PARTSTAT parameter is represented in XML 387 by the ICAL:partstat element. 389 Example: 391 392 393 394 ... 395 396 ... 397 398 399 NEEDS-ACTION 400 401 ... 402 403 404 406 Each parameter contains either text, or one or more child XML 407 elements representing iCalendar value types. 409 +----------------+---------------------+---------------------+ 410 | Parameter | XML element | XML Definition | 411 +----------------+---------------------+---------------------+ 412 | ALTREP | ICAL:altrep | Appendix A # 3.2.1 | 413 | CN | ICAL:cn | Appendix A # 3.2.2 | 414 | CUTYPE | ICAL:cutype | Appendix A # 3.2.3 | 415 | DELEGATED-FROM | ICAL:delegated-from | Appendix A # 3.2.4 | 416 | DELEGATED-TO | ICAL:delegated-to | Appendix A # 3.2.5 | 417 | DIR | ICAL:dir | Appendix A # 3.2.6 | 418 | ENCODING | ICAL:encoding | Appendix A # 3.2.7 | 419 | FMTTYPE | ICAL:fmttype | Appendix A # 3.2.8 | 420 | FBTYPE | ICAL:fbtype | Appendix A # 3.2.9 | 421 | LANGUAGE | ICAL:language | Appendix A # 3.2.10 | 422 | MEMBER | ICAL:member | Appendix A # 3.2.11 | 423 | PARTSTAT | ICAL:partstat | Appendix A # 3.2.12 | 424 | RANGE | ICAL:range | Appendix A # 3.2.13 | 425 | RELATED | ICAL:related | Appendix A # 3.2.14 | 426 | RELTYPE | ICAL:reltype | Appendix A # 3.2.15 | 427 | ROLE | ICAL:role | Appendix A # 3.2.16 | 428 | RSVP | ICAL:rsvp | Appendix A # 3.2.17 | 429 | SENT-BY | ICAL:sent-by | Appendix A # 3.2.18 | 430 | TZID | ICAL:tzid | Appendix A # 3.2.19 | 431 +----------------+---------------------+---------------------+ 433 3.5.1. VALUE parameter 435 iCalendar defines a VALUE parameter (Section 3.2.20 of [RFC5545]. 436 This parameter is not mapped to an XML element. Instead, the value 437 type is handled by having different XML elements for each value, and 438 these appear inside of ICAL:property elements. Thus, when converting 439 from iCalendar to XML, any VALUE parameters are skipped. When 440 converting from XML into iCalendar, the appropriate VALUE parameter 441 MUST be included in the iCalendar property if the value type is not 442 the default value type for that property. 444 3.6. Values (RFC5545 section 3.3) 446 iCalendar value types are mapped into XML elements with a matching 447 name in all lowercase. In some cases, iCalendar defines "structured" 448 values and these are mapped into separate child elements in each 449 value element, as described by the simple DTD definitions below. 451 Some properties allow for multiple values and these are represented 452 by separate matching value XML elements. 454 3.6.1. Binary (RFC5545 section 4.3.1) 456 Description: iCalendar BINARY property values are represented by the 457 ICAL:binary XML element. The content of the element is base64 458 encoded data. Whitespace MAY be inserted into the data at any 459 point to "wrap" the data to reasonable line lengths. When 460 converting back to iCalendar the whitespace MUST first be removed. 462 XML Definition: Appendix A # 3.3.1 464 3.6.2. Boolean (RFC5545 section 4.3.2) 466 Description: iCalendar BOOLEAN property values are represented by 467 the ICAL:boolean XML element. The content of the element is text 468 containing either of "TRUE" or "FALSE". 470 XML Definition: Appendix A # 3.3.2 472 3.6.3. Calendar User Address (RFC5545 section 4.3.3) 474 Description: iCalendar CAL-ADDRESS property values are represented 475 by the ICAL:cal-address XML element. The content of the element 476 is a URI. 478 XML Definition: Appendix A # 3.3.3 480 3.6.4. Date (RFC5545 section 4.3.4) 482 Description: iCalendar DATE property values are represented by the 483 ICAL:date XML element. The content of the element is the same 484 date value specified by RFC5545. 486 XML Definition: Appendix A # 3.3.4 488 3.6.5. Date-Time (RFC5545 section 4.3.5) 490 Description: iCalendar DATE-TIME property values are represented by 491 the ICAL:date-time XML element. The content of the element is the 492 same date-time value specified by RFC5545. 494 XML Definition: Appendix A # 3.3.5 496 3.6.6. Duration (RFC5545 section 4.3.6) 498 Description: iCalendar DURATION property values are represented by 499 the ICAL:duration XML element. The content of the element is the 500 same duration value specified by RFC5545. 502 XML Definition: Appendix A # 3.3.6 504 3.6.7. Float (RFC5545 section 4.3.7) 506 Description: iCalendar FLOAT property values are represented by the 507 ICAL:float XML element. The content of the element is a text 508 representation of a floating point number. 510 XML Definition: Appendix A # 3.3.7 512 3.6.8. Integer (RFC5545 section 4.3.8) 514 Description: iCalendar INTEGER property values are represented by 515 the ICAL:integer XML element. The content of the element is a 516 text representation of an integer number. 518 XML Definition: Appendix A # 3.3.8 520 3.6.9. Period of Time (RFC5545 section 4.3.9) 521 Description: iCalendar PERIOD property values are represented by the 522 ICAL:period XML element. The content of the element is the same 523 period value specified by RFC5545. 525 XML Definition: Appendix A # 3.3.9 527 3.6.10. Recurrence Rule (RFC5545 section 4.3.10) 529 Description: iCalendar RECUR property values are represented by the 530 ICAL:recur XML element. The content of the element is child 531 elements representing the various components of a recurrence rule. 533 XML Definition: Appendix A # 3.3.10 535 3.6.11. Text (RFC5545 section 4.3.11) 537 Description: iCalendar TEXT property values are represented by the 538 ICAL:text XML element. The content of the element is simple text. 540 XML Definition: Appendix A # 3.3.11 542 3.6.12. Time (RFC5545 section 4.3.12) 544 Description: iCalendar TIME property values are represented by the 545 ICAL:time XML element. The content of the element is three child 546 elements representing the hour, minute and second values in the 547 time. In addition, an XML attribute is used to indicate whether 548 the time value represents a UTC based time (represented by a 549 trailing "Z" in the iCalendar value). 551 XML Definition: Appendix A # 3.3.12 553 3.6.13. URI (RFC5545 section 4.3.13) 555 Description: iCalendar URI property values are represented by the 556 ICAL:uri XML element. The content of the element is a URI. 558 XML Definition: Appendix A # 3.3.13 560 3.6.14. UTC Offset (RFC5545 section 4.3.14) 562 Description: iCalendar UTC-OFFSET property values are represented by 563 the ICAL:utc-offset XML element. The content of the element is 564 two or three child elements representing the hour, minute and 565 (optional) second values in the UTC offset. In addition, an XML 566 attribute is used to indicate whether the offset value represents 567 a positive or negative offset. 569 XML Definition: Appendix A # 3.3.14 571 3.7. Extensions 573 iCalendar extension properties and parameters (those with an "X-" 574 prefix in their name) are handled in the same way as other properties 575 and parameters: the property or parameter is represented by an XML 576 element with the same name, but in lowercase. e.g., the "X-FOO" 577 property in iCalendar turns into the ICAL:x-foo element in XML. 579 4. Converting from XML into iCalendar 581 When converting component, property and parameter values, the names 582 SHOULD be converted to uppercase. Although iCalendar names are case 583 insensitive, common practice is to keep them all uppercase following 584 the actual definitions in [RFC5545]. 586 Backslash escaping and line folding MUST be applied to the resulting 587 iCalendar data as required by [RFC5545]. 589 4.1. Converting XML Extensions into iCalendar 591 XML extensions are converted back to iCalendar in one of two ways, 592 depending on whether the extensions are in the iCalendar XML 593 namespace, or in an external namespace. 595 Extensions that are part of the iCalendar XML namespace MUST have 596 element names that being with "x-", and will be converted back to the 597 equivalent extension property in iCalendar. For example, the "x-foo" 598 element will convert to the "X-FOO" iCalendar property. 600 Extensions that are in a namespace other than the iCalendar XML 601 namespace SHOULD be preserved in the iCalendar representation using 602 the XML iCalendar property described in Section 4.2. 604 4.2. The XML property for iCalendar 606 This section describes an extension property for iCalendar, as 607 covered in section 8.2.3 of [RFC5545]. 609 Property name: XML 611 Purpose: To embed XML-encoded calendar data in the iCalendar format. 613 Value type: A single text value. 615 Property parameters: None allowed. 617 Conformance: The property can appear on any iCalendar component. 619 Description: The value of this property is an XML element. The XML 620 property MUST NOT be used to contain properties that are already 621 defined in iCalendar, or properties that use the "X-" iCalendar 622 extension property syntax. Since all elements in the 623 urn:ietf:params:xml:ns:icalendar-2.0 namespace convert to a well- 624 defined iCalendar object, the elements in this property MUST NOT be 625 in the urn:ietf:params:xml:ns:icalendar-2.0 namespace. The XML 626 element which is the value of this property MUST have an XML 627 namespace declaration. 629 There can be more than one XML property present for a given iCalendar 630 object. The ordering of XML properties is not preserved in the 631 conversion between XML and iCalendar. 633 Format definition: This property is defined by the following 634 notation: 636 xml = "XML:" text CRLF 638 Example: The following is an example of an iCalendar event with a 639 location embedded in KML markup inside the XML property. 641 BEGIN:VCALENDAR 642 CALSCALE:GREGORIAN 643 PRODID:-//Example Inc.//Example Calendar//EN 644 VERSION:2.0 645 BEGIN:VEVENT 646 DTSTAMP:20080205T191224Z 647 DTSTART:20081006 648 SUMMARY:Planning meeting 649 UID:4088E990AD89CB3DBB484909 650 XML:... 651 END:VEVENT 652 END:VCALENDAR 654 5. Security Considerations 656 This extension does not introduce any new security concerns than 657 those already described in iCalendar. 659 6. IANA Considerations 661 This document defines a new URN to identify a new XML namespace for 662 iCalendar data. The URN conforms to a registry mechanism described 663 in [RFC3688]. 665 This document defines a new media type. The registration is in 666 Section 6.2. 668 This document defines a new property for iCalendar. The registration 669 is in Section 4.2. 671 6.1. Namespace Registration 673 Registration request for the iCalendar namespace: 675 URI: urn:ietf:params:xml:ns:icalendar-2.0 677 Registrant Contact: See the "Authors' Addresses" section of this 678 document. 680 XML: None. Namespace URIs do not represent an XML specification. 682 6.2. Media Type 684 This section defines the MIME media type for use with iCalendar in 685 XML data. 687 To: ietf-types@iana.org 689 Subject: Registration of media type application/xml+calendar 691 Type name: application 693 Subtype name: xml+calendar 695 Required parameters: none 697 Optional parameters: charset, method, component and optinfo as 698 defined for the text/calendar media type 700 Encoding considerations: iCalendar data is typically UTF-8 and thus 701 the XML representation will follow that. As a result, for 7-bit 702 transports, data in UTF-8 MUST be encoded in quoted-printable or 703 base64. 705 Security considerations: See Section 5. 707 Interoperability considerations: This media type provides an 708 alternative syntax to iCalendar data based on XML. 710 Published specification: This specification. 712 Applications which use this media type: Applications that currently 713 make use of the text/calendar media type can use this as an 714 alternative. 716 Additional information: 718 Magic number(s): None 720 File extension(s): XML data should use "xml" as the file 721 extension. 723 Macintosh file type code(s): None specified. 725 Person & email address to contact for further information: See the 726 "Author's Address" section of this document. 728 Intended usage: COMMON 730 Restrictions on usage: There are no restrictions on where this media 731 type can be used. 733 Author: See the "Author's Address" section of this document. 735 Change controller: IETF 737 7. Acknowledgments 739 This specification originated from the work of the XML technical 740 committee of the Calendaring and Scheduling Consortium. 742 8. Normative References 744 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 745 Requirement Levels", BCP 14, RFC 2119, March 1997. 747 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 748 January 2004. 750 [RFC5545] Desruisseaux, B., "Internet Calendaring and Scheduling 751 Core Object Specification (iCalendar)", RFC 5545, 752 September 2009. 754 Appendix A. Relax NG Schema 756 Below is a Relax NG schema for iCalendar in XML. This schema uses 757 the compact notation of Relax NG. The numeric section numbers given 758 in the comments refer to section in [RFC5545]. The ordering of 759 elements follows the section ordering of [RFC5545]. 761 The Relax NG compact notation "?" operator is used to indicate an 762 unordered list of items. However, that operator, as defined, allows 763 "mixing" each element that it operates on at any depth within the 764 other elements, rather than just allowing "mixing" of siblings only. 765 As a result, the schema provided allows certain constructs that are 766 not allowed in iCalendar. Given that there is no sibling-only 767 unordered list operator in RelaxNG, this is the best representation 768 that can be given. 770 # Relax NG Schema for iCalendar in XML 772 default namespace = "urn:ietf:params:xml:ns:icalendar-2.0" 774 # 3.2 Property Parameters 776 # 3.2.1 Alternate Text Representation 778 altrepparam = element altrep { value-uri } 780 # 3.2.2 Common Name 782 cnparam = element cn { text } 784 # 3.2.3 Calendar User Type 786 cutypeparam = element cutype { 787 "INDIVIDUAL" | 788 "GROUP" | 789 "RESOURCE" | 790 "ROOM" | 791 "UNKNOWN" 792 } 794 # 3.2.4 Delegators 796 delfromparam = element delegated-from { value-cal-address+ } 798 # 3.2.5 Delegatees 800 deltoparam = element delegated-to { value-cal-address+ } 802 # 3.2.6 Directory Entry Reference 804 dirparam = element dir { value-uri } 805 # 3.2.7 Inline Encoding 807 encodingparam = element encoding { 808 "8BIT" | 809 "BASE64" 810 } 812 # 3.2.8 Format Type 814 fmttypeparam = element fmttype { text } 816 # 3.2.9 Free/Busy Time Type 818 fbtypeparam = element fbtype { 819 "FREE" | 820 "BUSY" | 821 "BUSY-UNAVAILABLE" | 822 "BUSY-TENTATIVE" 823 } 825 # 3.2.10 Language 827 languageparam = element language { text } 829 # 3.2.11 Group or List Membership 831 memberparam = element member { value-cal-address+ } 833 # 3.2.12 Participation Status 835 partstatparam = element partstat { 836 type-partstat-event | 837 type-partstat-todo | 838 type-partstat-jour 839 } 841 type-partstat-event = ( 842 "NEEDS-ACTION" | 843 "ACCEPTED" | 844 "DECLINED" | 845 "TENTATIVE" | 846 "DELEGATED" 847 ) 849 type-partstat-todo = ( 850 "NEEDS-ACTION" | 851 "ACCEPTED" | 852 "DECLINED" | 853 "TENTATIVE" | 854 "DELEGATED" | 855 "COMPLETED" | 856 "IN-PROCESS" 857 ) 859 type-partstat-jour = ( 860 "NEEDS-ACTION" | 861 "ACCEPTED" | 862 "DECLINED" 863 ) 865 # 3.2.13 Recurrence Identifier Range 867 rangeparam = element range { 868 "THISANDFUTURE" 869 } 871 # 3.2.14 Alarm Trigger Relationship 873 trigrelparam = element related { 874 "START" | 875 "END" 876 } 878 # 3.2.15 Relationship Type 880 reltypeparam = element reltype { 881 "PARENT" | 882 "CHILD" | 883 "SIBLING" 884 } 886 # 3.2.16 Participation Role 888 roleparam = element role { 889 "CHAIR" | 890 "REQ-PARTICIPANT" | 891 "OPT-PARTICIPANT" | 892 "NON-PARTICIPANT" 893 } 895 # 3.2.17 RSVP Expectation 897 rsvpparam = element rsvp { 898 "TRUE" | 899 "FALSE" 901 } 903 # 3.2.18 Sent By 905 sentbyparam = element sent-by { value-cal-address } 907 # 3.2.19 Time Zone Identifier 909 tzidparam = element tzid { text } 911 # 3.3 Property Value Data Types 913 # 3.3.1 BINARY 915 value-binary = element binary { text } 917 # 3.3.2 BOOLEAN 919 value-boolean = element boolean { 920 ("TRUE" | "FALSE") 921 } 923 # 3.3.3 CAL-ADDRESS 925 value-cal-address = element cal-address { text } 927 # 3.3.4 DATE 929 value-date = element date { 930 text 931 } 933 # 3.3.5 DATE-TIME 935 value-date-time = element date-time { 936 text 937 } 939 # 3.3.6 DURATION 941 value-duration = element duration { 942 text 943 } 945 # 3.3.7 FLOAT 947 value-float = element float { text } 948 # 3.3.8 INTEGER 950 value-integer = element integer { text } 952 # 3.3.9 PERIOD 954 value-period = element period { 955 text 956 } 958 # 3.3.10 RECUR 960 value-recur = element recur { 961 type-freq, 962 (type-until | type-count)?, 963 element interval { text }?, 964 element bysecond { text }*, 965 element byminute { text }*, 966 element byhour { text }*, 967 type-byday*, 968 type-bymonthday*, 969 type-byyearday*, 970 type-byweekno*, 971 element bymonth { text }*, 972 type-bysetpos*, 973 element wkst { type-weekday }? 974 } 976 type-freq = element freq { 977 "SECONDLY" | 978 "MINUTELY" | 979 "HOURLY" | 980 "DAILY" | 981 "WEEKLY" | 982 "MONTHLY" | 983 "YEARLY" 984 } 986 type-until = element until { 987 type-date | 988 type-date-time 989 } 991 type-count = element count { text } 993 type-weekday = ( 994 "SU" | 995 "MO" | 996 "TU" | 997 "WE" | 998 "TH" | 999 "FR" | 1000 "SA" 1001 ) 1003 type-byday = element byday { 1004 element ordwk { 1005 text 1006 }?, 1007 element weekday { type-weekday } 1008 } 1010 type-bymonthday = element bymonthday { 1011 text 1012 } 1014 type-byyearday = element byyearday { 1015 text 1016 } 1018 type-byweekno = element byweekno { 1019 text 1020 } 1022 type-bysetpos = element bysetpos { 1023 text 1024 } 1026 # 3.3.11 TEXT 1028 value-text = element text { text } 1030 # 3.3.12 TIME 1032 value-time = element time { 1033 attribute utc { "yes" | "no" }, 1034 element hour { text }, 1035 element minute { text }, 1036 element second { text } 1037 } 1039 # 3.3.13 URI 1041 value-uri = element uri { text } 1043 # 3.3.14 UTC-OFFSET 1044 value-utc-offset = element utc-offset { 1045 attribute sign { "+" | "-" }, 1046 element hour { text }, 1047 element minute { text }, 1048 element second { text }? 1049 } 1051 # 3.4 iCalendar Stream 1053 start = element icalendar { vcalendar+ } 1055 # 3.6 Calendar Components 1057 vcalendar = element vcalendar { 1058 type-calprops, 1059 type-component 1060 } 1062 type-calprops = element properties { 1063 property-prodid & 1064 property-version & 1065 property-calscale? & 1066 property-method? 1067 } 1069 type-component = element components { 1070 ( 1071 component-vevent | 1072 component-vtodo | 1073 component-vjournal | 1074 component-vfreebusy | 1075 component-vtimezone 1076 )* 1077 } 1079 # 3.6.1 Event Component 1081 component-vevent = element vevent { 1082 type-eventprop, 1083 element components { 1084 component-valarm+ 1085 }? 1086 } 1088 type-eventprop = element properties { 1089 property-dtstamp & 1090 property-dtstart & 1091 property-uid & 1093 property-class? & 1094 property-created? & 1095 property-description? & 1096 property-geo? & 1097 property-last-mod? & 1098 property-location? & 1099 property-organizer? & 1100 property-priority? & 1101 property-seq? & 1102 property-status-event? & 1103 property-summary? & 1104 property-transp? & 1105 property-url? & 1106 property-recurid? & 1108 property-rrule? & 1110 (property-dtend | property-duration)? & 1112 property-attach* & 1113 property-attendee* & 1114 property-categories* & 1115 property-comment* & 1116 property-contact* & 1117 property-exdate* & 1118 property-rstatus* & 1119 property-related* & 1120 property-resources* & 1121 property-rdate* 1122 } 1124 # 3.6.2 To-do Component 1126 component-vtodo = element vtodo { 1127 type-todoprop, 1128 element components { 1129 component-valarm+ 1130 }? 1131 } 1133 type-todoprop = element properties { 1134 property-dtstamp & 1135 property-uid & 1137 property-class? & 1138 property-completed? & 1139 property-created? & 1140 property-description? & 1141 property-geo? & 1142 property-last-mod? & 1143 property-location? & 1144 property-organizer? & 1145 property-percent? & 1146 property-priority? & 1147 property-recurid? & 1148 property-seq? & 1149 property-status-todo? & 1150 property-summary? & 1151 property-url? & 1153 property-rrule? & 1155 ( 1156 (property-dtstart?, property-dtend? ) | 1157 (property-dtstart, property-duration)? 1158 ) & 1160 property-attach* & 1161 property-attendee* & 1162 property-categories* & 1163 property-comment* & 1164 property-contact* & 1165 property-exdate* & 1166 property-rstatus* & 1167 property-related* & 1168 property-resources* & 1169 property-rdate* 1170 } 1172 # 3.6.3 Journal Component 1174 component-vjournal = element vjournal { 1175 type-jourprop 1176 } 1178 type-jourprop = element properties { 1179 property-dtstamp & 1180 property-uid & 1182 property-class? & 1183 property-created? & 1184 property-dtstart? & 1185 property-last-mod? & 1186 property-organizer? & 1187 property-recurid? & 1188 property-seq? & 1189 property-status-jour? & 1190 property-summary? & 1191 property-url? & 1193 property-rrule? & 1195 property-attach* & 1196 property-attendee* & 1197 property-categories* & 1198 property-comment* & 1199 property-contact* & 1200 property-description? & 1201 property-exdate* & 1202 property-related* & 1203 property-rdate* & 1204 property-rstatus* 1205 } 1207 # 3.6.4 Free/Busy Component 1209 component-vfreebusy = element vfreebusy { 1210 type-fbprop 1211 } 1213 type-fbprop = element properties { 1214 property-dtstamp & 1215 property-uid & 1217 property-contact? & 1218 property-dtstart? & 1219 property-dtend? & 1220 property-duration? & 1221 property-organizer? & 1222 property-url? & 1224 property-attendee* & 1225 property-comment* & 1226 property-freebusy* & 1227 property-rstatus* 1228 } 1230 # 3.6.5 Time Zone Component 1232 component-vtimezone = element vtimezone { 1233 element properties { 1234 property-tzid & 1235 property-last-mod? & 1236 property-tzuurl? 1237 }, 1238 element components { 1239 (component-standard | component-daylight) & 1240 component-standard* & 1241 component-daylight* 1242 } 1243 } 1245 component-standard = element standard { 1246 type-tzprop 1247 } 1249 component-daylight = element daylight { 1250 type-tzprop 1251 } 1253 type-tzprop = element properties { 1254 property-dtstart & 1255 property-tzoffsetto & 1256 property-tzoffsetfrom & 1258 property-rrule? & 1260 property-comment* & 1261 property-rdate* & 1262 property-tzname* 1263 } 1265 # 3.6.6 Alarm Component 1267 component-valarm = element valarm { 1268 audioprop | dispprop | emailprop 1269 } 1271 type-audioprop = element properties { 1272 property-action & 1273 property-trigger & 1275 (property-duration, property-repeat)? & 1277 property-attach? 1278 } 1280 type-dispprop = element properties { 1281 property-action & 1282 property-description & 1283 property-trigger & 1284 property-summary & 1286 property-attendee+ & 1288 (property-duration, property-repeat)? & 1290 property-attach* 1291 } 1293 type-emailprop = element properties { 1294 property-action & 1295 property-description & 1296 property-trigger & 1298 (property-duration, property-repeat)? 1299 } 1301 # 3.7 Calendar Properties 1303 # 3.7.1 Calendar Scale 1305 property-calscale = element calscale { 1307 element parameters { empty }?, 1309 element text { "GREGORIAN" } 1310 } 1312 # 3.7.2 Method 1314 property-method = element method { 1316 element parameters { empty }?, 1318 value-text 1319 } 1321 # 3.7.3 Product Identifier 1323 property-prodid = element prodid { 1325 element parameters { empty }?, 1327 value-text 1328 } 1330 # 3.7.4 Version 1331 property-version = element version { 1333 element parameters { empty }?, 1335 value-text 1336 } 1338 # 3.8 Component Properties 1340 # 3.8.1 Descriptive Component Properties 1342 # 3.8.1.1 Attachment 1344 property-attach = element attach { 1346 element parameters { 1347 fmttypeparam? & 1348 encodingparam? 1349 }?, 1351 value-uri | value-binary 1352 } 1354 # 3.8.1.2 Categories 1356 property-categories = element categories { 1358 element parameters { 1359 languageparam? & 1360 }?, 1362 value-text+ 1363 } 1365 # 3.8.1.3 Classification 1367 property-class = element class { 1369 element parameters { empty }?, 1371 element text { 1372 "PUBLIC" | 1373 "PRIVATE" | 1374 "CONFIDENTIAL" 1375 } 1376 } 1378 # 3.8.1.4 Comment 1379 property-comment = element comment { 1381 element parameters { 1382 altrepparam? & 1383 languageparam? 1384 }?, 1386 value-text 1387 } 1389 # 3.8.1.5 Description 1391 property-description = element description { 1393 element parameters { 1394 altrepparam? & 1395 languageparam? 1396 }?, 1398 value-text 1399 } 1401 # 3.8.1.6 Geographic Position 1403 property-geo = element geo { 1405 element parameters { empty }?, 1407 element value { 1408 element latitude { text }, 1409 element longitude { text } 1410 } 1411 } 1413 # 3.8.1.7 Location 1415 property-location = element location { 1417 element parameters { 1418 altrepparam? & 1419 languageparam? 1420 }?, 1422 value-text 1423 } 1425 # 3.8.1.8 Percent Complete 1426 property-percent = element percent-complete { 1428 element parameters { empty }?, 1430 value-integer 1431 } 1433 # 3.8.1.9 Priority 1435 property-priority = element priority { 1437 element parameters { empty }?, 1439 value-integer 1440 } 1442 # 3.8.1.10 Resources 1444 property-resources = element resources { 1446 element parameters { 1447 altrepparam? & 1448 languageparam? 1449 }?, 1451 value-text+ 1452 } 1454 # 3.8.1.11 Status 1456 property-status-event = element status { 1458 element parameters { empty }?, 1460 element text { 1461 "TENTATIVE" | 1462 "CONFIRMED" | 1463 "CANCELLED" 1464 } 1465 } 1467 property-status-todo = element status { 1469 element parameters { empty }?, 1471 element text { 1472 "NEEDS-ACTION" | 1473 "COMPLETED" | 1474 "IN-PROCESS" | 1475 "CANCELLED" 1476 } 1477 } 1479 property-status-jour = element status { 1481 element parameters { empty }?, 1483 element text { 1484 "DRAFT" | 1485 "FINAL" | 1486 "CANCELLED" 1487 } 1488 } 1490 # 3.8.1.12 Summary 1492 property-summary = element summary { 1494 element parameters { 1495 altrepparam? & 1496 languageparam? 1497 }?, 1499 value-text 1500 } 1502 # 3.8.2 Date and Time Component Properties 1504 # 3.8.2.1 Date/Time Completed 1506 property-completed = element completed { 1508 element parameters { empty }?, 1510 value-date-time 1511 } 1513 # 3.8.2.2 Date/Time End 1515 property-dtend = element dtend { 1517 element parameters { 1518 tzidparam? 1519 }?, 1521 value-date-time | 1522 value-date 1523 } 1525 # 3.8.2.3 Date/Time Due 1527 property-due = element due { 1529 element parameters { 1530 tzidparam? 1531 }?, 1533 value-date-time | 1534 value-date 1535 } 1537 # 3.8.2.4 Date/Time Start 1539 property-dtstart = element dtstart { 1541 element parameters { 1542 tzidparam? 1543 }?, 1545 value-date-time | 1546 value-date 1547 } 1549 # 3.8.2.5 Duration 1551 property-duration = element duration { 1553 element parameters { empty }?, 1555 value-duration 1556 } 1558 # 3.8.2.6 Free/Busy Time 1560 property-freebusy = element freebusy { 1562 element parameters { 1563 fbtypeparam? 1564 }?, 1566 value-period+ 1567 } 1568 # 3.8.2.7 Time Transparency 1570 property-transp = element transp { 1572 element parameters { empty }?, 1574 element text { 1575 "OPAQUE" | 1576 "TRANSPARENT" 1577 } 1578 } 1580 # 3.8.3 Time Zone Component Properties 1582 # 3.8.3.1 Time Zone Identifier 1584 property-tzid = element tzid { 1586 element parameters { empty }?, 1588 value-text 1589 } 1591 # 3.8.3.2 Time Zone Name 1593 property-tzname = element tzname { 1595 element parameters { 1596 languageparam? 1597 }?, 1599 value-text 1600 } 1602 # 3.8.3.3 Time Zone Offset From 1604 property-tzoffsetfrom = element tzoffsetfrom { 1606 element parameters { empty }?, 1608 value-utc-offset 1609 } 1611 # 3.8.3.4 Time Zone Offset To 1613 property-tzoffsetto = element tzoffsetto { 1615 element parameters { empty }?, 1616 value-utc-offset 1617 } 1619 # 3.8.3.5 Time Zone URL 1621 property-tzurl = element tzurl { 1623 element parameters { empty }?, 1625 value-uri 1626 } 1628 # 3.8.4 Relationship Component Properties 1630 # 3.8.4.1 Attendee 1632 property-attendee = element attendee { 1634 element parameters { 1635 cutypeparam? & 1636 memberparam? & 1637 roleparam? & 1638 partstatparam? & 1639 rsvpparam? & 1640 deltoparam? & 1641 delfromparam? & 1642 sentbyparam? & 1643 cnparam? & 1644 dirparam? & 1645 languageparam? 1646 }?, 1648 value-cal-address 1649 } 1651 # 3.8.4.2 Contact 1653 property-contact = element contact { 1655 element parameters { 1656 altrepparam? & 1657 languageparam? 1658 }?, 1660 value-text 1661 } 1663 # 3.8.4.3 Organizer 1664 property-organizer = element organizer { 1666 element parameters { 1667 cnparam? & 1668 dirparam? & 1669 sentbyparam? & 1670 languageparam? 1671 }?, 1673 value-cal-address 1674 } 1676 # 3.8.4.4 Recurrence ID 1678 property-recurid = element recurrence-id { 1680 element parameters { 1681 tzidparam? & 1682 rangeparam? 1683 }?, 1685 value-date-time | 1686 value-date 1687 } 1689 # 3.8.4.5 Related-To 1691 property-related = element related-to { 1693 element parameters { 1694 reltypeparam? 1695 }?, 1697 value-text 1698 } 1700 # 3.8.4.6 Uniform Resource Locator 1702 property-url = element url { 1704 element parameters { empty }?, 1706 value-uri 1707 } 1709 # 3.8.4.7 Unique Identifier 1711 property-uid = element uid { 1712 element parameters { empty }?, 1714 value-text 1715 } 1717 # 3.8.5 Recurrence Component Properties 1719 # 3.8.5.1 Exception Date/Times 1721 property-exdate = element exdate { 1723 element parameters { 1724 tzidparam? 1725 }?, 1727 value-date-time+ | 1728 value-date+ 1729 } 1731 # 3.8.5.2 Recurrence Date/Times 1733 property-rdate = element rdate { 1735 element parameters { 1736 tzidparam? 1737 }?, 1739 value-date-time+ | 1740 value-date+ | 1741 value-period+ 1742 } 1744 # 3.8.5.3 Recurrence Rule 1746 property-rrule = element rrule { 1748 element parameters { empty }?, 1750 value-recur 1751 } 1753 # 3.8.6 Alarm Component Properties 1755 # 3.8.6.1 Action 1757 property-action = element action { 1759 element parameters { empty }?, 1760 element text { 1761 "AUDIO" | 1762 "DISPLAY" | 1763 "EMAIL" 1764 } 1765 } 1767 # 3.8.6.2 Repeat Count 1769 property-repeat = element repeat { 1771 element parameters { empty }?, 1773 value-integer 1774 } 1776 # 3.8.6.3 Trigger 1778 property-repeat = element repeat { 1780 ( 1781 element parameters { 1782 trigrelparam? 1783 }?, 1785 value-duration 1786 ) | 1787 ( 1788 element parameters { empty }?, 1790 value-date-time 1791 ) 1792 } 1794 # 3.8.7 Change Management Component Properties 1796 # 3.8.7.1 Date/Time Created 1798 property-created = element created { 1800 element parameters { empty }?, 1802 value-date-time 1803 } 1805 # 3.8.7.2 Date/Time Stamp 1807 property-dtstamp = element dtstamp { 1808 element parameters { empty }?, 1810 value-date-time 1811 } 1813 # 3.8.7.3 Last Modified 1815 property-last-mod = element last-modified { 1817 element parameters { empty }?, 1819 value-date-time 1820 } 1822 # 3.8.7.4 Sequence Number 1824 property-seq = element sequence { 1826 element parameters { empty }?, 1828 value-integer 1829 } 1831 # 3.8.8 Miscellaneous Component Properties 1833 # 3.8.8.3 Request Status 1835 property-rstatus = element request-status { 1837 element parameters { 1838 languageparam? 1839 }?, 1841 element value { 1842 element code { text }, 1843 element description { text }, 1844 element data { text }? 1845 } 1846 } 1848 Appendix B. XML Stylesheet for conversion to iCalendar 1850 TO DO 1852 Appendix C. Example 1854 Below is some example iCalendar data and its representation in XML as 1855 defined by this specification. 1857 C.1. iCalendar Data 1859 BEGIN:VCALENDAR 1860 CALSCALE:GREGORIAN 1861 PRODID:-//Example Inc.//Example Calendar//EN 1862 VERSION:2.0 1863 BEGIN:VEVENT 1864 DTSTAMP:20080205T191224Z 1865 DTSTART:20081006 1866 SUMMARY:Planning meeting 1867 UID:4088E990AD89CB3DBB484909 1868 END:VEVENT 1869 END:VCALENDAR 1871 C.2. XML Data 1873 1874 1875 1876 1877 GREGORIAN 1878 1879 -//Example Inc.//Example Calendar//EN 1880 1881 2.0 1882 1883 1884 1885 1886 1887 1888 200825 1889 191224 1890 1891 1892 1893 1894 2008106 1895 1896 1897 1898 Planning meeting 1899 1900 1901 4088E990AD89CB3DBB484909 1902 1903 1904 1905 1906 1907 1909 Appendix D. Change History (to be removed prior to publication as an 1910 RFC) 1912 Changes from -00: 1914 1. Changed 2445bis references to RFC5545. 1916 2. Added a version number to the XML namespace for iCalendar. 1918 3. Changed the values for the date, date-time, period, and duration 1919 elements to exactly match the values specified in RFC5545. 1920 Previously these were broken out into separate elements for day, 1921 month, year, etc. 1923 4. Added specification for XML property in iCalendar. 1925 Authors' Addresses 1927 Cyrus Daboo 1928 Apple Inc. 1929 1 Infinite Loop 1930 Cupertino, CA 95014 1931 USA 1933 EMail: cyrus@daboo.name 1934 URI: http://www.apple.com/ 1936 Mike Douglass 1937 Rensselaer Polytechnic Institute 1938 110 8th Street 1939 Troy, NY 12180 1940 USA 1942 EMail: douglm@rpi.edu 1943 URI: http://www.rpi.edu/ 1945 Steven Lees 1946 Microsoft Corporation 1947 One Microsoft Way 1948 Redmond, WA 98052 1949 USA 1951 EMail: Steven.Lees@microsoft.com 1952 URI: http://www.microsoft.com/