idnits 2.17.1 draft-daboo-et-al-icalendar-in-xml-03.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- == There are 91 instances of lines with non-RFC6890-compliant IPv4 addresses in the document. If these are example addresses, they should be changed. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (April 14, 2010) is 5119 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: October 16, 2010 RPI 6 S. Lees 7 Microsoft 8 April 14, 2010 10 xCal: The XML format for iCalendar 11 draft-daboo-et-al-icalendar-in-xml-03 13 Abstract 15 This specification defines "xCal", an XML format for iCalendar data. 17 Status of This Memo 19 This Internet-Draft is submitted in full conformance with the 20 provisions of BCP 78 and BCP 79. 22 Internet-Drafts are working documents of the Internet Engineering 23 Task Force (IETF). Note that other groups may also distribute 24 working documents as Internet-Drafts. The list of current Internet- 25 Drafts is at http://datatracker.ietf.org/drafts/current/. 27 Internet-Drafts are draft documents valid for a maximum of six months 28 and may be updated, replaced, or obsoleted by other documents at any 29 time. It is inappropriate to use Internet-Drafts as reference 30 material or to cite them other than as "work in progress." 32 This Internet-Draft will expire on October 16, 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.5) . . . . . . . . . . . . . 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.4) . . . . . . . . . . . . . 9 63 3.5.1. VALUE parameter . . . . . . . . . . . . . . . . . . . 11 64 3.6. Values (RFC5545 section 3.3) . . . . . . . . . . . . . . . 11 65 3.6.1. Binary (RFC5545 section 4.3.1) . . . . . . . . . . . . 11 66 3.6.2. Boolean (RFC5545 section 4.3.2) . . . . . . . . . . . 11 67 3.6.3. Calendar User Address (RFC5545 section 4.3.3) . . . . 11 68 3.6.4. Date (RFC5545 section 4.3.4) . . . . . . . . . . . . . 12 69 3.6.5. Date-Time (RFC5545 section 4.3.5) . . . . . . . . . . 12 70 3.6.6. Duration (RFC5545 section 4.3.6) . . . . . . . . . . . 12 71 3.6.7. Float (RFC5545 section 4.3.7) . . . . . . . . . . . . 12 72 3.6.8. Integer (RFC5545 section 4.3.8) . . . . . . . . . . . 12 73 3.6.9. Period of Time (RFC5545 section 4.3.9) . . . . . . . . 12 74 3.6.10. Recurrence Rule (RFC5545 section 4.3.10) . . . . . . . 13 75 3.6.11. Text (RFC5545 section 4.3.11) . . . . . . . . . . . . 13 76 3.6.12. Time (RFC5545 section 4.3.12) . . . . . . . . . . . . 13 77 3.6.13. URI (RFC5545 section 4.3.13) . . . . . . . . . . . . . 13 78 3.6.14. UTC Offset (RFC5545 section 4.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 . . . . . 41 93 Appendix C. Example . . . . . . . . . . . . . . . . . . . . . . . 41 94 C.1. iCalendar Data . . . . . . . . . . . . . . . . . . . . . . 41 95 C.2. XML Data . . . . . . . . . . . . . . . . . . . . . . . . . 42 96 Appendix D. Change History (to be removed prior to 97 publication as an RFC) . . . . . . . . . . . . . . . 42 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.5) 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.4) 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 4.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 4.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 4.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 4.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 4.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 4.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 4.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 4.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 4.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 4.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 4.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 4.3.12) 539 Description: iCalendar TIME property values are represented by the 540 ICAL:time XML element. The content of the element is three child 541 elements representing the hour, minute and second values in the 542 time. In addition, an XML attribute is used to indicate whether 543 the time value represents a UTC based time (represented by a 544 trailing "Z" in the iCalendar value). 546 XML Definition: Appendix A # 3.3.12 548 3.6.13. URI (RFC5545 section 4.3.13) 550 Description: iCalendar URI property values are represented by the 551 ICAL:uri XML element. The content of the element is a URI. 553 XML Definition: Appendix A # 3.3.13 555 3.6.14. UTC Offset (RFC5545 section 4.3.14) 557 Description: iCalendar UTC-OFFSET property values are represented by 558 the ICAL:utc-offset XML element. The content of the element is 559 two or three child elements representing the hour, minute and 560 (optional) second values in the UTC offset. In addition, an XML 561 attribute is used to indicate whether the offset value represents 562 a positive or negative offset. 564 XML Definition: Appendix A # 3.3.14 566 3.7. Extensions 568 iCalendar extension properties and parameters (those with an "X-" 569 prefix in their name) are handled in the same way as other properties 570 and parameters: the property or parameter is represented by an XML 571 element with the same name, but in lowercase. e.g., the "X-FOO" 572 property in iCalendar turns into the ICAL:x-foo element in XML. 574 4. Converting from XML into iCalendar 576 When converting component, property and parameter values, the names 577 SHOULD be converted to uppercase. Although iCalendar names are case 578 insensitive, common practice is to keep them all uppercase following 579 the actual definitions in [RFC5545]. 581 Backslash escaping and line folding MUST be applied to the resulting 582 iCalendar data as required by [RFC5545]. 584 4.1. Converting XML Extensions into iCalendar 586 XML extensions are converted back to iCalendar in one of two ways, 587 depending on whether the extensions are in the iCalendar XML 588 namespace, or in an external namespace. 590 Extensions that are part of the iCalendar XML namespace MUST have 591 element names that being with "x-", and will be converted back to the 592 equivalent extension property in iCalendar. For example, the "x-foo" 593 element will convert to the "X-FOO" iCalendar property. 595 Extensions that are in a namespace other than the iCalendar XML 596 namespace SHOULD be preserved in the iCalendar representation using 597 the XML iCalendar property described in Section 4.2. 599 4.2. The XML property for iCalendar 601 This section describes an extension property for iCalendar, as 602 covered in section 8.2.3 of [RFC5545]. 604 Property name: XML 606 Purpose: To embed XML-encoded calendar data in the iCalendar format. 608 Value type: A single text value. 610 Property parameters: None allowed. 612 Conformance: The property can appear on any iCalendar component. 614 Description: The value of this property is an XML element. The XML 615 property MUST NOT be used to contain properties that are already 616 defined in iCalendar, or properties that use the "X-" iCalendar 617 extension property syntax. Since all elements in the 618 urn:ietf:params:xml:ns:icalendar-2.0 namespace convert to a well- 619 defined iCalendar object, the elements in this property MUST NOT be 620 in the urn:ietf:params:xml:ns:icalendar-2.0 namespace. The XML 621 element which is the value of this property MUST have an XML 622 namespace declaration. 624 There can be more than one XML property present for a given iCalendar 625 object. The ordering of XML properties is not preserved in the 626 conversion between XML and iCalendar. 628 Format definition: This property is defined by the following 629 notation: 631 xml = "XML:" text CRLF 633 Example: The following is an example of an iCalendar event with a 634 location embedded in KML markup inside the XML property. 636 BEGIN:VCALENDAR 637 CALSCALE:GREGORIAN 638 PRODID:-//Example Inc.//Example Calendar//EN 639 VERSION:2.0 640 BEGIN:VEVENT 641 DTSTAMP:20080205T191224Z 642 DTSTART:20081006 643 SUMMARY:Planning meeting 644 UID:4088E990AD89CB3DBB484909 645 XML:... 646 END:VEVENT 647 END:VCALENDAR 649 5. Security Considerations 651 This extension does not introduce any new security concerns than 652 those already described in iCalendar. 654 6. IANA Considerations 656 This document defines a new URN to identify a new XML namespace for 657 iCalendar data. The URN conforms to a registry mechanism described 658 in [RFC3688]. 660 This document defines a new media type. The registration is in 661 Section 6.2. 663 This document defines a new property for iCalendar. The registration 664 is in Section 4.2. 666 6.1. Namespace Registration 668 Registration request for the iCalendar namespace: 670 URI: urn:ietf:params:xml:ns:icalendar-2.0 672 Registrant Contact: See the "Authors' Addresses" section of this 673 document. 675 XML: None. Namespace URIs do not represent an XML specification. 677 6.2. Media Type 679 This section defines the MIME media type for use with iCalendar in 680 XML data. 682 To: ietf-types@iana.org 684 Subject: Registration of media type application/xml+calendar 686 Type name: application 688 Subtype name: xml+calendar 690 Required parameters: none 692 Optional parameters: charset, method, component and optinfo as 693 defined for the text/calendar media type 695 Encoding considerations: iCalendar data is typically UTF-8 and thus 696 the XML representation will follow that. As a result, for 7-bit 697 transports, data in UTF-8 MUST be encoded in quoted-printable or 698 base64. 700 Security considerations: See Section 5. 702 Interoperability considerations: This media type provides an 703 alternative syntax to iCalendar data based on XML. 705 Published specification: This specification. 707 Applications which use this media type: Applications that currently 708 make use of the text/calendar media type can use this as an 709 alternative. 711 Additional information: 713 Magic number(s): None 715 File extension(s): XML data should use "xml" as the file 716 extension. 718 Macintosh file type code(s): None specified. 720 Person & email address to contact for further information: See the 721 "Author's Address" section of this document. 723 Intended usage: COMMON 725 Restrictions on usage: There are no restrictions on where this media 726 type can be used. 728 Author: See the "Author's Address" section of this document. 730 Change controller: IETF 732 7. Acknowledgments 734 This specification originated from the work of the XML technical 735 committee of the Calendaring and Scheduling Consortium. 737 8. References 739 8.1. Normative References 741 [RFC2119] Bradner, S., "Key words for use in RFCs to 742 Indicate Requirement Levels", BCP 14, 743 RFC 2119, March 1997. 745 [RFC3688] Mealling, M., "The IETF XML Registry", 746 BCP 81, RFC 3688, January 2004. 748 [RFC5545] Desruisseaux, B., "Internet Calendaring and 749 Scheduling Core Object Specification 750 (iCalendar)", RFC 5545, September 2009. 752 [W3C.REC-xml-20040204] Yergeau, F., Maler, E., Bray, T., Paoli, J., 753 and C. Sperberg-McQueen, "Extensible Markup 754 Language (XML) 1.0 (Third Edition)", World 755 Wide Web Consortium FirstEdition REC-xml- 756 20040204, February 2004, 757 . 759 8.2. Informative References 761 Appendix A. Relax NG Schema 763 Below is a Relax NG schema for iCalendar in XML. This schema uses 764 the compact notation of Relax NG. The numeric section numbers given 765 in the comments refer to section in [RFC5545]. The ordering of 766 elements follows the section ordering of [RFC5545]. 768 The Relax NG compact notation "?" operator is used to indicate an 769 unordered list of items. However, that operator, as defined, allows 770 "mixing" each element that it operates on at any depth within the 771 other elements, rather than just allowing "mixing" of siblings only. 772 As a result, the schema provided allows certain constructs that are 773 not allowed in iCalendar. Given that there is no sibling-only 774 unordered list operator in RelaxNG, this is the best representation 775 that can be given. 777 # Relax NG Schema for iCalendar in XML 779 default namespace = "urn:ietf:params:xml:ns:icalendar-2.0" 781 # 3.2 Property Parameters 783 # 3.2.1 Alternate Text Representation 785 altrepparam = element altrep { value-uri } 787 # 3.2.2 Common Name 789 cnparam = element cn { text } 791 # 3.2.3 Calendar User Type 793 cutypeparam = element cutype { 794 "INDIVIDUAL" | 795 "GROUP" | 796 "RESOURCE" | 797 "ROOM" | 798 "UNKNOWN" 799 } 800 # 3.2.4 Delegators 802 delfromparam = element delegated-from { value-cal-address+ } 804 # 3.2.5 Delegatees 806 deltoparam = element delegated-to { value-cal-address+ } 808 # 3.2.6 Directory Entry Reference 810 dirparam = element dir { value-uri } 812 # 3.2.7 Inline Encoding 814 encodingparam = element encoding { 815 "8BIT" | 816 "BASE64" 817 } 819 # 3.2.8 Format Type 821 fmttypeparam = element fmttype { text } 823 # 3.2.9 Free/Busy Time Type 825 fbtypeparam = element fbtype { 826 "FREE" | 827 "BUSY" | 828 "BUSY-UNAVAILABLE" | 829 "BUSY-TENTATIVE" 830 } 832 # 3.2.10 Language 834 languageparam = element language { text } 836 # 3.2.11 Group or List Membership 838 memberparam = element member { value-cal-address+ } 840 # 3.2.12 Participation Status 842 partstatparam = element partstat { 843 type-partstat-event | 844 type-partstat-todo | 845 type-partstat-jour 846 } 847 type-partstat-event = ( 848 "NEEDS-ACTION" | 849 "ACCEPTED" | 850 "DECLINED" | 851 "TENTATIVE" | 852 "DELEGATED" 853 ) 855 type-partstat-todo = ( 856 "NEEDS-ACTION" | 857 "ACCEPTED" | 858 "DECLINED" | 859 "TENTATIVE" | 860 "DELEGATED" | 861 "COMPLETED" | 862 "IN-PROCESS" 863 ) 865 type-partstat-jour = ( 866 "NEEDS-ACTION" | 867 "ACCEPTED" | 868 "DECLINED" 869 ) 871 # 3.2.13 Recurrence Identifier Range 873 rangeparam = element range { 874 "THISANDFUTURE" 875 } 877 # 3.2.14 Alarm Trigger Relationship 879 trigrelparam = element related { 880 "START" | 881 "END" 882 } 884 # 3.2.15 Relationship Type 886 reltypeparam = element reltype { 887 "PARENT" | 888 "CHILD" | 889 "SIBLING" 890 } 892 # 3.2.16 Participation Role 894 roleparam = element role { 895 "CHAIR" | 896 "REQ-PARTICIPANT" | 897 "OPT-PARTICIPANT" | 898 "NON-PARTICIPANT" 899 } 901 # 3.2.17 RSVP Expectation 903 rsvpparam = element rsvp { 904 "TRUE" | 905 "FALSE" 906 } 908 # 3.2.18 Sent By 910 sentbyparam = element sent-by { value-cal-address } 912 # 3.2.19 Time Zone Identifier 914 tzidparam = element tzid { text } 916 # 3.3 Property Value Data Types 918 # 3.3.1 BINARY 920 value-binary = element binary { text } 922 # 3.3.2 BOOLEAN 924 value-boolean = element boolean { 925 ("TRUE" | "FALSE") 926 } 928 # 3.3.3 CAL-ADDRESS 930 value-cal-address = element cal-address { text } 932 # 3.3.4 DATE 934 value-date = element date { 935 text 936 } 938 # 3.3.5 DATE-TIME 940 value-date-time = element date-time { 941 text 942 } 943 # 3.3.6 DURATION 945 value-duration = element duration { 946 text 947 } 949 # 3.3.7 FLOAT 951 value-float = element float { text } 953 # 3.3.8 INTEGER 955 value-integer = element integer { text } 957 # 3.3.9 PERIOD 959 value-period = element period { 960 text 961 } 963 # 3.3.10 RECUR 965 value-recur = element recur { 966 type-freq, 967 (type-until | type-count)?, 968 element interval { text }?, 969 element bysecond { text }*, 970 element byminute { text }*, 971 element byhour { text }*, 972 type-byday*, 973 type-bymonthday*, 974 type-byyearday*, 975 type-byweekno*, 976 element bymonth { text }*, 977 type-bysetpos*, 978 element wkst { type-weekday }? 979 } 981 type-freq = element freq { 982 "SECONDLY" | 983 "MINUTELY" | 984 "HOURLY" | 985 "DAILY" | 986 "WEEKLY" | 987 "MONTHLY" | 988 "YEARLY" 989 } 990 type-until = element until { 991 type-date | 992 type-date-time 993 } 995 type-count = element count { text } 997 type-weekday = ( 998 "SU" | 999 "MO" | 1000 "TU" | 1001 "WE" | 1002 "TH" | 1003 "FR" | 1004 "SA" 1005 ) 1007 type-byday = element byday { 1008 element ordwk { 1009 text 1010 }?, 1011 element weekday { type-weekday } 1012 } 1014 type-bymonthday = element bymonthday { 1015 text 1016 } 1018 type-byyearday = element byyearday { 1019 text 1020 } 1022 type-byweekno = element byweekno { 1023 text 1024 } 1026 type-bysetpos = element bysetpos { 1027 text 1028 } 1030 # 3.3.11 TEXT 1032 value-text = element text { text } 1034 # 3.3.12 TIME 1036 value-time = element time { 1037 attribute utc { "yes" | "no" }, 1038 element hour { text }, 1039 element minute { text }, 1040 element second { text } 1041 } 1043 # 3.3.13 URI 1045 value-uri = element uri { text } 1047 # 3.3.14 UTC-OFFSET 1049 value-utc-offset = element utc-offset { 1050 attribute sign { "+" | "-" }, 1051 element hour { text }, 1052 element minute { text }, 1053 element second { text }? 1054 } 1056 # 3.4 iCalendar Stream 1058 start = element icalendar { vcalendar+ } 1060 # 3.6 Calendar Components 1062 vcalendar = element vcalendar { 1063 type-calprops, 1064 type-component 1065 } 1067 type-calprops = element properties { 1068 property-prodid & 1069 property-version & 1070 property-calscale? & 1071 property-method? 1072 } 1074 type-component = element components { 1075 ( 1076 component-vevent | 1077 component-vtodo | 1078 component-vjournal | 1079 component-vfreebusy | 1080 component-vtimezone 1081 )* 1082 } 1084 # 3.6.1 Event Component 1085 component-vevent = element vevent { 1086 type-eventprop, 1087 element components { 1088 component-valarm+ 1089 }? 1090 } 1092 type-eventprop = element properties { 1093 property-dtstamp & 1094 property-dtstart & 1095 property-uid & 1097 property-class? & 1098 property-created? & 1099 property-description? & 1100 property-geo? & 1101 property-last-mod? & 1102 property-location? & 1103 property-organizer? & 1104 property-priority? & 1105 property-seq? & 1106 property-status-event? & 1107 property-summary? & 1108 property-transp? & 1109 property-url? & 1110 property-recurid? & 1112 property-rrule? & 1114 (property-dtend | property-duration)? & 1116 property-attach* & 1117 property-attendee* & 1118 property-categories* & 1119 property-comment* & 1120 property-contact* & 1121 property-exdate* & 1122 property-rstatus* & 1123 property-related* & 1124 property-resources* & 1125 property-rdate* 1126 } 1128 # 3.6.2 To-do Component 1130 component-vtodo = element vtodo { 1131 type-todoprop, 1132 element components { 1133 component-valarm+ 1134 }? 1135 } 1137 type-todoprop = element properties { 1138 property-dtstamp & 1139 property-uid & 1141 property-class? & 1142 property-completed? & 1143 property-created? & 1144 property-description? & 1145 property-geo? & 1146 property-last-mod? & 1147 property-location? & 1148 property-organizer? & 1149 property-percent? & 1150 property-priority? & 1151 property-recurid? & 1152 property-seq? & 1153 property-status-todo? & 1154 property-summary? & 1155 property-url? & 1157 property-rrule? & 1159 ( 1160 (property-dtstart?, property-dtend? ) | 1161 (property-dtstart, property-duration)? 1162 ) & 1164 property-attach* & 1165 property-attendee* & 1166 property-categories* & 1167 property-comment* & 1168 property-contact* & 1169 property-exdate* & 1170 property-rstatus* & 1171 property-related* & 1172 property-resources* & 1173 property-rdate* 1174 } 1176 # 3.6.3 Journal Component 1178 component-vjournal = element vjournal { 1179 type-jourprop 1180 } 1181 type-jourprop = element properties { 1182 property-dtstamp & 1183 property-uid & 1185 property-class? & 1186 property-created? & 1187 property-dtstart? & 1188 property-last-mod? & 1189 property-organizer? & 1190 property-recurid? & 1191 property-seq? & 1192 property-status-jour? & 1193 property-summary? & 1194 property-url? & 1196 property-rrule? & 1198 property-attach* & 1199 property-attendee* & 1200 property-categories* & 1201 property-comment* & 1202 property-contact* & 1203 property-description? & 1204 property-exdate* & 1205 property-related* & 1206 property-rdate* & 1207 property-rstatus* 1208 } 1210 # 3.6.4 Free/Busy Component 1212 component-vfreebusy = element vfreebusy { 1213 type-fbprop 1214 } 1216 type-fbprop = element properties { 1217 property-dtstamp & 1218 property-uid & 1220 property-contact? & 1221 property-dtstart? & 1222 property-dtend? & 1223 property-duration? & 1224 property-organizer? & 1225 property-url? & 1227 property-attendee* & 1228 property-comment* & 1229 property-freebusy* & 1230 property-rstatus* 1231 } 1233 # 3.6.5 Time Zone Component 1235 component-vtimezone = element vtimezone { 1236 element properties { 1237 property-tzid & 1239 property-last-mod? & 1240 property-tzuurl? 1241 }, 1242 element components { 1243 (component-standard | component-daylight) & 1244 component-standard* & 1245 component-daylight* 1246 } 1247 } 1249 component-standard = element standard { 1250 type-tzprop 1251 } 1253 component-daylight = element daylight { 1254 type-tzprop 1255 } 1257 type-tzprop = element properties { 1258 property-dtstart & 1259 property-tzoffsetto & 1260 property-tzoffsetfrom & 1262 property-rrule? & 1264 property-comment* & 1265 property-rdate* & 1266 property-tzname* 1267 } 1269 # 3.6.6 Alarm Component 1271 component-valarm = element valarm { 1272 audioprop | dispprop | emailprop 1273 } 1275 type-audioprop = element properties { 1276 property-action & 1277 property-trigger & 1279 (property-duration, property-repeat)? & 1281 property-attach? 1282 } 1284 type-dispprop = element properties { 1285 property-action & 1286 property-description & 1287 property-trigger & 1288 property-summary & 1290 property-attendee+ & 1292 (property-duration, property-repeat)? & 1294 property-attach* 1295 } 1297 type-emailprop = element properties { 1298 property-action & 1299 property-description & 1300 property-trigger & 1302 (property-duration, property-repeat)? 1303 } 1305 # 3.7 Calendar Properties 1307 # 3.7.1 Calendar Scale 1309 property-calscale = element calscale { 1311 element parameters { empty }?, 1313 element text { "GREGORIAN" } 1314 } 1316 # 3.7.2 Method 1318 property-method = element method { 1320 element parameters { empty }?, 1322 value-text 1323 } 1324 # 3.7.3 Product Identifier 1326 property-prodid = element prodid { 1328 element parameters { empty }?, 1330 value-text 1331 } 1333 # 3.7.4 Version 1335 property-version = element version { 1337 element parameters { empty }?, 1339 value-text 1340 } 1342 # 3.8 Component Properties 1344 # 3.8.1 Descriptive Component Properties 1346 # 3.8.1.1 Attachment 1348 property-attach = element attach { 1350 element parameters { 1351 fmttypeparam? & 1352 encodingparam? 1353 }?, 1355 value-uri | value-binary 1356 } 1358 # 3.8.1.2 Categories 1360 property-categories = element categories { 1362 element parameters { 1363 languageparam? & 1364 }?, 1366 value-text+ 1367 } 1369 # 3.8.1.3 Classification 1371 property-class = element class { 1372 element parameters { empty }?, 1374 element text { 1375 "PUBLIC" | 1376 "PRIVATE" | 1377 "CONFIDENTIAL" 1378 } 1379 } 1381 # 3.8.1.4 Comment 1383 property-comment = element comment { 1385 element parameters { 1386 altrepparam? & 1387 languageparam? 1388 }?, 1390 value-text 1391 } 1393 # 3.8.1.5 Description 1395 property-description = element description { 1397 element parameters { 1398 altrepparam? & 1399 languageparam? 1400 }?, 1402 value-text 1403 } 1405 # 3.8.1.6 Geographic Position 1407 property-geo = element geo { 1409 element parameters { empty }?, 1411 element value { 1412 element latitude { text }, 1413 element longitude { text } 1414 } 1415 } 1417 # 3.8.1.7 Location 1419 property-location = element location { 1420 element parameters { 1421 altrepparam? & 1422 languageparam? 1423 }?, 1425 value-text 1426 } 1428 # 3.8.1.8 Percent Complete 1430 property-percent = element percent-complete { 1432 element parameters { empty }?, 1434 value-integer 1435 } 1437 # 3.8.1.9 Priority 1439 property-priority = element priority { 1441 element parameters { empty }?, 1443 value-integer 1444 } 1446 # 3.8.1.10 Resources 1448 property-resources = element resources { 1450 element parameters { 1451 altrepparam? & 1452 languageparam? 1453 }?, 1455 value-text+ 1456 } 1458 # 3.8.1.11 Status 1460 property-status-event = element status { 1462 element parameters { empty }?, 1464 element text { 1465 "TENTATIVE" | 1466 "CONFIRMED" | 1467 "CANCELLED" 1469 } 1470 } 1472 property-status-todo = element status { 1474 element parameters { empty }?, 1476 element text { 1477 "NEEDS-ACTION" | 1478 "COMPLETED" | 1479 "IN-PROCESS" | 1480 "CANCELLED" 1481 } 1482 } 1484 property-status-jour = element status { 1486 element parameters { empty }?, 1488 element text { 1489 "DRAFT" | 1490 "FINAL" | 1491 "CANCELLED" 1492 } 1493 } 1495 # 3.8.1.12 Summary 1497 property-summary = element summary { 1499 element parameters { 1500 altrepparam? & 1501 languageparam? 1502 }?, 1504 value-text 1505 } 1507 # 3.8.2 Date and Time Component Properties 1509 # 3.8.2.1 Date/Time Completed 1511 property-completed = element completed { 1513 element parameters { empty }?, 1515 value-date-time 1516 } 1517 # 3.8.2.2 Date/Time End 1519 property-dtend = element dtend { 1521 element parameters { 1522 tzidparam? 1523 }?, 1525 value-date-time | 1526 value-date 1527 } 1529 # 3.8.2.3 Date/Time Due 1531 property-due = element due { 1533 element parameters { 1534 tzidparam? 1535 }?, 1537 value-date-time | 1538 value-date 1539 } 1541 # 3.8.2.4 Date/Time Start 1543 property-dtstart = element dtstart { 1545 element parameters { 1546 tzidparam? 1547 }?, 1549 value-date-time | 1550 value-date 1551 } 1553 # 3.8.2.5 Duration 1555 property-duration = element duration { 1557 element parameters { empty }?, 1559 value-duration 1560 } 1562 # 3.8.2.6 Free/Busy Time 1564 property-freebusy = element freebusy { 1565 element parameters { 1566 fbtypeparam? 1567 }?, 1569 value-period+ 1570 } 1572 # 3.8.2.7 Time Transparency 1574 property-transp = element transp { 1576 element parameters { empty }?, 1578 element text { 1579 "OPAQUE" | 1580 "TRANSPARENT" 1581 } 1582 } 1584 # 3.8.3 Time Zone Component Properties 1586 # 3.8.3.1 Time Zone Identifier 1588 property-tzid = element tzid { 1590 element parameters { empty }?, 1592 value-text 1593 } 1595 # 3.8.3.2 Time Zone Name 1597 property-tzname = element tzname { 1599 element parameters { 1600 languageparam? 1601 }?, 1603 value-text 1604 } 1606 # 3.8.3.3 Time Zone Offset From 1608 property-tzoffsetfrom = element tzoffsetfrom { 1610 element parameters { empty }?, 1611 value-utc-offset 1612 } 1614 # 3.8.3.4 Time Zone Offset To 1616 property-tzoffsetto = element tzoffsetto { 1618 element parameters { empty }?, 1620 value-utc-offset 1621 } 1623 # 3.8.3.5 Time Zone URL 1625 property-tzurl = element tzurl { 1627 element parameters { empty }?, 1629 value-uri 1630 } 1632 # 3.8.4 Relationship Component Properties 1634 # 3.8.4.1 Attendee 1636 property-attendee = element attendee { 1638 element parameters { 1639 cutypeparam? & 1640 memberparam? & 1641 roleparam? & 1642 partstatparam? & 1643 rsvpparam? & 1644 deltoparam? & 1645 delfromparam? & 1646 sentbyparam? & 1647 cnparam? & 1648 dirparam? & 1649 languageparam? 1650 }?, 1652 value-cal-address 1653 } 1655 # 3.8.4.2 Contact 1657 property-contact = element contact { 1658 element parameters { 1659 altrepparam? & 1660 languageparam? 1661 }?, 1663 value-text 1664 } 1666 # 3.8.4.3 Organizer 1668 property-organizer = element organizer { 1670 element parameters { 1671 cnparam? & 1672 dirparam? & 1673 sentbyparam? & 1674 languageparam? 1675 }?, 1677 value-cal-address 1678 } 1680 # 3.8.4.4 Recurrence ID 1682 property-recurid = element recurrence-id { 1684 element parameters { 1685 tzidparam? & 1686 rangeparam? 1687 }?, 1689 value-date-time | 1690 value-date 1691 } 1693 # 3.8.4.5 Related-To 1695 property-related = element related-to { 1697 element parameters { 1698 reltypeparam? 1699 }?, 1701 value-text 1702 } 1704 # 3.8.4.6 Uniform Resource Locator 1705 property-url = element url { 1707 element parameters { empty }?, 1709 value-uri 1710 } 1712 # 3.8.4.7 Unique Identifier 1714 property-uid = element uid { 1716 element parameters { empty }?, 1718 value-text 1719 } 1721 # 3.8.5 Recurrence Component Properties 1723 # 3.8.5.1 Exception Date/Times 1725 property-exdate = element exdate { 1727 element parameters { 1728 tzidparam? 1729 }?, 1731 value-date-time+ | 1732 value-date+ 1733 } 1735 # 3.8.5.2 Recurrence Date/Times 1737 property-rdate = element rdate { 1739 element parameters { 1740 tzidparam? 1741 }?, 1743 value-date-time+ | 1744 value-date+ | 1745 value-period+ 1746 } 1748 # 3.8.5.3 Recurrence Rule 1750 property-rrule = element rrule { 1752 element parameters { empty }?, 1753 value-recur 1754 } 1756 # 3.8.6 Alarm Component Properties 1758 # 3.8.6.1 Action 1760 property-action = element action { 1762 element parameters { empty }?, 1764 element text { 1765 "AUDIO" | 1766 "DISPLAY" | 1767 "EMAIL" 1768 } 1769 } 1771 # 3.8.6.2 Repeat Count 1773 property-repeat = element repeat { 1775 element parameters { empty }?, 1777 value-integer 1778 } 1780 # 3.8.6.3 Trigger 1782 property-repeat = element repeat { 1784 ( 1785 element parameters { 1786 trigrelparam? 1787 }?, 1789 value-duration 1790 ) | 1791 ( 1792 element parameters { empty }?, 1794 value-date-time 1795 ) 1796 } 1798 # 3.8.7 Change Management Component Properties 1800 # 3.8.7.1 Date/Time Created 1801 property-created = element created { 1803 element parameters { empty }?, 1805 value-date-time 1806 } 1808 # 3.8.7.2 Date/Time Stamp 1810 property-dtstamp = element dtstamp { 1812 element parameters { empty }?, 1814 value-date-time 1815 } 1817 # 3.8.7.3 Last Modified 1819 property-last-mod = element last-modified { 1821 element parameters { empty }?, 1823 value-date-time 1824 } 1826 # 3.8.7.4 Sequence Number 1828 property-seq = element sequence { 1830 element parameters { empty }?, 1832 value-integer 1833 } 1835 # 3.8.8 Miscellaneous Component Properties 1837 # 3.8.8.3 Request Status 1839 property-rstatus = element request-status { 1841 element parameters { 1842 languageparam? 1843 }?, 1845 element value { 1846 element code { text }, 1847 element description { text }, 1848 element data { text }? 1850 } 1851 } 1853 Appendix B. XML Stylesheet for conversion to iCalendar 1855 TO DO 1857 Appendix C. Example 1859 Below is some example iCalendar data and its representation in XML as 1860 defined by this specification. 1862 C.1. iCalendar Data 1864 BEGIN:VCALENDAR 1865 CALSCALE:GREGORIAN 1866 PRODID:-//Example Inc.//Example Calendar//EN 1867 VERSION:2.0 1868 BEGIN:VEVENT 1869 DTSTAMP:20080205T191224Z 1870 DTSTART:20081006 1871 SUMMARY:Planning meeting 1872 UID:4088E990AD89CB3DBB484909 1873 END:VEVENT 1874 END:VCALENDAR 1876 C.2. XML Data 1878 1879 1880 1881 1882 GREGORIAN 1883 1884 -//Example Inc.//Example Calendar//EN 1885 1886 2.0 1887 1888 1889 1890 1891 1892 1893 200825 1894 191224 1895 1896 1897 1898 1899 2008106 1900 1901 1902 1903 Planning meeting 1904 1905 1906 4088E990AD89CB3DBB484909 1907 1908 1909 1910 1911 1912 1914 Appendix D. Change History (to be removed prior to publication as an 1915 RFC) 1917 Changes from -02: 1919 1. Removed the LINK extension and related sections. The concept 1920 will be addressed in a separate specification. 1922 2. Various minor edits for clarity and consistency. 1924 Changes from -01: 1926 1. Added LINK extension to iCalendar and section discussing links in 1927 XML format. 1929 2. Adopted "xCal" as the short name for the specification. 1931 Changes from -00: 1933 1. Changed 2445bis references to RFC5545. 1935 2. Added a version number to the XML namespace for iCalendar. 1937 3. Changed the values for the date, date-time, period, and duration 1938 elements to exactly match the values specified in RFC5545. 1939 Previously these were broken out into separate elements for day, 1940 month, year, etc. 1942 4. Added specification for XML property in iCalendar. 1944 Authors' Addresses 1946 Cyrus Daboo 1947 Apple Inc. 1948 1 Infinite Loop 1949 Cupertino, CA 95014 1950 USA 1952 EMail: cyrus@daboo.name 1953 URI: http://www.apple.com/ 1955 Mike Douglass 1956 Rensselaer Polytechnic Institute 1957 110 8th Street 1958 Troy, NY 12180 1959 USA 1961 EMail: douglm@rpi.edu 1962 URI: http://www.rpi.edu/ 1963 Steven Lees 1964 Microsoft Corporation 1965 One Microsoft Way 1966 Redmond, WA 98052 1967 USA 1969 EMail: Steven.Lees@microsoft.com 1970 URI: http://www.microsoft.com/