idnits 2.17.1 draft-daboo-et-al-icalendar-in-xml-00.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- ** The document seems to lack a License Notice according IETF Trust Provisions of 28 Dec 2009, Section 6.b.ii or Provisions of 12 Sep 2009 Section 6.b -- however, there's a paragraph with a matching beginning. Boilerplate error? (You're using the IETF Trust Provisions' Section 6.b License Notice from 12 Feb 2009 rather than one of the newer Notices. See https://trustee.ietf.org/license-info/.) Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- == There are 91 instances of lines with non-RFC6890-compliant IPv4 addresses in the document. If these are example addresses, they should be changed. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (June 4, 2009) is 5411 days in the past. Is this intentional? -- Found something which looks like a code comment -- if you have code sections in the document, please surround them with '' and '' lines. Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) No issues found here. Summary: 1 error (**), 0 flaws (~~), 2 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group C. Daboo 3 Internet-Draft Apple, Inc. 4 Intended status: Standards Track M. Douglass 5 Expires: December 6, 2009 RPI 6 S. Lees 7 Microsoft 8 June 4, 2009 10 iCalendar XML Representation 11 draft-daboo-et-al-icalendar-in-xml-00 13 Status of This Memo 15 This Internet-Draft is submitted to IETF in full conformance with the 16 provisions of BCP 78 and BCP 79. 18 Internet-Drafts are working documents of the Internet Engineering 19 Task Force (IETF), its areas, and its working groups. Note that 20 other groups may also distribute working documents as Internet- 21 Drafts. 23 Internet-Drafts are draft documents valid for a maximum of six months 24 and may be updated, replaced, or obsoleted by other documents at any 25 time. It is inappropriate to use Internet-Drafts as reference 26 material or to cite them other than as "work in progress." 28 The list of current Internet-Drafts can be accessed at 29 http://www.ietf.org/ietf/1id-abstracts.txt. 31 The list of Internet-Draft Shadow Directories can be accessed at 32 http://www.ietf.org/shadow.html. 34 This Internet-Draft will expire on December 6, 2009. 36 Copyright Notice 38 Copyright (c) 2009 IETF Trust and the persons identified as the 39 document authors. All rights reserved. 41 This document is subject to BCP 78 and the IETF Trust's Legal 42 Provisions Relating to IETF Documents in effect on the date of 43 publication of this document (http://trustee.ietf.org/license-info). 44 Please review these documents carefully, as they describe your rights 45 and restrictions with respect to this document. 47 Abstract 49 This specification defines a format for representing iCalendar data 50 in XML. 52 Table of Contents 54 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 55 2. Conventions Used in This Document . . . . . . . . . . . . . . 3 56 3. Converting from iCalendar to XML . . . . . . . . . . . . . . . 4 57 3.1. Pre-processing . . . . . . . . . . . . . . . . . . . . . . 4 58 3.2. iCalendar stream (2445bis section 3.4) . . . . . . . . . . 4 59 3.3. Components (2445bis section 3.6) . . . . . . . . . . . . . 6 60 3.4. Properties (2445bis section 3.5) . . . . . . . . . . . . . 6 61 3.4.1. Special Cases for Properties . . . . . . . . . . . . . 8 62 3.4.1.1. Multi-valued Properties . . . . . . . . . . . . . 8 63 3.4.1.2. GEO Property . . . . . . . . . . . . . . . . . . . 9 64 3.4.1.3. REQUEST-STATUS Property . . . . . . . . . . . . . 9 65 3.5. Parameters (2445bis section 3.4) . . . . . . . . . . . . . 9 66 3.5.1. VALUE parameter . . . . . . . . . . . . . . . . . . . 10 67 3.6. Values (2445bis section 3.3) . . . . . . . . . . . . . . . 11 68 3.6.1. Binary (2445bis section 4.3.1) . . . . . . . . . . . . 11 69 3.6.2. Boolean (2445bis section 4.3.2) . . . . . . . . . . . 11 70 3.6.3. Calendar User Address (2445bis section 4.3.3) . . . . 11 71 3.6.4. Date (2445bis section 4.3.4) . . . . . . . . . . . . . 11 72 3.6.5. Date-Time (2445bis section 4.3.5) . . . . . . . . . . 12 73 3.6.6. Duration (2445bis section 4.3.6) . . . . . . . . . . . 12 74 3.6.7. Float (2445bis section 4.3.7) . . . . . . . . . . . . 12 75 3.6.8. Integer (2445bis section 4.3.8) . . . . . . . . . . . 12 76 3.6.9. Period of Time (2445bis section 4.3.9) . . . . . . . . 13 77 3.6.10. Recurrence Rule (2445bis section 4.3.10) . . . . . . . 13 78 3.6.11. Text (2445bis section 4.3.11) . . . . . . . . . . . . 13 79 3.6.12. Time (2445bis section 4.3.12) . . . . . . . . . . . . 13 80 3.6.13. URI (2445bis section 4.3.13) . . . . . . . . . . . . . 13 81 3.6.14. UTC Offset (2445bis section 4.3.14) . . . . . . . . . 13 82 3.7. Extensions . . . . . . . . . . . . . . . . . . . . . . . . 14 83 4. Converting from XML into iCalendar . . . . . . . . . . . . . . 14 84 5. Security Considerations . . . . . . . . . . . . . . . . . . . 14 85 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 86 6.1. Namespace Registration . . . . . . . . . . . . . . . . . . 14 87 6.2. Media Type . . . . . . . . . . . . . . . . . . . . . . . . 15 88 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 16 89 8. Normative References . . . . . . . . . . . . . . . . . . . . . 16 90 Appendix A. Relax NG Schema . . . . . . . . . . . . . . . . . . . 16 91 Appendix B. XML Stylesheet for conversion to iCalendar . . . . . 40 92 Appendix C. Example . . . . . . . . . . . . . . . . . . . . . . . 40 93 C.1. iCalendar Data . . . . . . . . . . . . . . . . . . . . . . 40 94 C.2. XML Data . . . . . . . . . . . . . . . . . . . . . . . . . 41 96 1. Introduction 98 The iCalendar data format [I-D.ietf-calsify-rfc2445bis] is a widely 99 deployed interchange format for calendaring and scheduling data. 100 While many applications and services consume and generate calendar 101 data, iCalendar is a specialized format that requires its own parser/ 102 generator. In contrast, XML-based formats are widely used for 103 interoperability between applications, and the many tools that 104 generate, parse, and manipulate XML make it easier to work with than 105 iCalendar. 107 The purpose of this specification is to define an XML format that 108 allows iCalendar data to be converted to XML, and then back to 109 iCalendar, without losing any semantic meaning in the data. Anyone 110 creating XML calendar data according to this specification will know 111 that their data can be converted to a valid iCalendar representation 112 as well. 114 Several key design decisions have been made: 116 Round-tripping: i.e., converting an iCalendar instance to XML and 117 back will give the same result as the starting point. 119 Make the conversion process as simple as possible. 121 Make it easy to work with the XML without needing to re-parse it. 122 It is worth explaining the rationale behind this decision. One 123 result is that this specification breaks up date/time values from 124 iCalendar into separate year, month, day, hour, minute, and second 125 elements. By separating the values into different elements, it 126 becomes much easier to transform or query over the resulting XML. 127 For instance, given a set of xCal elements representing events, it 128 is easy to find the events that start at a particular time or in a 129 particular year, month, or day. Given a date / time value in the 130 xCal format described here, it would be easy to transform it to 131 HTML while removing unneeded sub-elements; no additional parsing 132 is needed. 134 Preserve the semantics of the iCalendar data. This decision is 135 important: the semantics of iCalendar is preserved in the XML so a 136 full understanding of iCalendar is required in order to actually 137 use the data, whether it be in the iCalendar or XML formats. 139 2. Conventions Used in This Document 141 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 142 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 143 document are to be interpreted as described in [RFC2119]. 145 When XML element types in the namespace 146 "urn:ietf:params:xml:ns:icalendar" are referenced in this document 147 outside of the context of an XML fragment, the string "ICAL:" will be 148 prefixed to the element types. 150 Some examples in this document contain "partial" XML documents used 151 for illustrative purposes. In these examples, three periods "..." 152 are used to indicate a portion of the document that has been removed 153 for compactness. 155 3. Converting from iCalendar to XML 157 This section describes how iCalendar data is converted to XML using a 158 simple, predictable mapping between the iCalendar data model and XML 159 elements. 161 3.1. Pre-processing 163 iCalendar data uses a line folding mechanism to limit lines of data 164 to a maximum line length (typically 72 characters) to ensure maximum 165 likelihood of preserving data integrity as it is transported via 166 various means (e.g., email) - see Section 3.1 of 167 [I-D.ietf-calsify-rfc2445bis]. 169 Prior to converting iCalendar data into XML all folded lines MUST be 170 unfolded. 172 iCalendar data uses an "escape" character sequence for text values 173 and parameter values. When such text elements are converted into XML 174 the escaping MUST be removed. 176 iCalendar uses a base64 encoding for binary data. The base64 177 encoding MUST remain when converted to XML. 179 3.2. iCalendar stream (2445bis section 3.4) 181 iCalendar has a well defined object model for its data that makes 182 mapping to XML a simple process of following a set of rules for 183 mapping the various object model types into XML elements. 185 At the top-level of the iCalendar object model is an "iCalendar 186 stream". This object encompasses multiple "iCalendar objects". In 187 XML, the entire stream is contained in the root ICAL:icalendar XML 188 element. 190 Example: 192 193 194 ... 195 197 An iCalendar stream can contain one or more iCalendar objects. Each 198 iCalendar object, delimited by BEGIN:VCALENDAR and END:VCALENDAR, is 199 enclosed by the ICAL:vcalendar XML element. 201 Example: 203 204 205 206 ... 207 208 210 iCalendar objects are comprised of a set of "components", 211 "properties", "parameters" and "values". A "component" can contain 212 other "components" or "properties". A "property" has a value and 213 optionally a set of "parameters". 215 In XML, "components" are contained within an ICAL:components XML 216 element. With that element, another ICAL:components element could 217 appear (representing components nested within components) or the 218 ICAL:properties XML element could appear. ICAL:properties is used to 219 encapsulate iCalendar properties. 221 Each iCalendar property will be mapped to its own XML element as 222 described below. Within each of these elements there is an optional 223 ICAL:parameters XML element used to encapsulate any iCalendar 224 parameters. Additionally there will be one or more XML elements 225 representing the value of the iCalendar property. 227 Example: 229 230 231 232 233 ... 234 235 236 ... 237 238 239 240 +------------------+----------------+------------------+ 241 | Item | XML element | XML Definition | 242 +------------------+----------------+------------------+ 243 | iCalendar Stream | ICAL:icalendar | Appendix A # 3.4 | 244 | VCALENDAR | ICAL:vcalendar | Appendix A # 3.6 | 245 +------------------+----------------+------------------+ 247 3.3. Components (2445bis section 3.6) 249 Each calendar component in the VCALENDAR object, delimited by BEGIN 250 and END, will be converted to an enclosing XML element with the same 251 name, but in lowercase: 253 +-----------+----------------+--------------------+ 254 | Component | XML element | XML Definition | 255 +-----------+----------------+--------------------+ 256 | VEVENT | ICAL:vevent | Appendix A # 3.6.1 | 257 | VTODO | ICAL:vtodo | Appendix A # 3.6.2 | 258 | VJOURNAL | ICAL:vjournal | Appendix A # 3.6.3 | 259 | VFREEBUSY | ICAL:vfreebusy | Appendix A # 3.6.4 | 260 | VTIMEZONE | ICAL:vtimezone | Appendix A # 3.6.5 | 261 | STANDARD | ICAL:standard | Appendix A # 3.6.5 | 262 | DAYLIGHT | ICAL:daylight | Appendix A # 3.6.5 | 263 | VALARM | ICAL:valarm | Appendix A # 3.6.6 | 264 +-----------+----------------+--------------------+ 266 3.4. Properties (2445bis section 3.5) 268 iCalendar properties , whether they apply to the VCALENDAR object or 269 to the components, are handled in a consistent way. 271 iCalendar properties are enclosed in the XML element ICAL:properties. 273 Each invidivual iCalendar property is represented in XML by an 274 element of the same name as the iCalendar property, but in lowercase. 275 For example, the CALSCALE property is represented in XML by the ICAL: 276 calscale element. 278 Example: 280 281 282 283 284 ... 285 ... 286 ... 287 288 289 ... 290 291 292 294 Each property can contain an ICAL:parameters XML element 295 encapsulating any iCalendar parameters associated with the iCalendar 296 property. 298 Each property will contain one or more "value" XML elements as 299 described below representing the value of the iCalendar property. 301 +------------------+-----------------------+-----------------------+ 302 | Property | XML element | XML Definition | 303 +------------------+-----------------------+-----------------------+ 304 | CALSCALE | ICAL:calscale | Appendix A # 3.7.1 | 305 | METHOD | ICAL:method | Appendix A # 3.7.2 | 306 | PRODID | ICAL:prodid | Appendix A # 3.7.3 | 307 | VERSION | ICAL:version | Appendix A # 3.7.4 | 308 | ATTACH | ICAL:attach | Appendix A # 3.8.1.1 | 309 | CATEGORIES | ICAL:categories | Appendix A # 3.8.1.2 | 310 | CLASS | ICAL:class | Appendix A # 3.8.1.3 | 311 | COMMENT | ICAL:comment | Appendix A # 3.8.1.4 | 312 | DESCRIPTION | ICAL:description | Appendix A # 3.8.1.5 | 313 | GEO | ICAL:geo | Appendix A # 3.8.1.6 | 314 | LOCATION | ICAL:location | Appendix A # 3.8.1.7 | 315 | PERCENT-COMPLETE | ICAL:percent-complete | Appendix A # 3.8.1.8 | 316 | PRIORITY | ICAL:priority | Appendix A # 3.8.1.9 | 317 | RESOURCES | ICAL:resources | Appendix A # 3.8.1.10 | 318 | STATUS | ICAL:status | Appendix A # 3.8.1.11 | 319 | SUMMARY | ICAL:summary | Appendix A # 3.8.1.12 | 320 | COMPLETED | ICAL:completed | Appendix A # 3.8.2.1 | 321 | DTEND | ICAL:dtend | Appendix A # 3.8.2.2 | 322 | DUE | ICAL:due | Appendix A # 3.8.2.3 | 323 | DTSTART | ICAL:dtstart | Appendix A # 3.8.2.4 | 324 | DURATION | ICAL:duration | Appendix A # 3.8.2.5 | 325 | FREEBUSY | ICAL:freebusy | Appendix A # 3.8.2.6 | 326 | TRANSP | ICAL:transp | Appendix A # 3.8.2.7 | 327 | TZID | ICAL:tzid | Appendix A # 3.8.3.1 | 328 | TZNAME | ICAL:tzname | Appendix A # 3.8.3.2 | 329 | TZOFFSETFROM | ICAL:tzoffsetfrom | Appendix A # 3.8.3.3 | 330 | TZOFFSETTO | ICAL:tzoffsetto | Appendix A # 3.8.3.4 | 331 | TZURL | ICAL:tzurl | Appendix A # 3.8.3.5 | 332 | ATTENDEE | ICAL:attendee | Appendix A # 3.8.4.1 | 333 | CONTACT | ICAL:contact | Appendix A # 3.8.4.2 | 334 | ORGANIZER | ICAL:organizer | Appendix A # 3.8.4.3 | 335 | RECURRENCE-ID | ICAL:recurrence-id | Appendix A # 3.8.4.4 | 336 | RELATED-TO | ICAL:related-to | Appendix A # 3.8.4.5 | 337 | URL | ICAL:url | Appendix A # 3.8.4.6 | 338 | UID | ICAL:uid | Appendix A # 3.8.4.7 | 339 | EXDATE | ICAL:exdate | Appendix A # 3.8.5.1 | 340 | RDATE | ICAL:rdate | Appendix A # 3.8.5.2 | 341 | RRULE | ICAL:rrule | Appendix A # 3.8.5.3 | 342 | ACTION | ICAL:action | Appendix A # 3.8.6.1 | 343 | REPEAT | ICAL:repeat | Appendix A # 3.8.6.2 | 344 | TRIGGER | ICAL:trigger | Appendix A # 3.8.6.3 | 345 | CREATED | ICAL:created | Appendix A # 3.8.7.1 | 346 | DTSTAMP | ICAL:dtstamp | Appendix A # 3.8.7.2 | 347 | LAST-MODIFIED | ICAL:last-modified | Appendix A # 3.8.7.3 | 348 | SEQUENCE | ICAL:sequence | Appendix A # 3.8.7.4 | 349 | REQUEST-STATUS | ICAL:request-status | Appendix A # 3.8.8.3 | 350 +------------------+-----------------------+-----------------------+ 352 3.4.1. Special Cases for Properties 354 Some properties in iCalendar can contain "structured" value data. 355 This includes lists of "standard" value types, as well as values with 356 specific "fields". In XML, these "structured" values are represented 357 as separate XML elements in various ways for ease of processing using 358 standard XML tools. 360 3.4.1.1. Multi-valued Properties 362 The following iCalendar properties can have values that consist of a 363 list of "standard" iCalendar values separated by a specific 364 delimiter. In XML these properties are represented by an XML element 365 that contains multiple "value" elements (Section 3.6). 367 +------------+-----------------+-----------------------+ 368 | Property | XML element | XML Definition | 369 +------------+-----------------+-----------------------+ 370 | CATEGORIES | ICAL:categories | Appendix A # 3.8.1.2 | 371 | RESOURCES | ICAL:resources | Appendix A # 3.8.1.10 | 372 | FREEBUSY | ICAL:freebusy | Appendix A # 3.8.2.6 | 373 | EXDATE | ICAL:exdate | Appendix A # 3.8.5.1 | 374 | RDATE | ICAL:rdate | Appendix A # 3.8.5.2 | 375 +------------+-----------------+-----------------------+ 377 3.4.1.2. GEO Property 379 In iCalendar, the GEO property value is defined as a semi-colon 380 separated list of two FLOAT values, the first representing latitude 381 and the second longitude. 383 In XML, the value for the ICAL:geo element is represented by an ICAL: 384 value element containing an ICAL:latitude element and an ICAL: 385 longitude element, each of which contain text values representing the 386 FLOAT values. See Appendix A # 3.8.1.6. 388 3.4.1.3. REQUEST-STATUS Property 390 In Icalendar, the REQUEST-STATUS property value is defined as a semi- 391 colon separated list of two or three TEXT values. The first 392 represents a code, the second a description, and the third (optional) 393 additional data. 395 In XML, the value for the ICAL:request-status element is represented 396 by an ICAL:value element containing an ICAL:code element, and iCAL: 397 description element, and optionally and ICAL:data element, each of 398 which contain the corresponding TEXT values. See Appendix A # 399 3.8.8.3. 401 3.5. Parameters (2445bis section 3.4) 403 iCalendar parameters are enclosed in the XML element ICAL:parameters 404 which optionally occurs once in each property XML element. 406 Each invidivual iCalendar parameter is represented in XML by an 407 element of the same name as the iCalendar parameter, but in 408 lowercase. For example, the PARTSTAT parameter is represented in XML 409 by the ICAL:partstat element. 411 Example: 413 414 415 416 ... 417 418 ... 419 420 421 NEEDS-ACTION 422 423 ... 424 425 426 428 Each parameter contains either text, or one or more child XML 429 elements representing iCalendar value types. 431 +----------------+---------------------+---------------------+ 432 | Parameter | XML element | XML Definition | 433 +----------------+---------------------+---------------------+ 434 | ALTREP | ICAL:altrep | Appendix A # 3.2.1 | 435 | CN | ICAL:cn | Appendix A # 3.2.2 | 436 | CUTYPE | ICAL:cutype | Appendix A # 3.2.3 | 437 | DELEGATED-FROM | ICAL:delegated-from | Appendix A # 3.2.4 | 438 | DELEGATED-TO | ICAL:delegated-to | Appendix A # 3.2.5 | 439 | DIR | ICAL:dir | Appendix A # 3.2.6 | 440 | ENCODING | ICAL:encoding | Appendix A # 3.2.7 | 441 | FMTTYPE | ICAL:fmttype | Appendix A # 3.2.8 | 442 | FBTYPE | ICAL:fbtype | Appendix A # 3.2.9 | 443 | LANGUAGE | ICAL:language | Appendix A # 3.2.10 | 444 | MEMBER | ICAL:member | Appendix A # 3.2.11 | 445 | PARTSTAT | ICAL:partstat | Appendix A # 3.2.12 | 446 | RANGE | ICAL:range | Appendix A # 3.2.13 | 447 | RELATED | ICAL:related | Appendix A # 3.2.14 | 448 | RELTYPE | ICAL:reltype | Appendix A # 3.2.15 | 449 | ROLE | ICAL:role | Appendix A # 3.2.16 | 450 | RSVP | ICAL:rsvp | Appendix A # 3.2.17 | 451 | SENT-BY | ICAL:sent-by | Appendix A # 3.2.18 | 452 | TZID | ICAL:tzid | Appendix A # 3.2.19 | 453 +----------------+---------------------+---------------------+ 455 3.5.1. VALUE parameter 457 iCalendar defines a VALUE parameter (Section 3.2.20 of 458 [I-D.ietf-calsify-rfc2445bis]. This parameter is not mapped to an 459 XML element. Instead, the value type is handled by having different 460 XML elements for each value, and these appear inside of ICAL:property 461 elements. Thus, when converting from iCalendar to XML, any VALUE 462 parameters are skipped. When converting from XML into iCalendar, the 463 appropriate VALUE parameter MUST be included in the iCalendar 464 property if the value type is not the default value type for that 465 property. 467 3.6. Values (2445bis section 3.3) 469 iCalendar value types are mapped into XML elements with a matching 470 name in all lowercase. In some cases, iCalendar defines "structured" 471 values and these are mapped into separate child elements in each 472 value element, as described by the simple DTD definitions below. 474 Some properties allow for multiple values and these are represented 475 by separate matching value XML elements. 477 3.6.1. Binary (2445bis section 4.3.1) 479 Description: iCalendar BINARY property values are represented by the 480 ICAL:binary XML element. The content of the element is base64 481 encoded data. Whitespace MAY be inserted into the data at any 482 point to "wrap" the data to reasonable line lengths. When 483 converting back to iCalendar the whitespace MUST first be removed. 485 XML Definition: Appendix A # 3.3.1 487 3.6.2. Boolean (2445bis section 4.3.2) 489 Description: iCalendar BOOLEAN property values are represented by 490 the ICAL:boolean XML element. The content of the element is text 491 containing either of "TRUE" or "FALSE". 493 XML Definition: Appendix A # 3.3.2 495 3.6.3. Calendar User Address (2445bis section 4.3.3) 497 Description: iCalendar CAL-ADDRESS property values are represented 498 by the ICAL:cal-address XML element. The content of the element 499 is a URI. 501 XML Definition: Appendix A # 3.3.3 503 3.6.4. Date (2445bis section 4.3.4) 504 Description: iCalendar DATE property values are represented by the 505 ICAL:date XML element. The content of the element is three child 506 elements representing the year, month and day values in the date. 508 XML Definition: Appendix A # 3.3.4 510 3.6.5. Date-Time (2445bis section 4.3.5) 512 Description: iCalendar DATE-TIME property values are represented by 513 the ICAL:date-time XML element. The content of the element is six 514 child elements representing the year, month, day, hour, minute and 515 second values in the date-time. In addition, an XML attribute is 516 used to indicate whether the date-time value represents a UTC 517 based date-time (represented by a trailing "Z" in the iCalendar 518 value). 520 XML Definition: Appendix A # 3.3.5 522 3.6.6. Duration (2445bis section 4.3.6) 524 Description: iCalendar DURATION property values are represented by 525 the ICAL:duration XML element. The content of the element is 526 various child elements representing the possible combinations of 527 week, day, hour, minute and second values. In addition, an XML 528 attribute is used to indicate whether the duration value 529 represents a positive or negative offset. 531 XML Definition: Appendix A # 3.3.6 533 3.6.7. Float (2445bis section 4.3.7) 535 Description: iCalendar FLOAT property values are represented by the 536 ICAL:float XML element. The content of the element is a text 537 representation of a floating point number. 539 XML Definition: Appendix A # 3.3.7 541 3.6.8. Integer (2445bis section 4.3.8) 543 Description: iCalendar INTEGER property values are represented by 544 the ICAL:integer XML element. The content of the element is a 545 text representation of an integer number. 547 XML Definition: Appendix A # 3.3.8 549 3.6.9. Period of Time (2445bis section 4.3.9) 551 Description: iCalendar PERIOD property values are represented by the 552 ICAL:period XML element. The content of the element is two child 553 elements representing the start date-time and end date-time or 554 positive duration. 556 XML Definition: Appendix A # 3.3.9 558 3.6.10. Recurrence Rule (2445bis section 4.3.10) 560 Description: iCalendar RECUR property values are represented by the 561 ICAL:recur XML element. The content of the element is child 562 elements representing the various components of a recurrence rule. 564 XML Definition: Appendix A # 3.3.10 566 3.6.11. Text (2445bis section 4.3.11) 568 Description: iCalendar TEXT property values are represented by the 569 ICAL:text XML element. The content of the element is simple text. 571 XML Definition: Appendix A # 3.3.11 573 3.6.12. Time (2445bis section 4.3.12) 575 Description: iCalendar TIME property values are represented by the 576 ICAL:time XML element. The content of the element is three child 577 elements representing the hour, minute and second values in the 578 time. In addition, an XML attribute is used to indicate whether 579 the time value represents a UTC based time (represented by a 580 trailing "Z" in the iCalendar value). 582 XML Definition: Appendix A # 3.3.12 584 3.6.13. URI (2445bis section 4.3.13) 586 Description: iCalendar URI property values are represented by the 587 ICAL:uri XML element. The content of the element is a URI. 589 XML Definition: Appendix A # 3.3.13 591 3.6.14. UTC Offset (2445bis section 4.3.14) 592 Description: iCalendar UTC-OFFSET property values are represented by 593 the ICAL:utc-offset XML element. The content of the element is 594 two or three child elements representing the hour, minute and 595 (optional) second values in the UTC offset. In addition, an XML 596 attribute is used to indicate whether the offset value represents 597 a positive or negative offset. 599 XML Definition: Appendix A # 3.3.14 601 3.7. Extensions 603 iCalendar extension properties and parameters (ones with an "X-" 604 prefix in their name) are handled in the same way as other properties 605 and parameters: the property or parameter is represented by an XML 606 element with the same name, but in lowercase. e.g., the "X-FOO" 607 property in iCalendar turns into the ICAL:x-foo element in XML. 609 4. Converting from XML into iCalendar 611 When converting from XML back to iCalendar, any elements in the XML 612 that are not in the "urn:ietf:params:xml:ns:icalendar" namespace MUST 613 be ignored. 615 When converting component, property and parameter values, the names 616 SHOULD be converted to uppercase. Although iCalendar names are case 617 insensitive, common practice is to keep them all uppercase following 618 the actual definitions in [I-D.ietf-calsify-rfc2445bis]. 620 Backslash escaping and line folding MUST be applied to the resulting 621 iCalendar data as required by [I-D.ietf-calsify-rfc2445bis]. 623 5. Security Considerations 625 This extension does not introduce any new security concerns than 626 those already described in iCalendar. 628 6. IANA Considerations 630 This document uses one new URN to identify a new XML namespace, and 631 one new media type. The URN conforms to a registry mechanism 632 described in [RFC3688]. 634 6.1. Namespace Registration 636 Registration request for the iCalendar namespace: 638 URI: urn:ietf:params:xml:ns:icalendar 639 Registrant Contact: See the "Authors' Addresses" section of this 640 document. 642 XML: None. Namespace URIs do not represent an XML specification. 644 6.2. Media Type 646 This section defines the MIME media type for use with iCalendar in 647 XML data. 649 To: ietf-types@iana.org 651 Subject: Registration of media type application/xml+calendar 653 Type name: application 655 Subtype name: xml+calendar 657 Required parameters: none 659 Optional parameters: charset, method, component and optinfo as 660 defined for the text/calendar media type 662 Encoding considerations: iCalendar data is typically UTF-8 and thus 663 the XML representation will follow that. As a result, for 7-bit 664 transports, data in UTF-8 MUST be encoded in quoted-printable or 665 base64. 667 Security considerations: See Section 5. 669 Interoperability considerations: This media type provides an 670 alternative syntax to iCalendar data based on XML. 672 Published specification: This specification. 674 Applications which use this media type: Applications that currently 675 make use of the text/calendar media type can use this as an 676 alternative. 678 Additional information: 680 Magic number(s): None 682 File extension(s): XML data should use "xml" as the file 683 extension. 685 Macintosh file type code(s): None specified. 687 Person & email address to contact for further information: See the 688 "Author's Address" section of this document. 690 Intended usage: COMMON 692 Restrictions on usage: There are no restrictions on where this media 693 type can be used. 695 Author: See the "Author's Address" section of this document. 697 Change controller: IETF 699 7. Acknowledgments 701 This specification originated from the work of the XML technical 702 committee of the Calendaring and Scheduling Consortium. 704 8. Normative References 706 [I-D.ietf-calsify-rfc2445bis] Desruisseaux, B., "Internet 707 Calendaring and Scheduling Core Object 708 Specification (iCalendar)", 709 draft-ietf-calsify-rfc2445bis-10 (work 710 in progress), April 2009. 712 [RFC2119] Bradner, S., "Key words for use in 713 RFCs to Indicate Requirement Levels", 714 BCP 14, RFC 2119, March 1997. 716 [RFC3688] Mealling, M., "The IETF XML Registry", 717 BCP 81, RFC 3688, January 2004. 719 Appendix A. Relax NG Schema 721 Below is a Relax NG schema for iCalendar in XML. This schema uses 722 the compact notation of Relax NG. The numeric section numbers given 723 in the comments refer to section in [I-D.ietf-calsify-rfc2445bis]. 724 The ordering of elements follows the section ordering of 725 [I-D.ietf-calsify-rfc2445bis]. 727 The Relax NG compact notation "?" operator is used to indicate an 728 unordered list of items. However, that operator, as defined, allows 729 "mixing" each element that it operates on at any depth within the 730 other elements, rather than just allowing "mixing" of siblings only. 731 As a result, the schema provided allows certain constructs that are 732 not allowed in iCalendar. Given that there is no sibling-only 733 unordered list operator in RelaxNG, this is the best representation 734 that can be given. 736 # Relax NG Schema for iCalendar in XML 738 default namespace = "urn:ietf:params:xml:ns:icalendar" 740 # 3.2 Property Parameters 742 # 3.2.1 Alternate Text Representation 744 altrepparam = element altrep { value-uri } 746 # 3.2.2 Common Name 748 cnparam = element cn { text } 750 # 3.2.3 Calendar User Type 752 cutypeparam = element cutype { 753 "INDIVIDUAL" | 754 "GROUP" | 755 "RESOURCE" | 756 "ROOM" | 757 "UNKNOWN" 758 } 760 # 3.2.4 Delegators 762 delfromparam = element delegated-from { value-cal-address+ } 764 # 3.2.5 Delegatees 766 deltoparam = element delegated-to { value-cal-address+ } 768 # 3.2.6 Directory Entry Reference 770 dirparam = element dir { value-uri } 772 # 3.2.7 Inline Encoding 774 encodingparam = element encoding { 775 "8BIT" | 776 "BASE64" 777 } 779 # 3.2.8 Format Type 780 fmttypeparam = element fmttype { text } 782 # 3.2.9 Free/Busy Time Type 784 fbtypeparam = element fbtype { 785 "FREE" | 786 "BUSY" | 787 "BUSY-UNAVAILABLE" | 788 "BUSY-TENTATIVE" 789 } 791 # 3.2.10 Language 793 languageparam = element language { text } 795 # 3.2.11 Group or List Membership 797 memberparam = element member { value-cal-address+ } 799 # 3.2.12 Participation Status 801 partstatparam = element partstat { 802 type-partstat-event | 803 type-partstat-todo | 804 type-partstat-jour 805 } 807 type-partstat-event = ( 808 "NEEDS-ACTION" | 809 "ACCEPTED" | 810 "DECLINED" | 811 "TENTATIVE" | 812 "DELEGATED" 813 ) 815 type-partstat-todo = ( 816 "NEEDS-ACTION" | 817 "ACCEPTED" | 818 "DECLINED" | 819 "TENTATIVE" | 820 "DELEGATED" | 821 "COMPLETED" | 822 "IN-PROCESS" 823 ) 825 type-partstat-jour = ( 826 "NEEDS-ACTION" | 827 "ACCEPTED" | 828 "DECLINED" 829 ) 831 # 3.2.13 Recurrence Identifier Range 833 rangeparam = element range { 834 "THISANDFUTURE" 835 } 837 # 3.2.14 Alarm Trigger Relationship 839 trigrelparam = element related { 840 "START" | 841 "END" 842 } 844 # 3.2.15 Relationship Type 846 reltypeparam = element reltype { 847 "PARENT" | 848 "CHILD" | 849 "SIBLING" 850 } 852 # 3.2.16 Participation Role 854 roleparam = element role { 855 "CHAIR" | 856 "REQ-PARTICIPANT" | 857 "OPT-PARTICIPANT" | 858 "NON-PARTICIPANT" 859 } 861 # 3.2.17 RSVP Expectation 863 rsvpparam = element rsvp { 864 "TRUE" | 865 "FALSE" 866 } 868 # 3.2.18 Sent By 870 sentbyparam = element sent-by { value-cal-address } 872 # 3.2.19 Time Zone Identifier 874 tzidparam = element tzid { text } 875 # 3.3 Property Value Data Types 877 # 3.3.1 BINARY 879 value-binary = element binary { text } 881 # 3.3.2 BOOLEAN 883 value-boolean = element boolean { 884 ("TRUE" | "FALSE") 885 } 887 # 3.3.3 CAL-ADDRESS 889 value-cal-address = element cal-address { text } 891 # 3.3.4 DATE 893 value-date = element date { 894 element year { text }, 895 element month { text }, 896 element day { text } 897 } 899 # 3.3.5 DATE-TIME 901 value-date-time = element date-time { 902 attribute utc { "yes" | "no" }, 903 element year { text }, 904 element month { text }, 905 element day { text }, 906 element hour { text }, 907 element minute { text }, 908 element second { text } 909 } 911 # 3.3.6 DURATION 913 value-duration = element duration { 914 attribute sign { "+" | "-" }, 915 ( 916 ( 917 element day { text }, 918 element hour { text }?, 919 element minute { text }?, 920 element second { text }? 921 ) | 922 ( 923 element hour { text }, 924 element minute { text }?, 925 element second { text }? 926 ) | 927 ( 928 element minute { text }, 929 element second { text }? 930 ) | 931 ( 932 element second { text } 933 ) | 934 element week { text } 935 ) 936 } 938 # 3.3.7 FLOAT 940 value-float = element float { text } 942 # 3.3.8 INTEGER 944 value-integer = element integer { text } 946 # 3.3.9 PERIOD 948 value-period = element period { 949 value-date-time, 950 ( 951 value-date-time | 952 value-duration 953 ) 954 } 956 # 3.3.10 RECUR 958 value-recur = element recur { 959 type-freq, 960 (type-until | type-count)?, 961 element interval { text }?, 962 element bysecond { text }*, 963 element byminute { text }*, 964 element byhour { text }*, 965 type-byday*, 966 type-bymonthday*, 967 type-byyearday*, 968 type-byweekno*, 969 element bymonth { text }*, 970 type-bysetpos*, 971 element wkst { type-weekday }? 972 } 974 type-freq = element freq { 975 "SECONDLY" | 976 "MINUTELY" | 977 "HOURLY" | 978 "DAILY" | 979 "WEEKLY" | 980 "MONTHLY" | 981 "YEARLY" 982 } 984 type-until = element until { 985 type-date | 986 type-date-time 987 } 989 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 } 1019 type-bysetpos = element bysetpos { 1020 text 1021 } 1023 # 3.3.11 TEXT 1025 value-text = element text { text } 1027 # 3.3.12 TIME 1029 value-time = element time { 1030 attribute utc { "yes" | "no" }, 1031 element hour { text }, 1032 element minute { text }, 1033 element second { text } 1034 } 1036 # 3.3.13 URI 1038 value-uri = element uri { text } 1040 # 3.3.14 UTC-OFFSET 1042 value-utc-offset = element utc-offset { 1043 attribute sign { "+" | "-" }, 1044 element hour { text }, 1045 element minute { text }, 1046 element second { text }? 1047 } 1049 # 3.4 iCalendar Stream 1051 start = element icalendar { vcalendar+ } 1053 # 3.6 Calendar Components 1055 vcalendar = element vcalendar { 1056 type-calprops, 1057 type-component 1058 } 1060 type-calprops = element properties { 1061 property-prodid & 1062 property-version & 1063 property-calscale? & 1064 property-method? 1065 } 1066 type-component = element components { 1067 ( 1068 component-vevent | 1069 component-vtodo | 1070 component-vjournal | 1071 component-vfreebusy | 1072 component-vtimezone 1073 )* 1074 } 1076 # 3.6.1 Event Component 1078 component-vevent = element vevent { 1079 type-eventprop, 1080 element components { 1081 component-valarm+ 1082 }? 1083 } 1085 type-eventprop = element properties { 1086 property-dtstamp & 1087 property-dtstart & 1088 property-uid & 1090 property-class? & 1091 property-created? & 1092 property-description? & 1093 property-geo? & 1094 property-last-mod? & 1095 property-location? & 1096 property-organizer? & 1097 property-priority? & 1098 property-seq? & 1099 property-status-event? & 1100 property-summary? & 1101 property-transp? & 1102 property-url? & 1103 property-recurid? & 1105 property-rrule? & 1107 (property-dtend | property-duration)? & 1109 property-attach* & 1110 property-attendee* & 1111 property-categories* & 1112 property-comment* & 1113 property-contact* & 1114 property-exdate* & 1115 property-rstatus* & 1116 property-related* & 1117 property-resources* & 1118 property-rdate* 1119 } 1121 # 3.6.2 To-do Component 1123 component-vtodo = element vtodo { 1124 type-todoprop, 1125 element components { 1126 component-valarm+ 1127 }? 1128 } 1130 type-todoprop = element properties { 1131 property-dtstamp & 1132 property-uid & 1134 property-class? & 1135 property-completed? & 1136 property-created? & 1137 property-description? & 1138 property-geo? & 1139 property-last-mod? & 1140 property-location? & 1141 property-organizer? & 1142 property-percent? & 1143 property-priority? & 1144 property-recurid? & 1145 property-seq? & 1146 property-status-todo? & 1147 property-summary? & 1148 property-url? & 1150 property-rrule? & 1152 ( 1153 (property-dtstart?, property-dtend? ) | 1154 (property-dtstart, property-duration)? 1155 ) & 1157 property-attach* & 1158 property-attendee* & 1159 property-categories* & 1160 property-comment* & 1161 property-contact* & 1162 property-exdate* & 1163 property-rstatus* & 1164 property-related* & 1165 property-resources* & 1166 property-rdate* 1167 } 1169 # 3.6.3 Journal Component 1171 component-vjournal = element vjournal { 1172 type-jourprop 1173 } 1175 type-jourprop = element properties { 1176 property-dtstamp & 1177 property-uid & 1179 property-class? & 1180 property-created? & 1181 property-dtstart? & 1182 property-last-mod? & 1183 property-organizer? & 1184 property-recurid? & 1185 property-seq? & 1186 property-status-jour? & 1187 property-summary? & 1188 property-url? & 1190 property-rrule? & 1192 property-attach* & 1193 property-attendee* & 1194 property-categories* & 1195 property-comment* & 1196 property-contact* & 1197 property-description? & 1198 property-exdate* & 1199 property-related* & 1200 property-rdate* & 1201 property-rstatus* 1202 } 1204 # 3.6.4 Free/Busy Component 1206 component-vfreebusy = element vfreebusy { 1207 type-fbprop 1208 } 1209 type-fbprop = element properties { 1210 property-dtstamp & 1211 property-uid & 1213 property-contact? & 1214 property-dtstart? & 1215 property-dtend? & 1216 property-duration? & 1217 property-organizer? & 1218 property-url? & 1220 property-attendee* & 1221 property-comment* & 1222 property-freebusy* & 1223 property-rstatus* 1224 } 1226 # 3.6.5 Time Zone Component 1228 component-vtimezone = element vtimezone { 1229 element properties { 1230 property-tzid & 1232 property-last-mod? & 1233 property-tzuurl? 1234 }, 1235 element components { 1236 (component-standard | component-daylight) & 1237 component-standard* & 1238 component-daylight* 1239 } 1240 } 1242 component-standard = element standard { 1243 type-tzprop 1244 } 1246 component-daylight = element daylight { 1247 type-tzprop 1248 } 1250 type-tzprop = element properties { 1251 property-dtstart & 1252 property-tzoffsetto & 1253 property-tzoffsetfrom & 1255 property-rrule? & 1256 property-comment* & 1257 property-rdate* & 1258 property-tzname* 1259 } 1261 # 3.6.6 Alarm Component 1263 component-valarm = element valarm { 1264 audioprop | dispprop | emailprop 1265 } 1267 type-audioprop = element properties { 1268 property-action & 1269 property-trigger & 1271 (property-duration, property-repeat)? & 1273 property-attach? 1274 } 1276 type-dispprop = element properties { 1277 property-action & 1278 property-description & 1279 property-trigger & 1280 property-summary & 1282 property-attendee+ & 1284 (property-duration, property-repeat)? & 1286 property-attach* 1287 } 1289 type-emailprop = element properties { 1290 property-action & 1291 property-description & 1292 property-trigger & 1294 (property-duration, property-repeat)? 1295 } 1297 # 3.7 Calendar Properties 1299 # 3.7.1 Calendar Scale 1301 property-calscale = element calscale { 1303 element parameters { empty }?, 1304 element text { "GREGORIAN" } 1305 } 1307 # 3.7.2 Method 1309 property-method = element method { 1311 element parameters { empty }?, 1313 value-text 1314 } 1316 # 3.7.3 Product Identifier 1318 property-prodid = element prodid { 1320 element parameters { empty }?, 1322 value-text 1323 } 1325 # 3.7.4 Version 1327 property-version = element version { 1329 element parameters { empty }?, 1331 value-text 1332 } 1334 # 3.8 Component Properties 1336 # 3.8.1 Descriptive Component Properties 1338 # 3.8.1.1 Attachment 1340 property-attach = element attach { 1342 element parameters { 1343 fmttypeparam? & 1344 encodingparam? 1345 }?, 1347 value-uri | value-binary 1348 } 1350 # 3.8.1.2 Categories 1351 property-categories = element categories { 1353 element parameters { 1354 languageparam? & 1355 }?, 1357 value-text+ 1358 } 1360 # 3.8.1.3 Classification 1362 property-class = element class { 1364 element parameters { empty }?, 1366 element text { 1367 "PUBLIC" | 1368 "PRIVATE" | 1369 "CONFIDENTIAL" 1370 } 1371 } 1373 # 3.8.1.4 Comment 1375 property-comment = element comment { 1377 element parameters { 1378 altrepparam? & 1379 languageparam? 1380 }?, 1382 value-text 1383 } 1385 # 3.8.1.5 Description 1387 property-description = element description { 1389 element parameters { 1390 altrepparam? & 1391 languageparam? 1392 }?, 1394 value-text 1395 } 1397 # 3.8.1.6 Geographic Position 1398 property-geo = element geo { 1400 element parameters { empty }?, 1402 element value { 1403 element latitude { text }, 1404 element longitude { text } 1405 } 1406 } 1408 # 3.8.1.7 Location 1410 property-location = element location { 1412 element parameters { 1413 altrepparam? & 1414 languageparam? 1415 }?, 1417 value-text 1418 } 1420 # 3.8.1.8 Percent Complete 1422 property-percent = element percent-complete { 1424 element parameters { empty }?, 1426 value-integer 1427 } 1429 # 3.8.1.9 Priority 1431 property-priority = element priority { 1433 element parameters { empty }?, 1435 value-integer 1436 } 1438 # 3.8.1.10 Resources 1440 property-resources = element resources { 1442 element parameters { 1443 altrepparam? & 1444 languageparam? 1445 }?, 1446 value-text+ 1447 } 1449 # 3.8.1.11 Status 1451 property-status-event = element status { 1453 element parameters { empty }?, 1455 element text { 1456 "TENTATIVE" | 1457 "CONFIRMED" | 1458 "CANCELLED" 1459 } 1460 } 1462 property-status-todo = element status { 1464 element parameters { empty }?, 1466 element text { 1467 "NEEDS-ACTION" | 1468 "COMPLETED" | 1469 "IN-PROCESS" | 1470 "CANCELLED" 1471 } 1472 } 1474 property-status-jour = element status { 1476 element parameters { empty }?, 1478 element text { 1479 "DRAFT" | 1480 "FINAL" | 1481 "CANCELLED" 1482 } 1483 } 1485 # 3.8.1.12 Summary 1487 property-summary = element summary { 1489 element parameters { 1490 altrepparam? & 1491 languageparam? 1492 }?, 1493 value-text 1494 } 1496 # 3.8.2 Date and Time Component Properties 1498 # 3.8.2.1 Date/Time Completed 1500 property-completed = element completed { 1502 element parameters { empty }?, 1504 value-date-time 1505 } 1507 # 3.8.2.2 Date/Time End 1509 property-dtend = element dtend { 1511 element parameters { 1512 tzidparam? 1513 }?, 1515 value-date-time | 1516 value-date 1517 } 1519 # 3.8.2.3 Date/Time Due 1521 property-due = element due { 1523 element parameters { 1524 tzidparam? 1525 }?, 1527 value-date-time | 1528 value-date 1529 } 1531 # 3.8.2.4 Date/Time Start 1533 property-dtstart = element dtstart { 1535 element parameters { 1536 tzidparam? 1537 }?, 1539 value-date-time | 1540 value-date 1542 } 1544 # 3.8.2.5 Duration 1546 property-duration = element duration { 1548 element parameters { empty }?, 1550 value-duration 1551 } 1553 # 3.8.2.6 Free/Busy Time 1555 property-freebusy = element freebusy { 1557 element parameters { 1558 fbtypeparam? 1559 }?, 1561 value-period+ 1562 } 1564 # 3.8.2.7 Time Transparency 1566 property-transp = element transp { 1568 element parameters { empty }?, 1570 element text { 1571 "OPAQUE" | 1572 "TRANSPARENT" 1573 } 1574 } 1576 # 3.8.3 Time Zone Component Properties 1578 # 3.8.3.1 Time Zone Identifier 1580 property-tzid = element tzid { 1582 element parameters { empty }?, 1584 value-text 1585 } 1587 # 3.8.3.2 Time Zone Name 1588 property-tzname = element tzname { 1590 element parameters { 1591 languageparam? 1592 }?, 1594 value-text 1595 } 1597 # 3.8.3.3 Time Zone Offset From 1599 property-tzoffsetfrom = element tzoffsetfrom { 1601 element parameters { empty }?, 1603 value-utc-offset 1604 } 1606 # 3.8.3.4 Time Zone Offset To 1608 property-tzoffsetto = element tzoffsetto { 1610 element parameters { empty }?, 1612 value-utc-offset 1613 } 1615 # 3.8.3.5 Time Zone URL 1617 property-tzurl = element tzurl { 1619 element parameters { empty }?, 1621 value-uri 1622 } 1624 # 3.8.4 Relationship Component Properties 1626 # 3.8.4.1 Attendee 1628 property-attendee = element attendee { 1630 element parameters { 1631 cutypeparam? & 1632 memberparam? & 1633 roleparam? & 1634 partstatparam? & 1635 rsvpparam? & 1636 deltoparam? & 1637 delfromparam? & 1638 sentbyparam? & 1639 cnparam? & 1640 dirparam? & 1641 languageparam? 1642 }?, 1644 value-cal-address 1645 } 1647 # 3.8.4.2 Contact 1649 property-contact = element contact { 1651 element parameters { 1652 altrepparam? & 1653 languageparam? 1654 }?, 1656 value-text 1657 } 1659 # 3.8.4.3 Organizer 1661 property-organizer = element organizer { 1663 element parameters { 1664 cnparam? & 1665 dirparam? & 1666 sentbyparam? & 1667 languageparam? 1668 }?, 1670 value-cal-address 1671 } 1673 # 3.8.4.4 Recurrence ID 1675 property-recurid = element recurrence-id { 1677 element parameters { 1678 tzidparam? & 1679 rangeparam? 1680 }?, 1682 value-date-time | 1683 value-date 1685 } 1687 # 3.8.4.5 Related-To 1689 property-related = element related-to { 1691 element parameters { 1692 reltypeparam? 1693 }?, 1695 value-text 1696 } 1698 # 3.8.4.6 Uniform Resource Locator 1700 property-url = element url { 1702 element parameters { empty }?, 1704 value-uri 1705 } 1707 # 3.8.4.7 Unique Identifier 1709 property-uid = element uid { 1711 element parameters { empty }?, 1713 value-text 1714 } 1716 # 3.8.5 Recurrence Component Properties 1718 # 3.8.5.1 Exception Date/Times 1720 property-exdate = element exdate { 1722 element parameters { 1723 tzidparam? 1724 }?, 1726 value-date-time+ | 1727 value-date+ 1728 } 1730 # 3.8.5.2 Recurrence Date/Times 1732 property-rdate = element rdate { 1733 element parameters { 1734 tzidparam? 1735 }?, 1737 value-date-time+ | 1738 value-date+ | 1739 value-period+ 1740 } 1742 # 3.8.5.3 Recurrence Rule 1744 property-rrule = element rrule { 1746 element parameters { empty }?, 1748 value-recur 1749 } 1751 # 3.8.6 Alarm Component Properties 1753 # 3.8.6.1 Action 1755 property-action = element action { 1757 element parameters { empty }?, 1759 element text { 1760 "AUDIO" | 1761 "DISPLAY" | 1762 "EMAIL" 1763 } 1764 } 1766 # 3.8.6.2 Repeat Count 1768 property-repeat = element repeat { 1770 element parameters { empty }?, 1772 value-integer 1773 } 1775 # 3.8.6.3 Trigger 1777 property-repeat = element repeat { 1779 ( 1780 element parameters { 1781 trigrelparam? 1782 }?, 1784 value-duration 1785 ) | 1786 ( 1787 element parameters { empty }?, 1789 value-date-time 1790 ) 1791 } 1793 # 3.8.7 Change Management Component Properties 1795 # 3.8.7.1 Date/Time Created 1797 property-created = element created { 1799 element parameters { empty }?, 1801 value-date-time 1802 } 1804 # 3.8.7.2 Date/Time Stamp 1806 property-dtstamp = element dtstamp { 1808 element parameters { empty }?, 1810 value-date-time 1811 } 1813 # 3.8.7.3 Last Modified 1815 property-last-mod = element last-modified { 1817 element parameters { empty }?, 1819 value-date-time 1820 } 1822 # 3.8.7.4 Sequence Number 1824 property-seq = element sequence { 1826 element parameters { empty }?, 1828 value-integer 1830 } 1832 # 3.8.8 Miscellaneous Component Properties 1834 # 3.8.8.3 Request Status 1836 property-rstatus = element request-status { 1838 element parameters { 1839 languageparam? 1840 }?, 1842 element value { 1843 element code { text }, 1844 element description { text }, 1845 element data { text }? 1846 } 1847 } 1849 Appendix B. XML Stylesheet for conversion to iCalendar 1851 TO DO 1853 Appendix C. Example 1855 Below is some example iCalendar data and its representation in XML as 1856 defined by this specification. 1858 C.1. iCalendar Data 1860 BEGIN:VCALENDAR 1861 CALSCALE:GREGORIAN 1862 PRODID:-//Example Inc.//Example Calendar//EN 1863 VERSION:2.0 1864 BEGIN:VEVENT 1865 DTSTAMP:20080205T191224Z 1866 DTSTART:20081006 1867 SUMMARY:Planning meeting 1868 UID:4088E990AD89CB3DBB484909 1869 END:VEVENT 1870 END:VCALENDAR 1872 C.2. XML Data 1874 1875 1876 1877 1878 GREGORIAN 1879 1880 -//Example Inc.//Example Calendar//EN 1881 1882 2.0 1883 1884 1885 1886 1887 1888 1889 200825 1890 191224 1891 1892 1893 1894 1895 2008106 1896 1897 1898 1899 Planning meeting 1900 1901 1902 4088E990AD89CB3DBB484909 1903 1904 1905 1906 1907 1908 1910 Authors' Addresses 1912 Cyrus Daboo 1913 Apple Inc. 1914 1 Infinite Loop 1915 Cupertino, CA 95014 1916 USA 1918 EMail: cyrus@daboo.name 1919 URI: http://www.apple.com/ 1921 Mike Douglass 1922 Rensselaer Polytechnic Institute 1923 110 8th Street 1924 Troy, NY 12180 1925 USA 1927 EMail: douglm@rpi.edu 1928 URI: http://www.rpi.edu/ 1930 Steven Lees 1931 Microsoft Corporation 1932 One Microsoft Way 1933 Redmond, WA 98052 1934 USA 1936 EMail: Steven.Lees@microsoft.com 1937 URI: http://www.microsoft.com/