idnits 2.17.1 draft-daboo-et-al-icalendar-in-xml-04.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 (May 26, 2010) is 5078 days in the past. Is this intentional? -- Found something which looks like a code comment -- if you have code sections in the document, please surround them with '' and '' lines. Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) No issues found here. Summary: 0 errors (**), 0 flaws (~~), 2 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group C. Daboo 3 Internet-Draft Apple, Inc. 4 Intended status: Standards Track M. Douglass 5 Expires: November 27, 2010 RPI 6 S. Lees 7 Microsoft 8 May 26, 2010 10 xCal: The XML format for iCalendar 11 draft-daboo-et-al-icalendar-in-xml-04 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 November 27, 2010. 34 Copyright Notice 36 Copyright (c) 2010 IETF Trust and the persons identified as the 37 document authors. All rights reserved. 39 This document is subject to BCP 78 and the IETF Trust's Legal 40 Provisions Relating to IETF Documents 41 (http://trustee.ietf.org/license-info) in effect on the date of 42 publication of this document. Please review these documents 43 carefully, as they describe your rights and restrictions with respect 44 to this document. Code Components extracted from this document must 45 include Simplified BSD License text as described in Section 4.e of 46 the Trust Legal Provisions and are provided without warranty as 47 described in the Simplified BSD License. 49 Table of Contents 51 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 52 2. Conventions Used in This Document . . . . . . . . . . . . . . 4 53 3. Converting from iCalendar to xCal . . . . . . . . . . . . . . 4 54 3.1. Pre-processing . . . . . . . . . . . . . . . . . . . . . . 5 55 3.2. iCalendar stream (RFC5545 section 3.4) . . . . . . . . . . 5 56 3.3. Components (RFC5545 section 3.6) . . . . . . . . . . . . . 6 57 3.4. Properties (RFC5545 section 3.7 and 3.8) . . . . . . . . . 7 58 3.4.1. Special Cases for Properties . . . . . . . . . . . . . 8 59 3.4.1.1. Multi-valued Properties . . . . . . . . . . . . . 9 60 3.4.1.2. GEO Property . . . . . . . . . . . . . . . . . . . 9 61 3.4.1.3. REQUEST-STATUS Property . . . . . . . . . . . . . 9 62 3.5. Parameters (RFC5545 section 3.2) . . . . . . . . . . . . . 9 63 3.5.1. VALUE parameter . . . . . . . . . . . . . . . . . . . 11 64 3.6. Values (RFC5545 section 3.3) . . . . . . . . . . . . . . . 11 65 3.6.1. Binary (RFC5545 section 3.3.1) . . . . . . . . . . . . 11 66 3.6.2. Boolean (RFC5545 section 3.3.2) . . . . . . . . . . . 11 67 3.6.3. Calendar User Address (RFC5545 section 3.3.3) . . . . 11 68 3.6.4. Date (RFC5545 section 3.3.4) . . . . . . . . . . . . . 12 69 3.6.5. Date-Time (RFC5545 section 3.3.5) . . . . . . . . . . 12 70 3.6.6. Duration (RFC5545 section 3.3.6) . . . . . . . . . . . 12 71 3.6.7. Float (RFC5545 section 3.3.7) . . . . . . . . . . . . 12 72 3.6.8. Integer (RFC5545 section 3.3.8) . . . . . . . . . . . 12 73 3.6.9. Period of Time (RFC5545 section 3.3.9) . . . . . . . . 12 74 3.6.10. Recurrence Rule (RFC5545 section 3.3.10) . . . . . . . 13 75 3.6.11. Text (RFC5545 section 3.3.11) . . . . . . . . . . . . 13 76 3.6.12. Time (RFC5545 section 3.3.12) . . . . . . . . . . . . 13 77 3.6.13. URI (RFC5545 section 3.3.13) . . . . . . . . . . . . . 13 78 3.6.14. UTC Offset (RFC5545 section 3.3.14) . . . . . . . . . 13 79 3.7. Extensions . . . . . . . . . . . . . . . . . . . . . . . . 14 80 4. Converting from XML into iCalendar . . . . . . . . . . . . . . 14 81 4.1. Converting XML Extensions into iCalendar . . . . . . . . . 14 82 4.2. The XML property for iCalendar . . . . . . . . . . . . . . 14 83 5. Security Considerations . . . . . . . . . . . . . . . . . . . 15 84 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15 85 6.1. Namespace Registration . . . . . . . . . . . . . . . . . . 16 86 6.2. Media Type . . . . . . . . . . . . . . . . . . . . . . . . 16 87 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 17 88 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 17 89 8.1. Normative References . . . . . . . . . . . . . . . . . . . 17 90 8.2. Informative References . . . . . . . . . . . . . . . . . . 18 91 Appendix A. Relax NG Schema . . . . . . . . . . . . . . . . . . . 18 92 Appendix B. XML Stylesheet for conversion to iCalendar . . . . . 40 93 Appendix C. Example . . . . . . . . . . . . . . . . . . . . . . . 40 94 C.1. iCalendar Data . . . . . . . . . . . . . . . . . . . . . . 41 95 C.2. XML Data . . . . . . . . . . . . . . . . . . . . . . . . . 41 96 Appendix D. Change History (to be removed prior to 97 publication as an RFC) . . . . . . . . . . . . . . . 41 99 1. Introduction 101 The iCalendar data format [RFC5545] is a widely deployed interchange 102 format for calendaring and scheduling data. While many applications 103 and services consume and generate calendar data, iCalendar is a 104 specialized format that requires its own parser/generator. In 105 contrast, XML-based formats are widely used for interoperability 106 between applications, and the many tools that generate, parse, and 107 manipulate XML make it easier to work with than iCalendar. 109 The purpose of this specification is to define "xCal", an XML format 110 for iCalendar data. xCal is defined so that iCalendar data to be 111 converted to XML, and then back to iCalendar, without losing any 112 semantic meaning in the data. Anyone creating XML calendar data 113 according to this specification will know that their data can be 114 converted to a valid iCalendar representation as well. 116 Two key design considerations are: 118 Round-tripping (converting an iCalendar instance to XML and back) 119 will give the same result as the starting point. 121 Preserve the semantics of the iCalendar data. While a simple 122 consumer can easily browse the calendar data in XML, a full 123 understanding of iCalendar is still required in order to modify 124 and/or fully comprehend the calendar data. 126 2. Conventions Used in This Document 128 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 129 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 130 document are to be interpreted as described in [RFC2119]. 132 When XML element types in the namespace 133 "urn:ietf:params:xml:ns:icalendar-2.0" are referenced in this 134 document outside of the context of an XML fragment, the string 135 "ICAL:" will be prefixed to the element types. 137 Some examples in this document contain "partial" XML documents used 138 for illustrative purposes. In these examples, three periods "..." 139 are used to indicate a portion of the document that has been removed 140 for compactness. 142 3. Converting from iCalendar to xCal 144 This section describes how iCalendar data is converted to XML using a 145 simple mapping between the iCalendar data model and XML elements. 147 3.1. Pre-processing 149 iCalendar uses a line folding mechanism to limit lines of data to a 150 maximum line length (typically 72 characters) to ensure maximum 151 likelihood of preserving data integrity as it is transported via 152 various means (e.g., email) - see Section 3.1 of [RFC5545]. Prior to 153 converting iCalendar data into XML all folded lines MUST be unfolded. 155 iCalendar data uses an "escape" character sequence for text values 156 and parameter values. When such text elements are converted into XML 157 the escaping MUST be removed. 159 iCalendar uses a base64 encoding for binary data. The base64 160 encoding MUST remain when converted to XML. 162 3.2. iCalendar stream (RFC5545 section 3.4) 164 At the top level of the iCalendar object model is an "iCalendar 165 stream". This object encompasses multiple "iCalendar objects". In 166 XML, the entire stream is contained in the root ICAL:icalendar XML 167 element. 169 An iCalendar stream can contain one or more iCalendar objects. Each 170 iCalendar object, delimited by BEGIN:VCALENDAR and END:VCALENDAR, is 171 enclosed by the ICAL:vcalendar XML element. 173 Example: 175 176 177 178 ... 179 180 182 iCalendar objects are comprised of a set of "components", 183 "properties", "parameters" and "values". A "component" can contain 184 other "components" or "properties". A "property" has a value and 185 optionally a set of "parameters". 187 In xCal, "components" are contained within an ICAL:components XML 188 element. With that element, another ICAL:components element could 189 appear (representing components nested within components) or the 190 ICAL:properties XML element could appear. ICAL:properties is used to 191 encapsulate iCalendar properties. 193 Each iCalendar property will be mapped to its own XML element as 194 described below. Within each of these elements there is an optional 195 ICAL:parameters XML element used to encapsulate any iCalendar 196 parameters. Additionally there will be one or more XML elements 197 representing the value of the iCalendar property. 199 Example: 201 202 203 204 205 ... 206 207 208 ... 209 210 211 213 +------------------+----------------+------------------+ 214 | Item | XML element | XML Definition | 215 +------------------+----------------+------------------+ 216 | iCalendar Stream | ICAL:icalendar | Appendix A # 3.4 | 217 | VCALENDAR | ICAL:vcalendar | Appendix A # 3.6 | 218 +------------------+----------------+------------------+ 220 3.3. Components (RFC5545 section 3.6) 222 Each calendar component in the VCALENDAR object, delimited by BEGIN 223 and END, will be converted to an enclosing XML element with the same 224 name, but in lowercase: 226 +-----------+----------------+--------------------+ 227 | Component | XML element | XML Definition | 228 +-----------+----------------+--------------------+ 229 | VEVENT | ICAL:vevent | Appendix A # 3.6.1 | 230 | VTODO | ICAL:vtodo | Appendix A # 3.6.2 | 231 | VJOURNAL | ICAL:vjournal | Appendix A # 3.6.3 | 232 | VFREEBUSY | ICAL:vfreebusy | Appendix A # 3.6.4 | 233 | VTIMEZONE | ICAL:vtimezone | Appendix A # 3.6.5 | 234 | STANDARD | ICAL:standard | Appendix A # 3.6.5 | 235 | DAYLIGHT | ICAL:daylight | Appendix A # 3.6.5 | 236 | VALARM | ICAL:valarm | Appendix A # 3.6.6 | 237 +-----------+----------------+--------------------+ 239 3.4. Properties (RFC5545 section 3.7 and 3.8) 241 iCalendar properties , whether they apply to the VCALENDAR object or 242 to a component, are handled in a consistent way in the xCal format. 244 iCalendar properties are enclosed in the XML element ICAL:properties. 246 Each invidivual iCalendar property is represented in XML by an 247 element of the same name as the iCalendar property, but in lowercase. 248 For example, the CALSCALE property is represented in XML by the ICAL: 249 calscale element. 251 Example: 253 254 255 256 257 ... 258 ... 259 ... 260 261 262 ... 263 264 265 267 Each property can contain an ICAL:parameters XML element 268 encapsulating any iCalendar parameters associated with the iCalendar 269 property. 271 Each property will contain one or more "value" XML elements as 272 described below representing the value of the iCalendar property. 274 +------------------+-----------------------+-----------------------+ 275 | Property | XML element | XML Definition | 276 +------------------+-----------------------+-----------------------+ 277 | CALSCALE | ICAL:calscale | Appendix A # 3.7.1 | 278 | METHOD | ICAL:method | Appendix A # 3.7.2 | 279 | PRODID | ICAL:prodid | Appendix A # 3.7.3 | 280 | VERSION | ICAL:version | Appendix A # 3.7.4 | 281 | ATTACH | ICAL:attach | Appendix A # 3.8.1.1 | 282 | CATEGORIES | ICAL:categories | Appendix A # 3.8.1.2 | 283 | CLASS | ICAL:class | Appendix A # 3.8.1.3 | 284 | COMMENT | ICAL:comment | Appendix A # 3.8.1.4 | 285 | DESCRIPTION | ICAL:description | Appendix A # 3.8.1.5 | 286 | GEO | ICAL:geo | Appendix A # 3.8.1.6 | 287 | LOCATION | ICAL:location | Appendix A # 3.8.1.7 | 288 | PERCENT-COMPLETE | ICAL:percent-complete | Appendix A # 3.8.1.8 | 289 | PRIORITY | ICAL:priority | Appendix A # 3.8.1.9 | 290 | RESOURCES | ICAL:resources | Appendix A # 3.8.1.10 | 291 | STATUS | ICAL:status | Appendix A # 3.8.1.11 | 292 | SUMMARY | ICAL:summary | Appendix A # 3.8.1.12 | 293 | COMPLETED | ICAL:completed | Appendix A # 3.8.2.1 | 294 | DTEND | ICAL:dtend | Appendix A # 3.8.2.2 | 295 | DUE | ICAL:due | Appendix A # 3.8.2.3 | 296 | DTSTART | ICAL:dtstart | Appendix A # 3.8.2.4 | 297 | DURATION | ICAL:duration | Appendix A # 3.8.2.5 | 298 | FREEBUSY | ICAL:freebusy | Appendix A # 3.8.2.6 | 299 | TRANSP | ICAL:transp | Appendix A # 3.8.2.7 | 300 | TZID | ICAL:tzid | Appendix A # 3.8.3.1 | 301 | TZNAME | ICAL:tzname | Appendix A # 3.8.3.2 | 302 | TZOFFSETFROM | ICAL:tzoffsetfrom | Appendix A # 3.8.3.3 | 303 | TZOFFSETTO | ICAL:tzoffsetto | Appendix A # 3.8.3.4 | 304 | TZURL | ICAL:tzurl | Appendix A # 3.8.3.5 | 305 | ATTENDEE | ICAL:attendee | Appendix A # 3.8.4.1 | 306 | CONTACT | ICAL:contact | Appendix A # 3.8.4.2 | 307 | ORGANIZER | ICAL:organizer | Appendix A # 3.8.4.3 | 308 | RECURRENCE-ID | ICAL:recurrence-id | Appendix A # 3.8.4.4 | 309 | RELATED-TO | ICAL:related-to | Appendix A # 3.8.4.5 | 310 | URL | ICAL:url | Appendix A # 3.8.4.6 | 311 | UID | ICAL:uid | Appendix A # 3.8.4.7 | 312 | EXDATE | ICAL:exdate | Appendix A # 3.8.5.1 | 313 | RDATE | ICAL:rdate | Appendix A # 3.8.5.2 | 314 | RRULE | ICAL:rrule | Appendix A # 3.8.5.3 | 315 | ACTION | ICAL:action | Appendix A # 3.8.6.1 | 316 | REPEAT | ICAL:repeat | Appendix A # 3.8.6.2 | 317 | TRIGGER | ICAL:trigger | Appendix A # 3.8.6.3 | 318 | CREATED | ICAL:created | Appendix A # 3.8.7.1 | 319 | DTSTAMP | ICAL:dtstamp | Appendix A # 3.8.7.2 | 320 | LAST-MODIFIED | ICAL:last-modified | Appendix A # 3.8.7.3 | 321 | SEQUENCE | ICAL:sequence | Appendix A # 3.8.7.4 | 322 | REQUEST-STATUS | ICAL:request-status | Appendix A # 3.8.8.3 | 323 +------------------+-----------------------+-----------------------+ 325 3.4.1. Special Cases for Properties 327 Some properties in iCalendar can contain "structured" value data. 328 This includes lists of "standard" value types, as well as values with 329 specific "fields". In xCal, these "structured" values are 330 represented as separate XML elements in various ways for ease of 331 processing using standard XML tools. 333 3.4.1.1. Multi-valued Properties 335 The following iCalendar properties can have values that consist of a 336 list of "standard" iCalendar values separated by a specific 337 delimiter. In XML these properties are represented by an XML element 338 that contains multiple "value" elements (Section 3.6). 340 +------------+-----------------+-----------------------+ 341 | Property | XML element | XML Definition | 342 +------------+-----------------+-----------------------+ 343 | CATEGORIES | ICAL:categories | Appendix A # 3.8.1.2 | 344 | RESOURCES | ICAL:resources | Appendix A # 3.8.1.10 | 345 | FREEBUSY | ICAL:freebusy | Appendix A # 3.8.2.6 | 346 | EXDATE | ICAL:exdate | Appendix A # 3.8.5.1 | 347 | RDATE | ICAL:rdate | Appendix A # 3.8.5.2 | 348 +------------+-----------------+-----------------------+ 350 3.4.1.2. GEO Property 352 In iCalendar, the GEO property value is defined as a semi-colon 353 separated list of two FLOAT values, the first representing latitude 354 and the second longitude. 356 In xCal, the value for the ICAL:geo element is represented by an 357 ICAL:value element containing an ICAL:latitude element and an ICAL: 358 longitude element, each of which contain text values representing the 359 FLOAT values. See Appendix A # 3.8.1.6. 361 3.4.1.3. REQUEST-STATUS Property 363 In iCalendar, the REQUEST-STATUS property value is defined as a semi- 364 colon separated list of two or three TEXT values. The first 365 represents a code, the second a description, and the third (optional) 366 additional data. 368 In xCal, the value for the ICAL:request-status element is represented 369 by an ICAL:value element containing an ICAL:code element, and iCAL: 370 description element, and optionally and ICAL:data element, each of 371 which contain the corresponding TEXT values. See Appendix A # 372 3.8.8.3. 374 3.5. Parameters (RFC5545 section 3.2) 376 iCalendar parameters are enclosed in the XML element ICAL:parameters 377 which optionally occurs once in each property XML element. 379 Each invidivual iCalendar parameter is represented in xCal by an 380 element of the same name as the iCalendar parameter, but in 381 lowercase. For example, the PARTSTAT parameter is represented in XML 382 by the ICAL:partstat element. 384 Example: 386 387 388 389 ... 390 391 ... 392 393 394 NEEDS-ACTION 395 396 ... 397 398 399 401 Each parameter contains either text, or one or more child XML 402 elements representing iCalendar value types. 404 +----------------+---------------------+---------------------+ 405 | Parameter | XML element | XML Definition | 406 +----------------+---------------------+---------------------+ 407 | ALTREP | ICAL:altrep | Appendix A # 3.2.1 | 408 | CN | ICAL:cn | Appendix A # 3.2.2 | 409 | CUTYPE | ICAL:cutype | Appendix A # 3.2.3 | 410 | DELEGATED-FROM | ICAL:delegated-from | Appendix A # 3.2.4 | 411 | DELEGATED-TO | ICAL:delegated-to | Appendix A # 3.2.5 | 412 | DIR | ICAL:dir | Appendix A # 3.2.6 | 413 | ENCODING | ICAL:encoding | Appendix A # 3.2.7 | 414 | FMTTYPE | ICAL:fmttype | Appendix A # 3.2.8 | 415 | FBTYPE | ICAL:fbtype | Appendix A # 3.2.9 | 416 | LANGUAGE | ICAL:language | Appendix A # 3.2.10 | 417 | MEMBER | ICAL:member | Appendix A # 3.2.11 | 418 | PARTSTAT | ICAL:partstat | Appendix A # 3.2.12 | 419 | RANGE | ICAL:range | Appendix A # 3.2.13 | 420 | RELATED | ICAL:related | Appendix A # 3.2.14 | 421 | RELTYPE | ICAL:reltype | Appendix A # 3.2.15 | 422 | ROLE | ICAL:role | Appendix A # 3.2.16 | 423 | RSVP | ICAL:rsvp | Appendix A # 3.2.17 | 424 | SENT-BY | ICAL:sent-by | Appendix A # 3.2.18 | 425 | TZID | ICAL:tzid | Appendix A # 3.2.19 | 426 +----------------+---------------------+---------------------+ 428 3.5.1. VALUE parameter 430 iCalendar defines a VALUE parameter (Section 3.2.20 of [RFC5545]. 431 This parameter is not mapped to an xCal XML element. Instead, the 432 value type is handled by having different XML elements for each 433 value, and these appear inside of ICAL:property elements. Thus, when 434 converting from iCalendar to XML, any VALUE parameters are skipped. 435 When converting from XML into iCalendar, the appropriate VALUE 436 parameter MUST be included in the iCalendar property if the value 437 type is not the default value type for that property. 439 3.6. Values (RFC5545 section 3.3) 441 iCalendar value types are mapped into XML elements with a matching 442 name in all lowercase. In some cases, iCalendar defines "structured" 443 values and these are mapped into separate child elements in each 444 value element, as described by the simple DTD definitions below. 446 Some properties allow for multiple values and these are represented 447 by separate matching value XML elements. 449 3.6.1. Binary (RFC5545 section 3.3.1) 451 Description: iCalendar BINARY property values are represented by the 452 ICAL:binary XML element. The content of the element is base64 453 encoded data. Whitespace MAY be inserted into the data at any 454 point to "wrap" the data to reasonable line lengths. When 455 converting back to iCalendar the whitespace MUST first be removed. 457 XML Definition: Appendix A # 3.3.1 459 3.6.2. Boolean (RFC5545 section 3.3.2) 461 Description: iCalendar BOOLEAN property values are represented by 462 the ICAL:boolean XML element. The content of the element is text 463 containing either of "TRUE" or "FALSE". 465 XML Definition: Appendix A # 3.3.2 467 3.6.3. Calendar User Address (RFC5545 section 3.3.3) 469 Description: iCalendar CAL-ADDRESS property values are represented 470 by the ICAL:cal-address XML element. The content of the element 471 is a URI. 473 XML Definition: Appendix A # 3.3.3 475 3.6.4. Date (RFC5545 section 3.3.4) 477 Description: iCalendar DATE property values are represented by the 478 ICAL:date XML element. The content of the element is the same 479 date value specified by RFC5545. 481 XML Definition: Appendix A # 3.3.4 483 3.6.5. Date-Time (RFC5545 section 3.3.5) 485 Description: iCalendar DATE-TIME property values are represented by 486 the ICAL:date-time XML element. The content of the element is the 487 same date-time value specified by RFC5545. 489 XML Definition: Appendix A # 3.3.5 491 3.6.6. Duration (RFC5545 section 3.3.6) 493 Description: iCalendar DURATION property values are represented by 494 the ICAL:duration XML element. The content of the element is the 495 same duration value specified by RFC5545. 497 XML Definition: Appendix A # 3.3.6 499 3.6.7. Float (RFC5545 section 3.3.7) 501 Description: iCalendar FLOAT property values are represented by the 502 ICAL:float XML element. The content of the element is a text 503 representation of a floating point number. 505 XML Definition: Appendix A # 3.3.7 507 3.6.8. Integer (RFC5545 section 3.3.8) 509 Description: iCalendar INTEGER property values are represented by 510 the ICAL:integer XML element. The content of the element is a 511 text representation of an integer number. 513 XML Definition: Appendix A # 3.3.8 515 3.6.9. Period of Time (RFC5545 section 3.3.9) 516 Description: iCalendar PERIOD property values are represented by the 517 ICAL:period XML element. The content of the element is the same 518 period value specified by RFC5545. 520 XML Definition: Appendix A # 3.3.9 522 3.6.10. Recurrence Rule (RFC5545 section 3.3.10) 524 Description: iCalendar RECUR property values are represented by the 525 ICAL:recur XML element. The content of the element is child 526 elements representing the various components of a recurrence rule. 528 XML Definition: Appendix A # 3.3.10 530 3.6.11. Text (RFC5545 section 3.3.11) 532 Description: iCalendar TEXT property values are represented by the 533 ICAL:text XML element. The content of the element is simple text. 535 XML Definition: Appendix A # 3.3.11 537 3.6.12. Time (RFC5545 section 3.3.12) 539 Description: iCalendar TIME property values are represented by the 540 ICAL:time XML element. The content of the element is the same 541 time value specified by RFC5545. 543 XML Definition: Appendix A # 3.3.12 545 3.6.13. URI (RFC5545 section 3.3.13) 547 Description: iCalendar URI property values are represented by the 548 ICAL:uri XML element. The content of the element is a URI. 550 XML Definition: Appendix A # 3.3.13 552 3.6.14. UTC Offset (RFC5545 section 3.3.14) 554 Description: iCalendar UTC-OFFSET property values are represented by 555 the ICAL:utc-offset XML element. The content of the element is 556 the same UTC offset value specified by RFC5545. 558 XML Definition: Appendix A # 3.3.14 560 3.7. Extensions 562 iCalendar extension properties and parameters (those with an "X-" 563 prefix in their name) are handled in the same way as other properties 564 and parameters: the property or parameter is represented by an XML 565 element with the same name, but in lowercase. e.g., the "X-FOO" 566 property in iCalendar turns into the ICAL:x-foo element in XML. 568 4. Converting from XML into iCalendar 570 When converting component, property and parameter values, the names 571 SHOULD be converted to uppercase. Although iCalendar names are case 572 insensitive, common practice is to keep them all uppercase following 573 the actual definitions in [RFC5545]. 575 Backslash escaping and line folding MUST be applied to the resulting 576 iCalendar data as required by [RFC5545]. 578 4.1. Converting XML Extensions into iCalendar 580 XML extensions are converted back to iCalendar in one of two ways, 581 depending on whether the extensions are in the iCalendar XML 582 namespace, or in an external namespace. 584 Extensions that are part of the iCalendar XML namespace MUST have 585 element names that being with "x-", and will be converted back to the 586 equivalent extension property in iCalendar. For example, the "x-foo" 587 element will convert to the "X-FOO" iCalendar property. 589 Extensions that are in a namespace other than the iCalendar XML 590 namespace SHOULD be preserved in the iCalendar representation using 591 the XML iCalendar property described in Section 4.2. 593 4.2. The XML property for iCalendar 595 This section describes an extension property for iCalendar, as 596 covered in section 8.2.3 of [RFC5545]. 598 Property name: XML 600 Purpose: To embed XML-encoded calendar data in the iCalendar format. 602 Value type: A single text value. 604 Property parameters: None allowed. 606 Conformance: The property can appear on any iCalendar component. 608 Description: The value of this property is an XML element. The XML 609 property MUST NOT be used to contain properties that are already 610 defined in iCalendar, or properties that use the "X-" iCalendar 611 extension property syntax. Since all elements in the 612 urn:ietf:params:xml:ns:icalendar-2.0 namespace convert to a well- 613 defined iCalendar object, the elements in this property MUST NOT be 614 in the urn:ietf:params:xml:ns:icalendar-2.0 namespace. The XML 615 element which is the value of this property MUST have an XML 616 namespace declaration. 618 There can be more than one XML property present for a given iCalendar 619 object. The ordering of XML properties is not preserved in the 620 conversion between XML and iCalendar. 622 Format definition: This property is defined by the following 623 notation: 625 xml = "XML:" text CRLF 627 Example: The following is an example of an iCalendar event with a 628 location embedded in KML markup inside the XML property. 630 BEGIN:VCALENDAR 631 CALSCALE:GREGORIAN 632 PRODID:-//Example Inc.//Example Calendar//EN 633 VERSION:2.0 634 BEGIN:VEVENT 635 DTSTAMP:20080205T191224Z 636 DTSTART:20081006 637 SUMMARY:Planning meeting 638 UID:4088E990AD89CB3DBB484909 639 XML:... 640 END:VEVENT 641 END:VCALENDAR 643 5. Security Considerations 645 This extension does not introduce any new security concerns than 646 those already described in iCalendar. 648 6. IANA Considerations 650 This document defines a new URN to identify a new XML namespace for 651 iCalendar data. The URN conforms to a registry mechanism described 652 in [RFC3688]. 654 This document defines a new media type. The registration is in 655 Section 6.2. 657 This document defines a new property for iCalendar. The registration 658 is in Section 4.2. 660 6.1. Namespace Registration 662 Registration request for the iCalendar namespace: 664 URI: urn:ietf:params:xml:ns:icalendar-2.0 666 Registrant Contact: See the "Authors' Addresses" section of this 667 document. 669 XML: None. Namespace URIs do not represent an XML specification. 671 6.2. Media Type 673 This section defines the MIME media type for use with iCalendar in 674 XML data. 676 To: ietf-types@iana.org 678 Subject: Registration of media type application/xml+calendar 680 Type name: application 682 Subtype name: calendar+xml 684 Required parameters: none 686 Optional parameters: charset, method, component and optinfo as 687 defined for the text/calendar media type 689 Encoding considerations: iCalendar data is typically UTF-8 and thus 690 the XML representation will follow that. As a result, for 7-bit 691 transports, data in UTF-8 MUST be encoded in quoted-printable or 692 base64. 694 Security considerations: See Section 5. 696 Interoperability considerations: This media type provides an 697 alternative syntax to iCalendar data based on XML. 699 Published specification: This specification. 701 Applications which use this media type: Applications that currently 702 make use of the text/calendar media type can use this as an 703 alternative. 705 Additional information: 707 Magic number(s): None 709 File extension(s): XML data should use "xml" as the file 710 extension. 712 Macintosh file type code(s): None specified. 714 Person & email address to contact for further information: See the 715 "Author's Address" section of this document. 717 Intended usage: COMMON 719 Restrictions on usage: There are no restrictions on where this media 720 type can be used. 722 Author: See the "Author's Address" section of this document. 724 Change controller: IETF 726 7. Acknowledgments 728 This specification originated from the work of the XML technical 729 committee of the Calendaring and Scheduling Consortium. 731 8. References 733 8.1. Normative References 735 [RFC2119] Bradner, S., "Key words for use in RFCs to 736 Indicate Requirement Levels", BCP 14, 737 RFC 2119, March 1997. 739 [RFC3688] Mealling, M., "The IETF XML Registry", 740 BCP 81, RFC 3688, January 2004. 742 [RFC5545] Desruisseaux, B., "Internet Calendaring and 743 Scheduling Core Object Specification 744 (iCalendar)", RFC 5545, September 2009. 746 [W3C.REC-xml-20040204] Bray, T., Maler, E., Paoli, J., Yergeau, F., 747 and C. Sperberg-McQueen, "Extensible Markup 748 Language (XML) 1.0 (Third Edition)", World 749 Wide Web Consortium FirstEdition REC-xml- 750 20040204, February 2004, 751 . 753 8.2. Informative References 755 Appendix A. Relax NG Schema 757 Below is a Relax NG schema for iCalendar in XML. This schema uses 758 the compact notation of Relax NG. The numeric section numbers given 759 in the comments refer to section in [RFC5545]. The ordering of 760 elements follows the section ordering of [RFC5545]. 762 The Relax NG compact notation "?" operator is used to indicate an 763 unordered list of items. However, that operator, as defined, allows 764 "mixing" each element that it operates on at any depth within the 765 other elements, rather than just allowing "mixing" of siblings only. 766 As a result, the schema provided allows certain constructs that are 767 not allowed in iCalendar. Given that there is no sibling-only 768 unordered list operator in RelaxNG, this is the best representation 769 that can be given. 771 # Relax NG Schema for iCalendar in XML 773 default namespace = "urn:ietf:params:xml:ns:icalendar-2.0" 775 # 3.2 Property Parameters 777 # 3.2.1 Alternate Text Representation 779 altrepparam = element altrep { value-uri } 781 # 3.2.2 Common Name 783 cnparam = element cn { text } 785 # 3.2.3 Calendar User Type 787 cutypeparam = element cutype { 788 "INDIVIDUAL" | 789 "GROUP" | 790 "RESOURCE" | 791 "ROOM" | 792 "UNKNOWN" 793 } 795 # 3.2.4 Delegators 797 delfromparam = element delegated-from { value-cal-address+ } 799 # 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 } 806 # 3.2.7 Inline Encoding 808 encodingparam = element encoding { 809 "8BIT" | 810 "BASE64" 811 } 813 # 3.2.8 Format Type 815 fmttypeparam = element fmttype { text } 817 # 3.2.9 Free/Busy Time Type 819 fbtypeparam = element fbtype { 820 "FREE" | 821 "BUSY" | 822 "BUSY-UNAVAILABLE" | 823 "BUSY-TENTATIVE" 824 } 826 # 3.2.10 Language 828 languageparam = element language { text } 830 # 3.2.11 Group or List Membership 832 memberparam = element member { value-cal-address+ } 834 # 3.2.12 Participation Status 836 partstatparam = element partstat { 837 type-partstat-event | 838 type-partstat-todo | 839 type-partstat-jour 840 } 842 type-partstat-event = ( 843 "NEEDS-ACTION" | 844 "ACCEPTED" | 845 "DECLINED" | 846 "TENTATIVE" | 847 "DELEGATED" 848 ) 850 type-partstat-todo = ( 851 "NEEDS-ACTION" | 852 "ACCEPTED" | 853 "DECLINED" | 854 "TENTATIVE" | 855 "DELEGATED" | 856 "COMPLETED" | 857 "IN-PROCESS" 858 ) 860 type-partstat-jour = ( 861 "NEEDS-ACTION" | 862 "ACCEPTED" | 863 "DECLINED" 864 ) 866 # 3.2.13 Recurrence Identifier Range 868 rangeparam = element range { 869 "THISANDFUTURE" 870 } 872 # 3.2.14 Alarm Trigger Relationship 874 trigrelparam = element related { 875 "START" | 876 "END" 877 } 879 # 3.2.15 Relationship Type 881 reltypeparam = element reltype { 882 "PARENT" | 883 "CHILD" | 884 "SIBLING" 885 } 887 # 3.2.16 Participation Role 889 roleparam = element role { 890 "CHAIR" | 891 "REQ-PARTICIPANT" | 892 "OPT-PARTICIPANT" | 893 "NON-PARTICIPANT" 894 } 895 # 3.2.17 RSVP Expectation 897 rsvpparam = element rsvp { 898 "TRUE" | 899 "FALSE" 900 } 902 # 3.2.18 Sent By 904 sentbyparam = element sent-by { value-cal-address } 906 # 3.2.19 Time Zone Identifier 908 tzidparam = element tzid { text } 910 # 3.3 Property Value Data Types 912 # 3.3.1 BINARY 914 value-binary = element binary { text } 916 # 3.3.2 BOOLEAN 918 value-boolean = element boolean { 919 ("TRUE" | "FALSE") 920 } 922 # 3.3.3 CAL-ADDRESS 924 value-cal-address = element cal-address { text } 926 # 3.3.4 DATE 928 value-date = element date { 929 text 930 } 932 # 3.3.5 DATE-TIME 934 value-date-time = element date-time { 935 text 936 } 938 # 3.3.6 DURATION 940 value-duration = element duration { 941 text 942 } 943 # 3.3.7 FLOAT 945 value-float = element float { text } 947 # 3.3.8 INTEGER 949 value-integer = element integer { text } 951 # 3.3.9 PERIOD 953 value-period = element period { 954 text 955 } 957 # 3.3.10 RECUR 959 value-recur = element recur { 960 type-freq, 961 (type-until | type-count)?, 962 element interval { text }?, 963 element bysecond { text }*, 964 element byminute { text }*, 965 element byhour { text }*, 966 type-byday*, 967 type-bymonthday*, 968 type-byyearday*, 969 type-byweekno*, 970 element bymonth { text }*, 971 type-bysetpos*, 972 element wkst { type-weekday }? 973 } 975 type-freq = element freq { 976 "SECONDLY" | 977 "MINUTELY" | 978 "HOURLY" | 979 "DAILY" | 980 "WEEKLY" | 981 "MONTHLY" | 982 "YEARLY" 983 } 985 type-until = element until { 986 type-date | 987 type-date-time 988 } 990 type-count = element count { text } 991 type-weekday = ( 992 "SU" | 993 "MO" | 994 "TU" | 995 "WE" | 996 "TH" | 997 "FR" | 998 "SA" 999 ) 1001 type-byday = element byday { 1002 element ordwk { 1003 text 1004 }?, 1005 element weekday { type-weekday } 1006 } 1008 type-bymonthday = element bymonthday { 1009 text 1010 } 1012 type-byyearday = element byyearday { 1013 text 1014 } 1016 type-byweekno = element byweekno { 1017 text 1018 } 1020 type-bysetpos = element bysetpos { 1021 text 1022 } 1024 # 3.3.11 TEXT 1026 value-text = element text { text } 1028 # 3.3.12 TIME 1030 value-time = element time { text } 1032 # 3.3.13 URI 1034 value-uri = element uri { text } 1036 # 3.3.14 UTC-OFFSET 1038 value-utc-offset = element utc-offset { text } 1039 # 3.4 iCalendar Stream 1041 start = element icalendar { vcalendar+ } 1043 # 3.6 Calendar Components 1045 vcalendar = element vcalendar { 1046 type-calprops, 1047 type-component 1048 } 1050 type-calprops = element properties { 1051 property-prodid & 1052 property-version & 1053 property-calscale? & 1054 property-method? 1055 } 1057 type-component = element components { 1058 ( 1059 component-vevent | 1060 component-vtodo | 1061 component-vjournal | 1062 component-vfreebusy | 1063 component-vtimezone 1064 )* 1065 } 1067 # 3.6.1 Event Component 1069 component-vevent = element vevent { 1070 type-eventprop, 1071 element components { 1072 component-valarm+ 1073 }? 1074 } 1076 type-eventprop = element properties { 1077 property-dtstamp & 1078 property-dtstart & 1079 property-uid & 1081 property-class? & 1082 property-created? & 1083 property-description? & 1084 property-geo? & 1085 property-last-mod? & 1086 property-location? & 1087 property-organizer? & 1088 property-priority? & 1089 property-seq? & 1090 property-status-event? & 1091 property-summary? & 1092 property-transp? & 1093 property-url? & 1094 property-recurid? & 1096 property-rrule? & 1098 (property-dtend | property-duration)? & 1100 property-attach* & 1101 property-attendee* & 1102 property-categories* & 1103 property-comment* & 1104 property-contact* & 1105 property-exdate* & 1106 property-rstatus* & 1107 property-related* & 1108 property-resources* & 1109 property-rdate* 1110 } 1112 # 3.6.2 To-do Component 1114 component-vtodo = element vtodo { 1115 type-todoprop, 1116 element components { 1117 component-valarm+ 1118 }? 1119 } 1121 type-todoprop = element properties { 1122 property-dtstamp & 1123 property-uid & 1125 property-class? & 1126 property-completed? & 1127 property-created? & 1128 property-description? & 1129 property-geo? & 1130 property-last-mod? & 1131 property-location? & 1132 property-organizer? & 1133 property-percent? & 1134 property-priority? & 1135 property-recurid? & 1136 property-seq? & 1137 property-status-todo? & 1138 property-summary? & 1139 property-url? & 1141 property-rrule? & 1143 ( 1144 (property-dtstart?, property-dtend? ) | 1145 (property-dtstart, property-duration)? 1146 ) & 1148 property-attach* & 1149 property-attendee* & 1150 property-categories* & 1151 property-comment* & 1152 property-contact* & 1153 property-exdate* & 1154 property-rstatus* & 1155 property-related* & 1156 property-resources* & 1157 property-rdate* 1158 } 1160 # 3.6.3 Journal Component 1162 component-vjournal = element vjournal { 1163 type-jourprop 1164 } 1166 type-jourprop = element properties { 1167 property-dtstamp & 1168 property-uid & 1170 property-class? & 1171 property-created? & 1172 property-dtstart? & 1173 property-last-mod? & 1174 property-organizer? & 1175 property-recurid? & 1176 property-seq? & 1177 property-status-jour? & 1178 property-summary? & 1179 property-url? & 1181 property-rrule? & 1182 property-attach* & 1183 property-attendee* & 1184 property-categories* & 1185 property-comment* & 1186 property-contact* & 1187 property-description? & 1188 property-exdate* & 1189 property-related* & 1190 property-rdate* & 1191 property-rstatus* 1192 } 1194 # 3.6.4 Free/Busy Component 1196 component-vfreebusy = element vfreebusy { 1197 type-fbprop 1198 } 1200 type-fbprop = element properties { 1201 property-dtstamp & 1202 property-uid & 1204 property-contact? & 1205 property-dtstart? & 1206 property-dtend? & 1207 property-duration? & 1208 property-organizer? & 1209 property-url? & 1211 property-attendee* & 1212 property-comment* & 1213 property-freebusy* & 1214 property-rstatus* 1215 } 1217 # 3.6.5 Time Zone Component 1219 component-vtimezone = element vtimezone { 1220 element properties { 1221 property-tzid & 1223 property-last-mod? & 1224 property-tzuurl? 1225 }, 1226 element components { 1227 (component-standard | component-daylight) & 1228 component-standard* & 1229 component-daylight* 1231 } 1232 } 1234 component-standard = element standard { 1235 type-tzprop 1236 } 1238 component-daylight = element daylight { 1239 type-tzprop 1240 } 1242 type-tzprop = element properties { 1243 property-dtstart & 1244 property-tzoffsetto & 1245 property-tzoffsetfrom & 1247 property-rrule? & 1249 property-comment* & 1250 property-rdate* & 1251 property-tzname* 1252 } 1254 # 3.6.6 Alarm Component 1256 component-valarm = element valarm { 1257 audioprop | dispprop | emailprop 1258 } 1260 type-audioprop = element properties { 1261 property-action & 1262 property-trigger & 1264 (property-duration, property-repeat)? & 1266 property-attach? 1267 } 1269 type-dispprop = element properties { 1270 property-action & 1271 property-description & 1272 property-trigger & 1273 property-summary & 1275 property-attendee+ & 1277 (property-duration, property-repeat)? & 1278 property-attach* 1279 } 1281 type-emailprop = element properties { 1282 property-action & 1283 property-description & 1284 property-trigger & 1286 (property-duration, property-repeat)? 1287 } 1289 # 3.7 Calendar Properties 1291 # 3.7.1 Calendar Scale 1293 property-calscale = element calscale { 1295 element parameters { empty }?, 1297 element text { "GREGORIAN" } 1298 } 1300 # 3.7.2 Method 1302 property-method = element method { 1304 element parameters { empty }?, 1306 value-text 1307 } 1309 # 3.7.3 Product Identifier 1311 property-prodid = element prodid { 1313 element parameters { empty }?, 1315 value-text 1316 } 1318 # 3.7.4 Version 1320 property-version = element version { 1322 element parameters { empty }?, 1324 value-text 1325 } 1326 # 3.8 Component Properties 1328 # 3.8.1 Descriptive Component Properties 1330 # 3.8.1.1 Attachment 1332 property-attach = element attach { 1334 element parameters { 1335 fmttypeparam? & 1336 encodingparam? 1337 }?, 1339 value-uri | value-binary 1340 } 1342 # 3.8.1.2 Categories 1344 property-categories = element categories { 1346 element parameters { 1347 languageparam? & 1348 }?, 1350 value-text+ 1351 } 1353 # 3.8.1.3 Classification 1355 property-class = element class { 1357 element parameters { empty }?, 1359 element text { 1360 "PUBLIC" | 1361 "PRIVATE" | 1362 "CONFIDENTIAL" 1363 } 1364 } 1366 # 3.8.1.4 Comment 1368 property-comment = element comment { 1370 element parameters { 1371 altrepparam? & 1372 languageparam? 1373 }?, 1374 value-text 1375 } 1377 # 3.8.1.5 Description 1379 property-description = element description { 1381 element parameters { 1382 altrepparam? & 1383 languageparam? 1384 }?, 1386 value-text 1387 } 1389 # 3.8.1.6 Geographic Position 1391 property-geo = element geo { 1393 element parameters { empty }?, 1395 element value { 1396 element latitude { text }, 1397 element longitude { text } 1398 } 1399 } 1401 # 3.8.1.7 Location 1403 property-location = element location { 1405 element parameters { 1406 altrepparam? & 1407 languageparam? 1408 }?, 1410 value-text 1411 } 1413 # 3.8.1.8 Percent Complete 1415 property-percent = element percent-complete { 1417 element parameters { empty }?, 1419 value-integer 1420 } 1421 # 3.8.1.9 Priority 1423 property-priority = element priority { 1425 element parameters { empty }?, 1427 value-integer 1428 } 1430 # 3.8.1.10 Resources 1432 property-resources = element resources { 1434 element parameters { 1435 altrepparam? & 1436 languageparam? 1437 }?, 1439 value-text+ 1440 } 1442 # 3.8.1.11 Status 1444 property-status-event = element status { 1446 element parameters { empty }?, 1448 element text { 1449 "TENTATIVE" | 1450 "CONFIRMED" | 1451 "CANCELLED" 1452 } 1453 } 1455 property-status-todo = element status { 1457 element parameters { empty }?, 1459 element text { 1460 "NEEDS-ACTION" | 1461 "COMPLETED" | 1462 "IN-PROCESS" | 1463 "CANCELLED" 1464 } 1465 } 1467 property-status-jour = element status { 1468 element parameters { empty }?, 1470 element text { 1471 "DRAFT" | 1472 "FINAL" | 1473 "CANCELLED" 1474 } 1475 } 1477 # 3.8.1.12 Summary 1479 property-summary = element summary { 1481 element parameters { 1482 altrepparam? & 1483 languageparam? 1484 }?, 1486 value-text 1487 } 1489 # 3.8.2 Date and Time Component Properties 1491 # 3.8.2.1 Date/Time Completed 1493 property-completed = element completed { 1495 element parameters { empty }?, 1497 value-date-time 1498 } 1500 # 3.8.2.2 Date/Time End 1502 property-dtend = element dtend { 1504 element parameters { 1505 tzidparam? 1506 }?, 1508 value-date-time | 1509 value-date 1510 } 1512 # 3.8.2.3 Date/Time Due 1514 property-due = element due { 1515 element parameters { 1516 tzidparam? 1517 }?, 1519 value-date-time | 1520 value-date 1521 } 1523 # 3.8.2.4 Date/Time Start 1525 property-dtstart = element dtstart { 1527 element parameters { 1528 tzidparam? 1529 }?, 1531 value-date-time | 1532 value-date 1533 } 1535 # 3.8.2.5 Duration 1537 property-duration = element duration { 1539 element parameters { empty }?, 1541 value-duration 1542 } 1544 # 3.8.2.6 Free/Busy Time 1546 property-freebusy = element freebusy { 1548 element parameters { 1549 fbtypeparam? 1550 }?, 1552 value-period+ 1553 } 1555 # 3.8.2.7 Time Transparency 1557 property-transp = element transp { 1559 element parameters { empty }?, 1561 element text { 1562 "OPAQUE" | 1563 "TRANSPARENT" 1564 } 1565 } 1567 # 3.8.3 Time Zone Component Properties 1569 # 3.8.3.1 Time Zone Identifier 1571 property-tzid = element tzid { 1573 element parameters { empty }?, 1575 value-text 1576 } 1578 # 3.8.3.2 Time Zone Name 1580 property-tzname = element tzname { 1582 element parameters { 1583 languageparam? 1584 }?, 1586 value-text 1587 } 1589 # 3.8.3.3 Time Zone Offset From 1591 property-tzoffsetfrom = element tzoffsetfrom { 1593 element parameters { empty }?, 1595 value-utc-offset 1596 } 1598 # 3.8.3.4 Time Zone Offset To 1600 property-tzoffsetto = element tzoffsetto { 1602 element parameters { empty }?, 1604 value-utc-offset 1605 } 1607 # 3.8.3.5 Time Zone URL 1609 property-tzurl = element tzurl { 1610 element parameters { empty }?, 1612 value-uri 1613 } 1615 # 3.8.4 Relationship Component Properties 1617 # 3.8.4.1 Attendee 1619 property-attendee = element attendee { 1621 element parameters { 1622 cutypeparam? & 1623 memberparam? & 1624 roleparam? & 1625 partstatparam? & 1626 rsvpparam? & 1627 deltoparam? & 1628 delfromparam? & 1629 sentbyparam? & 1630 cnparam? & 1631 dirparam? & 1632 languageparam? 1633 }?, 1635 value-cal-address 1636 } 1638 # 3.8.4.2 Contact 1640 property-contact = element contact { 1642 element parameters { 1643 altrepparam? & 1644 languageparam? 1645 }?, 1647 value-text 1648 } 1650 # 3.8.4.3 Organizer 1652 property-organizer = element organizer { 1654 element parameters { 1655 cnparam? & 1656 dirparam? & 1657 sentbyparam? & 1658 languageparam? 1659 }?, 1661 value-cal-address 1662 } 1664 # 3.8.4.4 Recurrence ID 1666 property-recurid = element recurrence-id { 1668 element parameters { 1669 tzidparam? & 1670 rangeparam? 1671 }?, 1673 value-date-time | 1674 value-date 1675 } 1677 # 3.8.4.5 Related-To 1679 property-related = element related-to { 1681 element parameters { 1682 reltypeparam? 1683 }?, 1685 value-text 1686 } 1688 # 3.8.4.6 Uniform Resource Locator 1690 property-url = element url { 1692 element parameters { empty }?, 1694 value-uri 1695 } 1697 # 3.8.4.7 Unique Identifier 1699 property-uid = element uid { 1701 element parameters { empty }?, 1703 value-text 1704 } 1705 # 3.8.5 Recurrence Component Properties 1707 # 3.8.5.1 Exception Date/Times 1709 property-exdate = element exdate { 1711 element parameters { 1712 tzidparam? 1713 }?, 1715 value-date-time+ | 1716 value-date+ 1717 } 1719 # 3.8.5.2 Recurrence Date/Times 1721 property-rdate = element rdate { 1723 element parameters { 1724 tzidparam? 1725 }?, 1727 value-date-time+ | 1728 value-date+ | 1729 value-period+ 1730 } 1732 # 3.8.5.3 Recurrence Rule 1734 property-rrule = element rrule { 1736 element parameters { empty }?, 1738 value-recur 1739 } 1741 # 3.8.6 Alarm Component Properties 1743 # 3.8.6.1 Action 1745 property-action = element action { 1747 element parameters { empty }?, 1749 element text { 1750 "AUDIO" | 1751 "DISPLAY" | 1752 "EMAIL" 1754 } 1755 } 1757 # 3.8.6.2 Repeat Count 1759 property-repeat = element repeat { 1761 element parameters { empty }?, 1763 value-integer 1764 } 1766 # 3.8.6.3 Trigger 1768 property-repeat = element repeat { 1770 ( 1771 element parameters { 1772 trigrelparam? 1773 }?, 1775 value-duration 1776 ) | 1777 ( 1778 element parameters { empty }?, 1780 value-date-time 1781 ) 1782 } 1784 # 3.8.7 Change Management Component Properties 1786 # 3.8.7.1 Date/Time Created 1788 property-created = element created { 1790 element parameters { empty }?, 1792 value-date-time 1793 } 1795 # 3.8.7.2 Date/Time Stamp 1797 property-dtstamp = element dtstamp { 1799 element parameters { empty }?, 1801 value-date-time 1803 } 1805 # 3.8.7.3 Last Modified 1807 property-last-mod = element last-modified { 1809 element parameters { empty }?, 1811 value-date-time 1812 } 1814 # 3.8.7.4 Sequence Number 1816 property-seq = element sequence { 1818 element parameters { empty }?, 1820 value-integer 1821 } 1823 # 3.8.8 Miscellaneous Component Properties 1825 # 3.8.8.3 Request Status 1827 property-rstatus = element request-status { 1829 element parameters { 1830 languageparam? 1831 }?, 1833 element value { 1834 element code { text }, 1835 element description { text }, 1836 element data { text }? 1837 } 1838 } 1840 Appendix B. XML Stylesheet for conversion to iCalendar 1842 TO DO 1844 Appendix C. Example 1846 Below is some example iCalendar data and its representation in XML as 1847 defined by this specification. 1849 C.1. iCalendar Data 1851 BEGIN:VCALENDAR 1852 CALSCALE:GREGORIAN 1853 PRODID:-//Example Inc.//Example Calendar//EN 1854 VERSION:2.0 1855 BEGIN:VEVENT 1856 DTSTAMP:20080205T191224Z 1857 DTSTART:20081006 1858 SUMMARY:Planning meeting 1859 UID:4088E990AD89CB3DBB484909 1860 END:VEVENT 1861 END:VCALENDAR 1863 C.2. XML Data 1865 1866 1867 1868 1869 GREGORIAN 1870 1871 -//Example Inc.//Example Calendar//EN 1872 1873 2.0 1874 1875 1876 1877 1878 20080205T191224Z 1879 20081006 1880 1881 Planning meeting 1882 1883 1884 4088E990AD89CB3DBB484909 1885 1886 1887 1888 1889 1890 1892 Appendix D. Change History (to be removed prior to publication as an 1893 RFC) 1895 Changes from -03: 1897 1. Changed the proposed MIME type from xml+calendar to calendar+xml. 1899 2. Fixed several references to sections of RFC5545. 1901 3. Updated example in Appendix C. 1903 4. Corrected the definition and grammar for TIME and UTC-OFFSET 1904 properties. 1906 Changes from -02: 1908 1. Removed the LINK extension and related sections. The concept 1909 will be addressed in a separate specification. 1911 2. Various minor edits for clarity and consistency. 1913 Changes from -01: 1915 1. Added LINK extension to iCalendar and section discussing links in 1916 XML format. 1918 2. Adopted "xCal" as the short name for the specification. 1920 Changes from -00: 1922 1. Changed 2445bis references to RFC5545. 1924 2. Added a version number to the XML namespace for iCalendar. 1926 3. Changed the values for the date, date-time, period, and duration 1927 elements to exactly match the values specified in RFC5545. 1928 Previously these were broken out into separate elements for day, 1929 month, year, etc. 1931 4. Added specification for XML property in iCalendar. 1933 Authors' Addresses 1935 Cyrus Daboo 1936 Apple Inc. 1937 1 Infinite Loop 1938 Cupertino, CA 95014 1939 USA 1941 EMail: cyrus@daboo.name 1942 URI: http://www.apple.com/ 1943 Mike Douglass 1944 Rensselaer Polytechnic Institute 1945 110 8th Street 1946 Troy, NY 12180 1947 USA 1949 EMail: douglm@rpi.edu 1950 URI: http://www.rpi.edu/ 1952 Steven Lees 1953 Microsoft Corporation 1954 One Microsoft Way 1955 Redmond, WA 98052 1956 USA 1958 EMail: steven.lees@microsoft.com 1959 URI: http://www.microsoft.com/