1
2
3
4
5
6
7Internet Engineering Task Force (IETF) C. Daboo
8Request for Comments: 6321 Apple, Inc.
9Category: Standards Track M. Douglass
10ISSN: 2070-1721 RPI
11 S. Lees
12 Microsoft
13 August 2011
14
15
16 xCal: The XML Format for iCalendar
17
18Abstract
19
20 This specification defines "xCal", an XML format for iCalendar data.
21
22Status of This Memo
23
24 This is an Internet Standards Track document.
25
26 This document is a product of the Internet Engineering Task Force
27 (IETF). It represents the consensus of the IETF community. It has
28 received public review and has been approved for publication by the
29 Internet Engineering Steering Group (IESG). Further information on
30 Internet Standards is available in Section 2 of RFC 5741.
31
32 Information about the current status of this document, any errata,
33 and how to provide feedback on it may be obtained at
34 http://www.rfc-editor.org/info/rfc6321.
35
36Copyright Notice
37
38 Copyright (c) 2011 IETF Trust and the persons identified as the
39 document authors. All rights reserved.
40
41 This document is subject to BCP 78 and the IETF Trust's Legal
42 Provisions Relating to IETF Documents
43 (http://trustee.ietf.org/license-info) in effect on the date of
44 publication of this document. Please review these documents
45 carefully, as they describe your rights and restrictions with respect
46 to this document. Code Components extracted from this document must
47 include Simplified BSD License text as described in Section 4.e of
48 the Trust Legal Provisions and are provided without warranty as
49 described in the Simplified BSD License.
50
51
52
53
54
55
56
57
58Daboo, et al. Standards Track [Page 1]
59
60RFC 6321 xCal August 2011
61
62
63Table of Contents
64
65 1. Introduction ....................................................3
66 2. Conventions Used in This Document ...............................4
67 3. Converting from iCalendar to xCal ...............................4
68 3.1. Pre-Processing .............................................4
69 3.2. iCalendar Stream (RFC 5545, Section 3.4) ...................5
70 3.3. Components (RFC 5545, Section 3.6) .........................6
71 3.4. Properties (RFC 5545, Sections 3.7 and 3.8) ................6
72 3.4.1. Special Cases for Properties ........................8
73 3.4.1.1. Multi-Valued Properties ....................8
74 3.4.1.2. GEO Property ...............................9
75 3.4.1.3. REQUEST-STATUS Property ....................9
76 3.5. Parameters (RFC 5545, Section 3.2) ........................10
77 3.5.1. VALUE Parameter ....................................11
78 3.6. Values (RFC 5545, Section 3.3) ............................11
79 3.6.1. Binary (RFC 5545, Section 3.3.1) ...................12
80 3.6.2. Boolean (RFC 5545, Section 3.3.2) .................12
81 3.6.3. Calendar User Address (RFC 5545, Section 3.3.3) ....12
82 3.6.4. Date (RFC 5545, Section 3.3.4) .....................12
83 3.6.5. Date-Time (RFC 5545, Section 3.3.5) ................13
84 3.6.6. Duration (RFC 5545, Section 3.3.6) .................13
85 3.6.7. Float (RFC 5545, Section 3.3.7) ....................13
86 3.6.8. Integer (RFC 5545, Section 3.3.8) ..................14
87 3.6.9. Period of Time (RFC 5545, Section 3.3.9) ...........14
88 3.6.10. Recurrence Rule (RFC 5545, Section 3.3.10) ........14
89 3.6.11. Text (RFC 5545, Section 3.3.11) ...................15
90 3.6.12. Time (RFC 5545, Section 3.3.12) ...................15
91 3.6.13. URI (RFC 5545, Section 3.3.13) ....................15
92 3.6.14. UTC Offset (RFC 5545, Section 3.3.14) .............16
93 3.7. Extensions ................................................16
94 4. Converting from xCal into iCalendar ............................16
95 4.1. Converting XML Extensions into iCalendar ..................16
96 4.2. The XML Property for iCalendar ............................17
97 5. Handling Unrecognized Properties or Parameters .................18
98 6. Security Considerations ........................................19
99 7. IANA Considerations ............................................20
100 7.1. Namespace Registration ....................................20
101 7.2. Media Type ................................................20
102 7.3. iCalendar Property Registrations ..........................21
103 8. Acknowledgments ................................................22
104 9. References .....................................................22
105 9.1. Normative References ......................................22
106 9.2. Informative References ....................................22
107
108
109
110
111
112
113
114Daboo, et al. Standards Track [Page 2]
115
116RFC 6321 xCal August 2011
117
118
119 Appendix A. RELAX NG Schema .......................................23
120 Appendix B. Examples ..............................................49
121 B.1. Example 1 ..................................................49
122 B.1.1. iCalendar Data .........................................49
123 B.1.2. XML Data ...............................................49
124 B.2. Example 2 ..................................................50
125 B.2.1. iCalendar Data .........................................50
126 B.2.2. XML Data ...............................................51
127
1281. Introduction
129
130 The iCalendar data format [RFC5545] is a widely deployed interchange
131 format for calendaring and scheduling data. While many applications
132 and services consume and generate calendar data, iCalendar is a
133 specialized format that requires its own parser/generator. In
134 contrast, XML-based formats are widely used for interoperability
135 between applications, and the many tools that generate, parse, and
136 manipulate XML make it easier to work with than iCalendar.
137
138 The purpose of this specification is to define "xCal", an XML format
139 for iCalendar data. xCal is defined as a straightforward mapping into
140 XML from iCalendar, so that iCalendar data can be converted to XML,
141 and then back to iCalendar, without losing any semantic meaning in
142 the data. Anyone creating xCal calendar data according to this
143 specification will know that their data can be converted to a valid
144 iCalendar representation as well.
145
146 Key design considerations are:
147
148 Round-tripping (converting an iCalendar instance to xCal and back)
149 will give the same semantic result as the starting point. That
150 is, all components, properties, and property parameters are
151 guaranteed to be preserved, with the exception of those that have
152 default values.
153
154 xCal preserves the semantics of the iCalendar data. While a
155 simple consumer can easily browse the calendar data in xCal, a
156 full understanding of iCalendar is still required in order to
157 modify and/or fully comprehend the calendar data.
158
159 xCal has the ability to handle many extensions to the underlying
160 iCalendar specification without requiring an update to this
161 document.
162
163
164
165
166
167
168
169
170Daboo, et al. Standards Track [Page 3]
171
172RFC 6321 xCal August 2011
173
174
1752. Conventions Used in This Document
176
177 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
178 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
179 document are to be interpreted as described in [RFC2119].
180
181 When XML element types in the namespace
182 "urn:ietf:params:xml:ns:icalendar-2.0" are referenced in this
183 document outside of the context of an XML fragment, the string "IC:"
184 will be prefixed to the element types.
185
186 Some examples in this document contain "partial" XML documents used
187 for illustrative purposes. In these examples, three periods "..."
188 are used to indicate a portion of the document that has been removed
189 for compactness.
190
1913. Converting from iCalendar to xCal
192
193 This section describes how iCalendar data is converted to xCal using
194 a simple mapping between the iCalendar data model and XML elements.
195
1963.1. Pre-Processing
197
198 iCalendar uses a line folding mechanism to limit lines of data to a
199 maximum line length (typically 72 characters) to ensure maximum
200 likelihood of preserving data integrity as it is transported via
201 various means (e.g., email) -- see Section 3.1 of [RFC5545]. Prior
202 to converting iCalendar data into xCal, all folded lines MUST be
203 unfolded.
204
205 iCalendar data uses an "escape" character sequence for text values
206 and property parameter values. When such text elements are converted
207 into xCal, the escaping MUST be removed.
208
209 iCalendar uses a base64 encoding for binary data. However, it does
210 not restrict the encoding from being applied to non-binary value
211 types. So, the following rules MUST be applied when processing a
212 property with the "ENCODING" property parameter set to "BASE64":
213
214 o If the property value type is "BINARY", the base64 encoding MUST
215 be preserved.
216
217 o If the value type is not "BINARY", the "ENCODING" property
218 parameter MUST be removed, and the value MUST be base64 decoded.
219
220 When base64 encoding and decoding are used, they MUST conform to
221 Section 4 of [RFC4648], which is the base64 method used in [RFC5545].
222
223
224
225
226Daboo, et al. Standards Track [Page 4]
227
228RFC 6321 xCal August 2011
229
230
231 One key difference in the formatting of values used in iCalendar and
232 xCal is that, in xCal, the specification uses date/time and UTC
233 offset values aligned with the syntax of
234 [W3C.REC-xmlschema-2-20041028] to aid with XML processing.
235
2363.2. iCalendar Stream (RFC 5545, Section 3.4)
237
238 At the top level of the iCalendar object model is an "iCalendar
239 stream". This object encompasses multiple "iCalendar objects". In
240 xCal, the entire stream is contained in the root IC:icalendar XML
241 element.
242
243 An iCalendar stream can contain one or more iCalendar objects. Each
244 iCalendar object, delimited by "BEGIN:VCALENDAR" and "END:VCALENDAR",
245 is enclosed by the IC:vcalendar XML element.
246
247 Example:
248
249 <?xml version="1.0" encoding="utf-8"?>
250 <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
251 <vcalendar>
252 ...
253 </vcalendar>
254 </icalendar>
255
256 iCalendar objects are comprised of a set of "components",
257 "properties", "parameters", and "values". A "component" can contain
258 other "components" or "properties". A "property" has a value and a
259 set of zero or more "parameters".
260
261 In xCal, component elements, for example, IC:vevent and IC:vtodo, are
262 contained within an IC:components XML element. Within the component
263 element, another IC:components element could appear (representing
264 components nested within components) or the IC:properties XML element
265 could appear. IC:properties is used to encapsulate iCalendar
266 properties.
267
268 Each iCalendar property will be mapped to its own XML element as
269 described below. Within each of these elements, there is zero or one
270 IC:parameters XML element used to encapsulate any iCalendar property
271 parameters. Additionally there will be one or more XML elements
272 representing the value of the iCalendar property.
273
274
275
276
277
278
279
280
281
282Daboo, et al. Standards Track [Page 5]
283
284RFC 6321 xCal August 2011
285
286
287 Example:
288
289 <?xml version="1.0" encoding="utf-8"?>
290 <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
291 <vcalendar>
292 <properties>
293 ...
294 </properties>
295 <components>
296 ...
297 </components>
298 </vcalendar>
299 </icalendar>
300
301 +------------------+--------------+------------------+
302 | Item | XML element | XML Definition |
303 +------------------+--------------+------------------+
304 | iCalendar Stream | IC:icalendar | Appendix A # 3.4 |
305 | VCALENDAR | IC:vcalendar | Appendix A # 3.6 |
306 +------------------+--------------+------------------+
307
3083.3. Components (RFC 5545, Section 3.6)
309
310 Each calendar component in the "VCALENDAR" object, delimited by
311 "BEGIN" and "END", will be converted to an enclosing XML element with
312 the same name, but in lowercase. As an example, the table below
313 shows iCalendar-to-xCal mappings for current iCalendar components.
314 Any new iCalendar components added in the future will be converted in
315 the same way.
316
317 +-----------+--------------+--------------------+
318 | Component | XML element | XML Definition |
319 +-----------+--------------+--------------------+
320 | VEVENT | IC:vevent | Appendix A # 3.6.1 |
321 | VTODO | IC:vtodo | Appendix A # 3.6.2 |
322 | VJOURNAL | IC:vjournal | Appendix A # 3.6.3 |
323 | VFREEBUSY | IC:vfreebusy | Appendix A # 3.6.4 |
324 | VTIMEZONE | IC:vtimezone | Appendix A # 3.6.5 |
325 | STANDARD | IC:standard | Appendix A # 3.6.5 |
326 | DAYLIGHT | IC:daylight | Appendix A # 3.6.5 |
327 | VALARM | IC:valarm | Appendix A # 3.6.6 |
328 +-----------+--------------+--------------------+
329
3303.4. Properties (RFC 5545, Sections 3.7 and 3.8)
331
332 iCalendar properties, whether they apply to the "VCALENDAR" object or
333 to a component, are handled in a consistent way in the xCal format.
334
335
336
337
338Daboo, et al. Standards Track [Page 6]
339
340RFC 6321 xCal August 2011
341
342
343 iCalendar properties are enclosed in the XML element IC:properties.
344
345 Each individual iCalendar property is represented in xCal by an
346 element of the same name as the iCalendar property, but in lowercase.
347 For example, the "CALSCALE" property is represented in xCal by the
348 IC:calscale element.
349
350 Example:
351
352 <?xml version="1.0" encoding="utf-8"?>
353 <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
354 <vcalendar>
355 <properties>
356 <calscale>...</calscale>
357 <version>...</version>
358 <prodid>...</prodid>
359 </properties>
360 <components>
361 ...
362 </components>
363 </vcalendar>
364 </icalendar>
365
366 Each property can contain an IC:parameters XML element encapsulating
367 any iCalendar property parameters associated with the iCalendar
368 property.
369
370 Each property will contain one or more "value" XML elements as
371 described below representing the value of the iCalendar property.
372
373 As an example, the table below shows iCalendar-to-xCal mappings for
374 current iCalendar properties. Any new iCalendar properties added in
375 the future will be converted in the same way.
376
377 +------------------+---------------------+-----------------------+
378 | Property | XML element | XML Definition |
379 +------------------+---------------------+-----------------------+
380 | CALSCALE | IC:calscale | Appendix A # 3.7.1 |
381 | METHOD | IC:method | Appendix A # 3.7.2 |
382 | PRODID | IC:prodid | Appendix A # 3.7.3 |
383 | VERSION | IC:version | Appendix A # 3.7.4 |
384 | ATTACH | IC:attach | Appendix A # 3.8.1.1 |
385 | CATEGORIES | IC:categories | Appendix A # 3.8.1.2 |
386 | CLASS | IC:class | Appendix A # 3.8.1.3 |
387 | COMMENT | IC:comment | Appendix A # 3.8.1.4 |
388 | DESCRIPTION | IC:description | Appendix A # 3.8.1.5 |
389 | GEO | IC:geo | Appendix A # 3.8.1.6 |
390 | LOCATION | IC:location | Appendix A # 3.8.1.7 |
391
392
393
394Daboo, et al. Standards Track [Page 7]
395
396RFC 6321 xCal August 2011
397
398
399 | PERCENT-COMPLETE | IC:percent-complete | Appendix A # 3.8.1.8 |
400 | PRIORITY | IC:priority | Appendix A # 3.8.1.9 |
401 | RESOURCES | IC:resources | Appendix A # 3.8.1.10 |
402 | STATUS | IC:status | Appendix A # 3.8.1.11 |
403 | SUMMARY | IC:summary | Appendix A # 3.8.1.12 |
404 | COMPLETED | IC:completed | Appendix A # 3.8.2.1 |
405 | DTEND | IC:dtend | Appendix A # 3.8.2.2 |
406 | DUE | IC:due | Appendix A # 3.8.2.3 |
407 | DTSTART | IC:dtstart | Appendix A # 3.8.2.4 |
408 | DURATION | IC:duration | Appendix A # 3.8.2.5 |
409 | FREEBUSY | IC:freebusy | Appendix A # 3.8.2.6 |
410 | TRANSP | IC:transp | Appendix A # 3.8.2.7 |
411 | TZID | IC:tzid | Appendix A # 3.8.3.1 |
412 | TZNAME | IC:tzname | Appendix A # 3.8.3.2 |
413 | TZOFFSETFROM | IC:tzoffsetfrom | Appendix A # 3.8.3.3 |
414 | TZOFFSETTO | IC:tzoffsetto | Appendix A # 3.8.3.4 |
415 | TZURL | IC:tzurl | Appendix A # 3.8.3.5 |
416 | ATTENDEE | IC:attendee | Appendix A # 3.8.4.1 |
417 | CONTACT | IC:contact | Appendix A # 3.8.4.2 |
418 | ORGANIZER | IC:organizer | Appendix A # 3.8.4.3 |
419 | RECURRENCE-ID | IC:recurrence-id | Appendix A # 3.8.4.4 |
420 | RELATED-TO | IC:related-to | Appendix A # 3.8.4.5 |
421 | URL | IC:url | Appendix A # 3.8.4.6 |
422 | UID | IC:uid | Appendix A # 3.8.4.7 |
423 | EXDATE | IC:exdate | Appendix A # 3.8.5.1 |
424 | RDATE | IC:rdate | Appendix A # 3.8.5.2 |
425 | RRULE | IC:rrule | Appendix A # 3.8.5.3 |
426 | ACTION | IC:action | Appendix A # 3.8.6.1 |
427 | REPEAT | IC:repeat | Appendix A # 3.8.6.2 |
428 | TRIGGER | IC:trigger | Appendix A # 3.8.6.3 |
429 | CREATED | IC:created | Appendix A # 3.8.7.1 |
430 | DTSTAMP | IC:dtstamp | Appendix A # 3.8.7.2 |
431 | LAST-MODIFIED | IC:last-modified | Appendix A # 3.8.7.3 |
432 | SEQUENCE | IC:sequence | Appendix A # 3.8.7.4 |
433 | REQUEST-STATUS | IC:request-status | Appendix A # 3.8.8.3 |
434 +------------------+---------------------+-----------------------+
435
4363.4.1. Special Cases for Properties
437
438 This section describes some properties that have special handling
439 when converting to xCal.
440
4413.4.1.1. Multi-Valued Properties
442
443 The following iCalendar properties can have values that consist of a
444 list of "standard" iCalendar values separated by a specific
445 delimiter. In xCal, these properties are represented by an XML
446 element that contains multiple "value" elements (Section 3.6).
447
448
449
450Daboo, et al. Standards Track [Page 8]
451
452RFC 6321 xCal August 2011
453
454
455 +------------+---------------+-----------------------+
456 | Property | XML element | XML Definition |
457 +------------+---------------+-----------------------+
458 | CATEGORIES | IC:categories | Appendix A # 3.8.1.2 |
459 | RESOURCES | IC:resources | Appendix A # 3.8.1.10 |
460 | FREEBUSY | IC:freebusy | Appendix A # 3.8.2.6 |
461 | EXDATE | IC:exdate | Appendix A # 3.8.5.1 |
462 | RDATE | IC:rdate | Appendix A # 3.8.5.2 |
463 +------------+---------------+-----------------------+
464
4653.4.1.2. GEO Property
466
467 In iCalendar, the "GEO" property value is defined as a semicolon-
468 separated list of two "FLOAT" values; the first representing latitude
469 and the second longitude.
470
471 In xCal, the value for the IC:geo element is represented by two XML
472 elements. These are an IC:latitude element and an IC:longitude
473 element, each of which contains float values. See Appendix A #
474 3.8.1.6.
475
476 Example:
477
478 <?xml version="1.0" encoding="utf-8"?>
479 <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
480 ...
481 <geo>
482 <latitude>37.386013</latitude>
483 <longitude>-122.082932</longitude>
484 </geo>
485 ...
486 </icalendar>
487
4883.4.1.3. REQUEST-STATUS Property
489
490 In iCalendar, the "REQUEST-STATUS" property value is defined as a
491 semicolon-separated list of two or three "TEXT" values. The first
492 represents a code, the second a description, and the third any
493 additional data.
494
495 In xCal, the value for the IC:request-status element is represented
496 by two or three XML elements. These are an IC:code element, an IC:
497 description element, and an IC:data element, each of which contains
498 the corresponding "TEXT" values. If there is no additional data in
499 the iCalendar value, the IC:data element (which would be empty)
500 SHOULD NOT be present. See Appendix A # 3.8.8.3.
501
502
503
504
505
506Daboo, et al. Standards Track [Page 9]
507
508RFC 6321 xCal August 2011
509
510
511 Example:
512
513 <?xml version="1.0" encoding="utf-8"?>
514 <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
515 ...
516 <request-status>
517 <code>2.0</code>
518 <description>Success</description>
519 </request-status>
520 ...
521 </icalendar>
522
5233.5. Parameters (RFC 5545, Section 3.2)
524
525 iCalendar property parameters are enclosed in the XML element IC:
526 parameters, which occurs in each property XML element. If there are
527 no iCalendar property parameters, the IC:parameters element (which
528 would be empty) SHOULD NOT be present.
529
530 Each individual iCalendar property parameter is represented in xCal
531 by an element of the same name as the iCalendar property parameter,
532 but in lowercase. For example, the "PARTSTAT" property parameter is
533 represented in xCal by the IC:partstat element.
534
535 Example:
536
537 <?xml version="1.0" encoding="utf-8"?>
538 <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
539 <vcalendar>
540 ...
541 <components>
542 ...
543 <attendee>
544 <parameters>
545 <partstat><text>NEEDS-ACTION</text></partstat>
546 </parameters>
547 ...
548 </attendee>
549 ...
550 </components>
551 </vcalendar>
552 </icalendar>
553
554 Each XML parameter element contains one or more child XML elements
555 representing iCalendar value types.
556
557
558
559
560
561
562Daboo, et al. Standards Track [Page 10]
563
564RFC 6321 xCal August 2011
565
566
567 As an example, the table below shows iCalendar-to-xCal mappings for
568 current iCalendar parameters. Any new iCalendar parameters added in
569 the future will be converted in the same way.
570
571 +----------------+-------------------+---------------------+
572 | Parameter | XML element | XML Definition |
573 +----------------+-------------------+---------------------+
574 | ALTREP | IC:altrep | Appendix A # 3.2.1 |
575 | CN | IC:cn | Appendix A # 3.2.2 |
576 | CUTYPE | IC:cutype | Appendix A # 3.2.3 |
577 | DELEGATED-FROM | IC:delegated-from | Appendix A # 3.2.4 |
578 | DELEGATED-TO | IC:delegated-to | Appendix A # 3.2.5 |
579 | DIR | IC:dir | Appendix A # 3.2.6 |
580 | ENCODING | IC:encoding | Appendix A # 3.2.7 |
581 | FMTTYPE | IC:fmttype | Appendix A # 3.2.8 |
582 | FBTYPE | IC:fbtype | Appendix A # 3.2.9 |
583 | LANGUAGE | IC:language | Appendix A # 3.2.10 |
584 | MEMBER | IC:member | Appendix A # 3.2.11 |
585 | PARTSTAT | IC:partstat | Appendix A # 3.2.12 |
586 | RANGE | IC:range | Appendix A # 3.2.13 |
587 | RELATED | IC:related | Appendix A # 3.2.14 |
588 | RELTYPE | IC:reltype | Appendix A # 3.2.15 |
589 | ROLE | IC:role | Appendix A # 3.2.16 |
590 | RSVP | IC:rsvp | Appendix A # 3.2.17 |
591 | SENT-BY | IC:sent-by | Appendix A # 3.2.18 |
592 | TZID | IC:tzid | Appendix A # 3.2.19 |
593 +----------------+-------------------+---------------------+
594
5953.5.1. VALUE Parameter
596
597 iCalendar defines a "VALUE" property parameter (Section 3.2.20 of
598 [RFC5545]). This property parameter is not mapped to an xCal XML
599 element. Instead, the value type is handled by having different XML
600 elements for each value, and these appear inside of property
601 elements. Thus, when converting from iCalendar to xCal, any "VALUE"
602 property parameters are skipped. When converting from xCal into
603 iCalendar, the appropriate "VALUE" property parameter MUST be
604 included in the iCalendar property if the value type is not the
605 default value type for that property.
606
6073.6. Values (RFC 5545, Section 3.3)
608
609 In the typical case, iCalendar value types are mapped into XML
610 elements with a matching name in all lowercase. In the case of the
611 value for a recurrence rule (see below), iCalendar defines
612 "structured" values, and these are mapped into separate child
613 elements for each value element.
614
615
616
617
618Daboo, et al. Standards Track [Page 11]
619
620RFC 6321 xCal August 2011
621
622
6233.6.1. Binary (RFC 5545, Section 3.3.1)
624
625 Description: iCalendar "BINARY" property values are represented by
626 the IC:binary XML element. The content of the element is base64
627 encoded data, conforming to Section 4 of [RFC4648], which is the
628 base64 method used in [RFC5545]. Whitespace MAY be inserted into
629 the data at any point to "wrap" the data to reasonable line
630 lengths. When converting back to iCalendar, the whitespace MUST
631 first be removed.
632
633 XML Definition: Appendix A # 3.3.1
634
635 Example:
636
637 <binary>SGVsbG8gV29ybGQh</binary>
638
6393.6.2. Boolean (RFC 5545, Section 3.3.2)
640
641 Description: iCalendar "BOOLEAN" property values are represented by
642 the IC:boolean XML element. The content of the element is a
643 boolean value.
644
645 XML Definition: Appendix A # 3.3.2
646
647 Example:
648
649 <boolean>true</boolean>
650
6513.6.3. Calendar User Address (RFC 5545, Section 3.3.3)
652
653 Description: iCalendar "CAL-ADDRESS" property values are represented
654 by the IC:cal-address XML element. The content of the element is
655 a URI.
656
657 XML Definition: Appendix A # 3.3.3
658
659 Example:
660
661 <cal-address>mailto:cyrus@example.com</cal-address>
662
6633.6.4. Date (RFC 5545, Section 3.3.4)
664
665 Description: iCalendar "DATE" property values are represented by the
666 IC:date XML element. The content of the element is the same date
667 value specified by [RFC5545], with the exception that the date
668 components are separated by "-" characters, for consistency with
669 [W3C.REC-xmlschema-2-20041028].
670
671
672
673
674Daboo, et al. Standards Track [Page 12]
675
676RFC 6321 xCal August 2011
677
678
679 XML Definition: Appendix A # 3.3.4
680
681 Example:
682
683 <date>2011-05-17</date>
684
6853.6.5. Date-Time (RFC 5545, Section 3.3.5)
686
687 Description: iCalendar "DATE-TIME" property values are represented
688 by the IC:date-time XML element. The content of the element is
689 the same date-time value specified by [RFC5545], with the
690 exception that the date components are separated by "-"
691 characters, and the time components are separated by ":"
692 characters, for consistency with [W3C.REC-xmlschema-2-20041028].
693 Note that while [W3C.REC-xmlschema-2-20041028] allows for a UTC
694 offset to be included in date/time values, xCal does not use that,
695 and instead follows the iCalendar behavior of using time zone
696 definitions via the "TZID" property parameter.
697
698 XML Definition: Appendix A # 3.3.5
699
700 Example:
701
702 <date-time>2011-05-17T12:00:00</date-time>
703
7043.6.6. Duration (RFC 5545, Section 3.3.6)
705
706 Description: iCalendar "DURATION" property values are represented by
707 the IC:duration XML element. The content of the element is the
708 same duration value specified by [RFC5545].
709
710 XML Definition: Appendix A # 3.3.6
711
712 Example:
713
714 <duration>P1D</duration>
715
7163.6.7. Float (RFC 5545, Section 3.3.7)
717
718 Description: iCalendar "FLOAT" property values are represented by
719 the IC:float XML element. The content of the element is a text
720 representation of a floating point number.
721
722 XML Definition: Appendix A # 3.3.7
723
724 Example:
725
726 <float>0.5</float>
727
728
729
730Daboo, et al. Standards Track [Page 13]
731
732RFC 6321 xCal August 2011
733
734
7353.6.8. Integer (RFC 5545, Section 3.3.8)
736
737 Description: iCalendar "INTEGER" property values are represented by
738 the IC:integer XML element. The content of the element is a text
739 representation of an integer number.
740
741 XML Definition: Appendix A # 3.3.8
742
743 Examples:
744
745 <integer>50</integer>
746 <integer>-100</integer>
747
7483.6.9. Period of Time (RFC 5545, Section 3.3.9)
749
750 Description: iCalendar "PERIOD" property values are represented by
751 the IC:period XML element. The content of the element is child
752 elements representing the start, end, or duration components of
753 the period.
754
755 XML Definition: Appendix A # 3.3.9
756
757 Example:
758
759 <period>
760 <start>2011-05-17T12:00:00</start>
761 <duration>P1H</duration>
762 </period>
763
7643.6.10. Recurrence Rule (RFC 5545, Section 3.3.10)
765
766 Description: iCalendar "RECUR" property values are represented by
767 the IC:recur XML element. The content of the element is child
768 elements representing the various components of a recurrence rule.
769
770 XML Definition: Appendix A # 3.3.10
771
772 Example:
773
774 <recur>
775 <freq>YEARLY</freq>
776 <count>5</count>
777 <byday>-1SU</byday>
778 <bymonth>10</bymonth>
779 </recur>
780
781
782
783
784
785
786Daboo, et al. Standards Track [Page 14]
787
788RFC 6321 xCal August 2011
789
790
7913.6.11. Text (RFC 5545, Section 3.3.11)
792
793 Description: iCalendar "TEXT" property values are represented by the
794 IC:text XML element. The content of the element is simple text.
795
796 XML Definition: Appendix A # 3.3.11
797
798 Example:
799
800 <text>Hello World!</text>
801
8023.6.12. Time (RFC 5545, Section 3.3.12)
803
804 Description: iCalendar "TIME" property values are represented by the
805 IC:time XML element. The content of the element is the same time
806 value specified by [RFC5545], with the exception that the time
807 components are separated by ":" characters, for consistency with
808 [W3C.REC-xmlschema-2-20041028]. Note that while
809 [W3C.REC-xmlschema-2-20041028] allows for a UTC offset to be
810 included in date/time values, xCal does not use that, and instead
811 follows the iCalendar behavior of using time zone definitions via
812 the "TZID" property parameter.
813
814 XML Definition: Appendix A # 3.3.12
815
816 Example:
817
818 <time>12:00:00</time>
819
8203.6.13. URI (RFC 5545, Section 3.3.13)
821
822 Description: iCalendar "URI" property values are represented by the
823 IC:uri XML element. The content of the element is a URI.
824
825 XML Definition: Appendix A # 3.3.13
826
827 Example:
828
829 <uri>http://calendar.example.com</uri>
830
831
832
833
834
835
836
837
838
839
840
841
842Daboo, et al. Standards Track [Page 15]
843
844RFC 6321 xCal August 2011
845
846
8473.6.14. UTC Offset (RFC 5545, Section 3.3.14)
848
849 Description: iCalendar "UTC-OFFSET" property values are represented
850 by the IC:utc-offset XML element. The content of the element is
851 the same UTC offset value specified by [RFC5545], with the
852 exception that the hour, minute, and second components are
853 separated by a ":" character, for consistency with
854 [W3C.REC-xmlschema-2-20041028].
855
856 XML Definition: Appendix A # 3.3.14
857
858 Example:
859
860 <utc-offset>-05:00</utc-offset>
861
8623.7. Extensions
863
864 iCalendar extension properties and property parameters (those with an
865 "X-" prefix in their name) are handled in the same way as other
866 properties and property parameters: the property or property
867 parameter is represented by an XML element with the same name, but in
868 lowercase, e.g., the "X-FOO" property in iCalendar turns into the IC:
869 x-foo element in xCal. However, see Section 5 for how to deal with
870 default values for unrecognized extension properties or property
871 parameters.
872
8734. Converting from xCal into iCalendar
874
875 When converting component, property, and property parameter values,
876 the names SHOULD be converted to uppercase. Although iCalendar names
877 are case insensitive, common practice is to keep them all uppercase
878 following the actual definitions in [RFC5545].
879
880 BACKSLASH character encoding and line folding MUST be applied to the
881 resulting iCalendar data as required by [RFC5545].
882
883 Non-binary value types MUST NOT be base64 encoded.
884
8854.1. Converting XML Extensions into iCalendar
886
887 XML extensions are converted back to iCalendar in one of two ways,
888 depending on whether the extensions are in the iCalendar XML
889 namespace or in an external namespace.
890
891 Extensions that are part of the iCalendar XML namespace MUST have
892 element names that begin with "x-", and will be converted back to the
893 equivalent extension property in iCalendar. For example, the "x-foo"
894 element will convert to the "X-FOO" iCalendar property.
895
896
897
898Daboo, et al. Standards Track [Page 16]
899
900RFC 6321 xCal August 2011
901
902
903 Extensions that are in a namespace other than the iCalendar XML
904 namespace SHOULD be preserved in the iCalendar representation using
905 the "XML" iCalendar property described in Section 4.2. Only those
906 extension elements that are immediate child elements of the IC:
907 properties element are converted, any others are ignored.
908
9094.2. The XML Property for iCalendar
910
911 This section describes an extension property for iCalendar, as
912 covered in Section 8.2.3 of [RFC5545].
913
914 Property name: XML
915
916 Purpose: To embed extended XML-encoded iCalendar data in the
917 iCalendar format.
918
919 Value type: The default value type is "TEXT". The value type can
920 also be set to "BINARY" to indicate base64 encoded content.
921
922 Property parameters: IANA, non-standard, inline encoding, and value
923 data type property parameters can be specified on this property.
924
925 Conformance: The property can be specified multiple times in any
926 calendar component.
927
928 Description: The value of this property is a single XML 1.0
929 [W3C.REC-xml-20081126] element. The "XML" property MUST NOT be used
930 to contain properties that are already defined in iCalendar. Since
931 all elements in the urn:ietf:params:xml:ns:icalendar-2.0 namespace
932 convert to a well-defined iCalendar object, the elements in this
933 property MUST NOT be in the urn:ietf:params:xml:ns:icalendar-2.0
934 namespace. The XML element that is the value of this property MUST
935 have an XML namespace declaration.
936
937 The default value type for this property is "TEXT", and normal
938 BACKSLASH character encoding rules for that value MUST be applied.
939 Note that the source XML can contain characters not allowed in "TEXT"
940 property values. If this is the case, then the XML data MUST be
941 base64 encoded. As required by [RFC5545], the "ENCODING" property
942 parameter MUST be present and set to "BASE64", and the "VALUE"
943 property parameter MUST be present and set to "BINARY".
944
945 The ordering of "XML" properties is not preserved in the conversion
946 between xCal and iCalendar.
947
948 Format definition: This property is defined by the following
949 notation:
950
951
952
953
954Daboo, et al. Standards Track [Page 17]
955
956RFC 6321 xCal August 2011
957
958
959 xml = "XML" xmlparam ( ":" text ) /
960 (
961 ";" "ENCODING" "=" "BASE64"
962 ";" "VALUE" "=" "BINARY"
963 ":" binary
964 )
965 CRLF
966
967 xmlparam = *(";" other-param)
968
969 Example: The following is an example of a location embedded in KML
970 markup inside the "XML" property.
971
972 XML:<kml xmlns="http://www.opengis.net/kml/2.2">\n
973 <Document>\n
974 <name>KML Sample</name>\n
975 <open>1</open>\n
976 <description>An incomplete example of a KML docum
977 ent - used as an example!</description>\n
978 </Document>\n
979 </kml>
980
9815. Handling Unrecognized Properties or Parameters
982
983 In iCalendar, properties have a default value type specified by their
984 definition, e.g., "SUMMARY"'s value type is "TEXT" and "DURATION"'s
985 is "DURATION". When a property uses its default value type, the
986 "VALUE" property parameter does not need to be specified on the
987 property.
988
989 When new properties are defined or "X-" properties are used, an
990 iCalendar<->xCal converter might not recognize them, and know what
991 the appropriate default value types are, yet they need to be able to
992 preserve the values. A similar issue arises for unrecognized
993 property parameters. As a result, the following rules are applied
994 when dealing with unrecognized properties and property parameters:
995
996 o When converting iCalendar into xCal:
997
998 * Any property that does not include a "VALUE" property parameter
999 and whose default value type is not known MUST be converted
1000 using the value type XML element IC:unknown. The content of
1001 that element is the unprocessed value text.
1002
1003 * Any unrecognized property parameter MUST be converted using the
1004 value type XML element IC:unknown, with its content set to the
1005 property parameter value text, treated as if it were a "TEXT"
1006 value or list of "TEXT" values.
1007
1008
1009
1010Daboo, et al. Standards Track [Page 18]
1011
1012RFC 6321 xCal August 2011
1013
1014
1015 o When converting xCal into iCalendar:
1016
1017 * Any IC:unknown property value XML elements are converted
1018 directly into iCalendar values. The containing property MUST
1019 NOT have a "VALUE" property parameter.
1020
1021 * Any IC:unknown parameter value XML elements are converted as if
1022 they were IC:text value type XML elements.
1023
1024 Example: The following is an example of an unrecognized iCalendar
1025 property (that uses a "DATE-TIME" value as its default) and the
1026 equivalent xCal representation of that property.
1027
1028 iCalendar:
1029
1030 X-PROPERTY:20110512T120000Z
1031
1032 xCal:
1033
1034 <x-property>
1035 <unknown>20110512T120000Z</unknown>
1036 </x-property>
1037
1038 Example: The following is an example of an unrecognized iCalendar
1039 property parameter (that uses a "DURATION" value as its default)
1040 specified on a recognized iCalendar property, and the equivalent xCal
1041 representation of that property and property parameter.
1042
1043 iCalendar:
1044
1045 DTSTART;X-PARAM=PT30M:20110512T130000Z
1046
1047 xCal:
1048
1049 <dtstart>
1050 <parameters>
1051 <x-param><unknown>PT30M</unknown></x-param>
1052 </parameters>
1053 <date-time>2011-05-12T13:00:00Z</date-time>
1054 </dtstart>
1055
10566. Security Considerations
1057
1058 For security considerations specific to calendar data, see Section 7
1059 of [RFC5545]. Since this specification is a mapping from iCalendar,
1060 no new security concerns are introduced related to calendar data.
1061
1062
1063
1064
1065
1066Daboo, et al. Standards Track [Page 19]
1067
1068RFC 6321 xCal August 2011
1069
1070
1071 The use of XML as a format does have security risks. Section 7 of
1072 [RFC3470] discusses these risks. See also the security discussion
1073 for the application/xml type in [RFC3023].
1074
10757. IANA Considerations
1076
1077 This document defines a new URN to identify a new XML namespace for
1078 iCalendar data. The URN conforms to a registry mechanism described
1079 in [RFC3688].
1080
1081 This document defines a new media type. The registration is in
1082 Section 7.2.
1083
1084 This document defines a new property for iCalendar. The registration
1085 is in Section 7.3.
1086
10877.1. Namespace Registration
1088
1089 Registration request for the iCalendar namespace:
1090
1091 URI: urn:ietf:params:xml:ns:icalendar-2.0
1092
1093 Registrant Contact: See the "Authors' Addresses" section of this
1094 document.
1095
1096 XML: None. Namespace URIs do not represent an XML specification.
1097
10987.2. Media Type
1099
1100 This section defines the MIME media type for use with iCalendar in
1101 XML data.
1102
1103 Type name: application
1104
1105 Subtype name: calendar+xml
1106
1107 Required parameters: None
1108
1109 Optional parameters: method, component, and optinfo as defined for
1110 the text/calendar media type in [RFC5545]; charset as defined for
1111 application/xml in [RFC3023]; per [RFC3023], use of the charset
1112 property parameter with the value "utf-8" is STRONGLY RECOMMENDED.
1113
1114 Encoding considerations: Same as encoding considerations of
1115 application/xml as specified in [RFC3023].
1116
1117
1118
1119
1120
1121
1122Daboo, et al. Standards Track [Page 20]
1123
1124RFC 6321 xCal August 2011
1125
1126
1127 Security considerations: See Section 6.
1128
1129 Interoperability considerations: This media type provides an
1130 alternative format for iCalendar data based on XML.
1131
1132 Published specification: This specification.
1133
1134 Applications that use this media type: Applications that currently
1135 make use of the text/calendar media type can use this as an
1136 alternative.
1137
1138 Additional information:
1139
1140 Magic number(s): None
1141
1142 File extension(s): xcs
1143
1144 Macintosh file type code(s): None specified.
1145
1146 Person & email address to contact for further information:
1147 calsify@ietf.org
1148
1149 Intended usage: COMMON
1150
1151 Restrictions on usage: There are no restrictions on where this media
1152 type can be used.
1153
1154 Author: See the "Authors' Addresses" section of this document.
1155
1156 Change controller: IETF
1157
11587.3. iCalendar Property Registrations
1159
1160 This document defines the following new iCalendar property to be
1161 added to the registry defined in Section 8.2.3 of [RFC5545]:
1162
1163 +----------+---------+-----------------------+
1164 | Property | Status | Reference |
1165 +----------+---------+-----------------------+
1166 | XML | Current | RFC 6321, Section 4.2 |
1167 +----------+---------+-----------------------+
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178Daboo, et al. Standards Track [Page 21]
1179
1180RFC 6321 xCal August 2011
1181
1182
11838. Acknowledgments
1184
1185 The authors would like to thank the following for their valuable
1186 contributions: Toby Considine, Bernard Desruisseaux, Keith Moore,
1187 Filip Navara, Simon Perreault, Arnaud Quillaud, Peter Saint-Andre,
1188 and Dave Thewlis. This specification originated from the work of the
1189 XML technical committee of the Calendaring and Scheduling Consortium.
1190
11919. References
1192
11939.1. Normative References
1194
1195 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
1196 Requirement Levels", BCP 14, RFC 2119, March 1997.
1197
1198 [RFC3023] Murata, M., St. Laurent, S., and D. Kohn, "XML Media
1199 Types", RFC 3023, January 2001.
1200
1201 [RFC3470] Hollenbeck, S., Rose, M., and L. Masinter, "Guidelines for
1202 the Use of Extensible Markup Language (XML)
1203 within IETF Protocols", BCP 70, RFC 3470, January 2003.
1204
1205 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
1206 January 2004.
1207
1208 [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data
1209 Encodings", RFC 4648, October 2006.
1210
1211 [RFC5545] Desruisseaux, B., "Internet Calendaring and Scheduling
1212 Core Object Specification (iCalendar)", RFC 5545,
1213 September 2009.
1214
1215 [W3C.REC-xml-20081126]
1216 Sperberg-McQueen, C., Yergeau, F., Bray, T., Paoli, J.,
1217 and E. Maler, "Extensible Markup Language (XML) 1.0 (Fifth
1218 Edition)", World Wide Web Consortium Recommendation REC-
1219 xml-20081126, November 2008,
1220 <http://www.w3.org/TR/2008/REC-xml-20081126>.
1221
12229.2. Informative References
1223
1224 [W3C.REC-xmlschema-2-20041028]
1225 Malhotra, A. and P. Biron, "XML Schema Part 2: Datatypes
1226 Second Edition", World Wide Web Consortium
1227 Recommendation REC-xmlschema-2-20041028, October 2004,
1228 <http://www.w3.org/TR/2004/REC-xmlschema-2-20041028>.
1229
1230
1231
1232
1233
1234Daboo, et al. Standards Track [Page 22]
1235
1236RFC 6321 xCal August 2011
1237
1238
1239Appendix A. RELAX NG Schema
1240
1241 Below is a RELAX NG schema for iCalendar in XML. The schema is non-
1242 normative and given for reference only.
1243
1244 This schema uses the compact notation of RELAX NG. The numeric
1245 section numbers given in the comments refer to sections in [RFC5545].
1246 The ordering of elements follows the section ordering of [RFC5545].
1247
1248 The RELAX NG compact notation "?" operator is used to indicate an
1249 unordered list of items. However, that operator, as defined, allows
1250 "mixing" each element that it operates on at any depth within the
1251 other elements, rather than just allowing "mixing" of siblings only.
1252 As a result, the schema provided allows certain constructs that are
1253 not allowed in iCalendar. Given that there is no sibling-only
1254 unordered list operator in RELAX NG, this is the best representation
1255 that can be given.
1256
1257 Patterns for date/time, duration, and UTC offset values are given
1258 because those differ from the values used in iCalendar. More
1259 restrictive schema with patterns and numerical limits could be
1260 derived from the example schema here if more comprehensive schema
1261 validation is required.
1262
1263 # RELAX NG Schema for iCalendar in XML
1264
1265 default namespace = "urn:ietf:params:xml:ns:icalendar-2.0"
1266
1267 # 3.2 Property Parameters
1268
1269 # 3.2.1 Alternate Text Representation
1270
1271 altrepparam = element altrep {
1272 value-uri
1273 }
1274
1275 # 3.2.2 Common Name
1276
1277 cnparam = element cn {
1278 value-text
1279 }
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290Daboo, et al. Standards Track [Page 23]
1291
1292RFC 6321 xCal August 2011
1293
1294
1295 # 3.2.3 Calendar User Type
1296
1297 cutypeparam = element cutype {
1298 element text {
1299 "INDIVIDUAL" |
1300 "GROUP" |
1301 "RESOURCE" |
1302 "ROOM" |
1303 "UNKNOWN"
1304 }
1305 }
1306
1307 # 3.2.4 Delegators
1308
1309 delfromparam = element delegated-from {
1310 value-cal-address+
1311 }
1312
1313 # 3.2.5 Delegatees
1314
1315 deltoparam = element delegated-to {
1316 value-cal-address+
1317 }
1318
1319 # 3.2.6 Directory Entry Reference
1320
1321 dirparam = element dir {
1322 value-uri
1323 }
1324
1325 # 3.2.7 Inline Encoding
1326
1327 encodingparam = element encoding {
1328 element text {
1329 "8BIT" |
1330 "BASE64"
1331 }
1332 }
1333
1334 # 3.2.8 Format Type
1335
1336 fmttypeparam = element fmttype {
1337 value-text
1338 }
1339
1340
1341
1342
1343
1344
1345
1346Daboo, et al. Standards Track [Page 24]
1347
1348RFC 6321 xCal August 2011
1349
1350
1351 # 3.2.9 Free/Busy Time Type
1352
1353 fbtypeparam = element fbtype {
1354 element text {
1355 "FREE" |
1356 "BUSY" |
1357 "BUSY-UNAVAILABLE" |
1358 "BUSY-TENTATIVE"
1359 }
1360 }
1361
1362 # 3.2.10 Language
1363
1364 languageparam = element language {
1365 value-text
1366 }
1367
1368 # 3.2.11 Group or List Membership
1369
1370 memberparam = element member {
1371 value-cal-address+
1372 }
1373
1374 # 3.2.12 Participation Status
1375
1376 partstatparam = element partstat {
1377 type-partstat-event |
1378 type-partstat-todo |
1379 type-partstat-jour
1380 }
1381
1382 type-partstat-event = (
1383 element text {
1384 "NEEDS-ACTION" |
1385 "ACCEPTED" |
1386 "DECLINED" |
1387 "TENTATIVE" |
1388 "DELEGATED"
1389 }
1390 )
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402Daboo, et al. Standards Track [Page 25]
1403
1404RFC 6321 xCal August 2011
1405
1406
1407 type-partstat-todo = (
1408 element text {
1409 "NEEDS-ACTION" |
1410 "ACCEPTED" |
1411 "DECLINED" |
1412 "TENTATIVE" |
1413 "DELEGATED" |
1414 "COMPLETED" |
1415 "IN-PROCESS"
1416 }
1417 )
1418
1419 type-partstat-jour = (
1420 element text {
1421 "NEEDS-ACTION" |
1422 "ACCEPTED" |
1423 "DECLINED"
1424 }
1425 )
1426
1427 # 3.2.13 Recurrence Identifier Range
1428
1429 rangeparam = element range {
1430 element text {
1431 "THISANDFUTURE"
1432 }
1433 }
1434
1435 # 3.2.14 Alarm Trigger Relationship
1436
1437 trigrelparam = element related {
1438 element text {
1439 "START" |
1440 "END"
1441 }
1442 }
1443
1444 # 3.2.15 Relationship Type
1445
1446 reltypeparam = element reltype {
1447 element text {
1448 "PARENT" |
1449 "CHILD" |
1450 "SIBLING"
1451 }
1452 }
1453
1454
1455
1456
1457
1458Daboo, et al. Standards Track [Page 26]
1459
1460RFC 6321 xCal August 2011
1461
1462
1463 # 3.2.16 Participation Role
1464
1465 roleparam = element role {
1466 element text {
1467 "CHAIR" |
1468 "REQ-PARTICIPANT" |
1469 "OPT-PARTICIPANT" |
1470 "NON-PARTICIPANT"
1471 }
1472 }
1473
1474 # 3.2.17 RSVP Expectation
1475
1476 rsvpparam = element rsvp {
1477 value-boolean
1478 }
1479
1480 # 3.2.18 Sent By
1481
1482 sentbyparam = element sent-by {
1483 value-cal-address
1484 }
1485
1486 # 3.2.19 Time Zone Identifier
1487
1488 tzidparam = element tzid {
1489 value-text
1490 }
1491
1492 # 3.3 Property Value Data Types
1493
1494 # 3.3.1 BINARY
1495
1496 value-binary = element binary {
1497 xsd:string
1498 }
1499
1500 # 3.3.2 BOOLEAN
1501
1502 value-boolean = element boolean {
1503 xsd:boolean
1504 }
1505
1506 # 3.3.3 CAL-ADDRESS
1507
1508 value-cal-address = element cal-address {
1509 xsd:anyURI
1510 }
1511
1512
1513
1514Daboo, et al. Standards Track [Page 27]
1515
1516RFC 6321 xCal August 2011
1517
1518
1519 # 3.3.4 DATE
1520
1521 pattern-date = xsd:string {
1522 pattern = "\d\d\d\d-\d\d-\d\d"
1523 }
1524
1525 value-date = element date {
1526 pattern-date
1527 }
1528
1529 # 3.3.5 DATE-TIME
1530
1531 pattern-date-time = xsd:string {
1532 pattern = "\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ?"
1533 }
1534
1535 value-date-time = element date-time {
1536 pattern-date-time
1537 }
1538
1539 # 3.3.6 DURATION
1540
1541 pattern-duration = xsd:string {
1542 pattern = "(+|-)?P(\d+W)|(\d+D)?"
1543 ~ "(T(\d+H(\d+M)?(\d+S)?)|"
1544 ~ "(\d+M(\d+S)?)|"
1545 ~ "(\d+S))?"
1546 }
1547
1548 value-duration = element duration {
1549 pattern-duration
1550 }
1551
1552 # 3.3.7 FLOAT
1553
1554 value-float = element float {
1555 xsd:float
1556 }
1557
1558 # 3.3.8 INTEGER
1559
1560 value-integer = element integer {
1561 xsd:integer
1562 }
1563
1564
1565
1566
1567
1568
1569
1570Daboo, et al. Standards Track [Page 28]
1571
1572RFC 6321 xCal August 2011
1573
1574
1575 # 3.3.9 PERIOD
1576
1577 value-period = element period {
1578 element start {
1579 pattern-date-time
1580 },
1581 (
1582 element end {
1583 pattern-date-time
1584 } |
1585 element duration {
1586 pattern-duration
1587 }
1588 )
1589 }
1590
1591 # 3.3.10 RECUR
1592
1593 value-recur = element recur {
1594 type-freq,
1595 (type-until | type-count)?,
1596 element interval {
1597 xsd:positiveInteger
1598 }?,
1599 type-bysecond*,
1600 type-byminute*,
1601 type-byhour*,
1602 type-byday*,
1603 type-bymonthday*,
1604 type-byyearday*,
1605 type-byweekno*,
1606 type-bymonth*,
1607 type-bysetpos*,
1608 element wkst { type-weekday }?
1609 }
1610
1611 type-freq = element freq {
1612 "SECONDLY" |
1613 "MINUTELY" |
1614 "HOURLY" |
1615 "DAILY" |
1616 "WEEKLY" |
1617 "MONTHLY" |
1618 "YEARLY"
1619 }
1620
1621
1622
1623
1624
1625
1626Daboo, et al. Standards Track [Page 29]
1627
1628RFC 6321 xCal August 2011
1629
1630
1631 type-until = element until {
1632 type-date |
1633 type-date-time
1634 }
1635
1636 type-count = element count {
1637 xsd:positiveInteger
1638 }
1639
1640 type-bysecond = element bysecond {
1641 xsd:positiveInteger
1642 }
1643
1644 type-byminute = element byminute {
1645 xsd:positiveInteger
1646 }
1647
1648 type-byhour = element byhour {
1649 xsd:positiveInteger
1650 }
1651
1652 type-weekday = (
1653 "SU" |
1654 "MO" |
1655 "TU" |
1656 "WE" |
1657 "TH" |
1658 "FR" |
1659 "SA"
1660 )
1661
1662 type-byday = element byday {
1663 xsd:integer?,
1664 type-weekday
1665 }
1666
1667 type-bymonthday = element bymonthday {
1668 xsd:integer
1669 }
1670
1671 type-byyearday = element byyearday {
1672 xsd:integer
1673 }
1674
1675 type-byweekno = element byweekno {
1676 xsd:integer
1677 }
1678
1679
1680
1681
1682Daboo, et al. Standards Track [Page 30]
1683
1684RFC 6321 xCal August 2011
1685
1686
1687 type-bymonth = element bymonth {
1688 xsd:positiveInteger
1689 }
1690
1691 type-bysetpos = element bysetpos {
1692 xsd:integer
1693 }
1694
1695 # 3.3.11 TEXT
1696
1697 value-text = element text {
1698 xsd:string
1699 }
1700
1701 # 3.3.12 TIME
1702
1703 pattern-time = xsd:string {
1704 pattern = "\d\d:\d\d:\d\dZ?"
1705 }
1706
1707 value-time = element time {
1708 pattern-time
1709 }
1710
1711 # 3.3.13 URI
1712
1713 value-uri = element uri {
1714 xsd:anyURI
1715 }
1716
1717 # 3.3.14 UTC-OFFSET
1718
1719 value-utc-offset = element utc-offset {
1720 xsd:string { pattern = "(+|-)\d\d:\d\d(:\d\d)?" }
1721 }
1722
1723 # UNKNOWN
1724
1725 value-unknown = element unknown {
1726 xsd:string
1727 }
1728
1729 # 3.4 iCalendar Stream
1730
1731 start = element icalendar {
1732 vcalendar+
1733 }
1734
1735
1736
1737
1738Daboo, et al. Standards Track [Page 31]
1739
1740RFC 6321 xCal August 2011
1741
1742
1743 # 3.6 Calendar Components
1744
1745 vcalendar = element vcalendar {
1746 type-calprops,
1747 type-component
1748 }
1749
1750 type-calprops = element properties {
1751 property-prodid &
1752 property-version &
1753 property-calscale? &
1754 property-method?
1755 }
1756
1757 type-component = element components {
1758 (
1759 component-vevent |
1760 component-vtodo |
1761 component-vjournal |
1762 component-vfreebusy |
1763 component-vtimezone
1764 )*
1765 }
1766
1767 # 3.6.1 Event Component
1768
1769 component-vevent = element vevent {
1770 type-eventprop,
1771 element components {
1772 component-valarm+
1773 }?
1774 }
1775
1776 type-eventprop = element properties {
1777 property-dtstamp &
1778 property-dtstart &
1779 property-uid &
1780
1781 property-class? &
1782 property-created? &
1783 property-description? &
1784 property-geo? &
1785 property-last-mod? &
1786 property-location? &
1787 property-organizer? &
1788 property-priority? &
1789 property-seq? &
1790 property-status-event? &
1791
1792
1793
1794Daboo, et al. Standards Track [Page 32]
1795
1796RFC 6321 xCal August 2011
1797
1798
1799 property-summary? &
1800 property-transp? &
1801 property-url? &
1802 property-recurid? &
1803
1804 property-rrule? &
1805
1806 (property-dtend | property-duration)? &
1807
1808 property-attach* &
1809 property-attendee* &
1810 property-categories* &
1811 property-comment* &
1812 property-contact* &
1813 property-exdate* &
1814 property-rstatus* &
1815 property-related* &
1816 property-resources* &
1817 property-rdate*
1818 }
1819
1820 # 3.6.2 To-do Component
1821
1822 component-vtodo = element vtodo {
1823 type-todoprop,
1824 element components {
1825 component-valarm+
1826 }?
1827 }
1828
1829 type-todoprop = element properties {
1830 property-dtstamp &
1831 property-uid &
1832
1833 property-class? &
1834 property-completed? &
1835 property-created? &
1836 property-description? &
1837 property-geo? &
1838 property-last-mod? &
1839 property-location? &
1840 property-organizer? &
1841 property-percent? &
1842 property-priority? &
1843 property-recurid? &
1844 property-seq? &
1845 property-status-todo? &
1846 property-summary? &
1847
1848
1849
1850Daboo, et al. Standards Track [Page 33]
1851
1852RFC 6321 xCal August 2011
1853
1854
1855 property-url? &
1856
1857 property-rrule? &
1858
1859 (
1860 (property-dtstart?, property-dtend? ) |
1861 (property-dtstart, property-duration)?
1862 ) &
1863
1864 property-attach* &
1865 property-attendee* &
1866 property-categories* &
1867 property-comment* &
1868 property-contact* &
1869 property-exdate* &
1870 property-rstatus* &
1871 property-related* &
1872 property-resources* &
1873 property-rdate*
1874 }
1875
1876 # 3.6.3 Journal Component
1877
1878 component-vjournal = element vjournal {
1879 type-jourprop
1880 }
1881
1882 type-jourprop = element properties {
1883 property-dtstamp &
1884 property-uid &
1885
1886 property-class? &
1887 property-created? &
1888 property-dtstart? &
1889 property-last-mod? &
1890 property-organizer? &
1891 property-recurid? &
1892 property-seq? &
1893 property-status-jour? &
1894 property-summary? &
1895 property-url? &
1896
1897 property-rrule? &
1898
1899 property-attach* &
1900 property-attendee* &
1901 property-categories* &
1902 property-comment* &
1903
1904
1905
1906Daboo, et al. Standards Track [Page 34]
1907
1908RFC 6321 xCal August 2011
1909
1910
1911 property-contact* &
1912 property-description? &
1913 property-exdate* &
1914 property-related* &
1915 property-rdate* &
1916 property-rstatus*
1917 }
1918
1919 # 3.6.4 Free/Busy Component
1920
1921 component-vfreebusy = element vfreebusy {
1922 type-fbprop
1923 }
1924
1925 type-fbprop = element properties {
1926 property-dtstamp &
1927 property-uid &
1928
1929 property-contact? &
1930 property-dtstart? &
1931 property-dtend? &
1932 property-duration? &
1933 property-organizer? &
1934 property-url? &
1935
1936 property-attendee* &
1937 property-comment* &
1938 property-freebusy* &
1939 property-rstatus*
1940 }
1941
1942 # 3.6.5 Time Zone Component
1943
1944 component-vtimezone = element vtimezone {
1945 element properties {
1946 property-tzid &
1947
1948 property-last-mod? &
1949 property-tzuurl?
1950 },
1951 element components {
1952 (component-standard | component-daylight) &
1953 component-standard* &
1954 component-daylight*
1955 }
1956 }
1957
1958
1959
1960
1961
1962Daboo, et al. Standards Track [Page 35]
1963
1964RFC 6321 xCal August 2011
1965
1966
1967 component-standard = element standard {
1968 type-tzprop
1969 }
1970
1971 component-daylight = element daylight {
1972 type-tzprop
1973 }
1974
1975 type-tzprop = element properties {
1976 property-dtstart &
1977 property-tzoffsetto &
1978 property-tzoffsetfrom &
1979
1980 property-rrule? &
1981
1982 property-comment* &
1983 property-rdate* &
1984 property-tzname*
1985 }
1986
1987 # 3.6.6 Alarm Component
1988
1989 component-valarm = element valarm {
1990 audioprop | dispprop | emailprop
1991 }
1992
1993 type-audioprop = element properties {
1994 property-action &
1995
1996 property-trigger &
1997
1998 (property-duration, property-repeat)? &
1999
2000 property-attach?
2001 }
2002
2003 type-dispprop = element properties {
2004 property-action &
2005 property-description &
2006 property-trigger &
2007 property-summary &
2008
2009 property-attendee+ &
2010
2011 (property-duration, property-repeat)? &
2012
2013 property-attach*
2014 }
2015
2016
2017
2018Daboo, et al. Standards Track [Page 36]
2019
2020RFC 6321 xCal August 2011
2021
2022
2023 type-emailprop = element properties {
2024 property-action &
2025 property-description &
2026 property-trigger &
2027
2028 (property-duration, property-repeat)?
2029 }
2030
2031 # 3.7 Calendar Properties
2032
2033 # 3.7.1 Calendar Scale
2034
2035 property-calscale = element calscale {
2036
2037 element parameters { empty }?,
2038
2039 element text { "GREGORIAN" }
2040 }
2041
2042 # 3.7.2 Method
2043
2044 property-method = element method {
2045
2046 element parameters { empty }?,
2047
2048 value-text
2049 }
2050
2051 # 3.7.3 Product Identifier
2052
2053 property-prodid = element prodid {
2054
2055 element parameters { empty }?,
2056
2057 value-text
2058 }
2059
2060 # 3.7.4 Version
2061
2062 property-version = element version {
2063
2064 element parameters { empty }?,
2065
2066 element text { "2.0" }
2067 }
2068
2069
2070
2071
2072
2073
2074Daboo, et al. Standards Track [Page 37]
2075
2076RFC 6321 xCal August 2011
2077
2078
2079 # 3.8 Component Properties
2080
2081 # 3.8.1 Descriptive Component Properties
2082
2083 # 3.8.1.1 Attachment
2084
2085 property-attach = element attach {
2086
2087 element parameters {
2088 fmttypeparam? &
2089 encodingparam?
2090 }?,
2091
2092 value-uri | value-binary
2093 }
2094
2095 # 3.8.1.2 Categories
2096
2097 property-categories = element categories {
2098
2099 element parameters {
2100 languageparam? &
2101 }?,
2102
2103 value-text+
2104 }
2105
2106 # 3.8.1.3 Classification
2107
2108 property-class = element class {
2109
2110 element parameters { empty }?,
2111
2112 element text {
2113 "PUBLIC" |
2114 "PRIVATE" |
2115 "CONFIDENTIAL"
2116 }
2117 }
2118
2119 # 3.8.1.4 Comment
2120
2121 property-comment = element comment {
2122
2123 element parameters {
2124 altrepparam? &
2125 languageparam?
2126 }?,
2127
2128
2129
2130Daboo, et al. Standards Track [Page 38]
2131
2132RFC 6321 xCal August 2011
2133
2134
2135 value-text
2136 }
2137
2138 # 3.8.1.5 Description
2139
2140 property-description = element description {
2141
2142 element parameters {
2143 altrepparam? &
2144 languageparam?
2145 }?,
2146
2147 value-text
2148 }
2149
2150 # 3.8.1.6 Geographic Position
2151
2152 property-geo = element geo {
2153
2154 element parameters { empty }?,
2155
2156 element latitude { xsd:float },
2157 element longitude { xsd:float }
2158 }
2159
2160 # 3.8.1.7 Location
2161
2162 property-location = element location {
2163
2164 element parameters {
2165
2166 altrepparam? &
2167 languageparam?
2168 }?,
2169
2170 value-text
2171 }
2172
2173 # 3.8.1.8 Percent Complete
2174
2175 property-percent = element percent-complete {
2176
2177 element parameters { empty }?,
2178
2179 value-integer
2180 }
2181
2182
2183
2184
2185
2186Daboo, et al. Standards Track [Page 39]
2187
2188RFC 6321 xCal August 2011
2189
2190
2191 # 3.8.1.9 Priority
2192
2193 property-priority = element priority {
2194
2195 element parameters { empty }?,
2196
2197 value-integer
2198 }
2199
2200 # 3.8.1.10 Resources
2201
2202 property-resources = element resources {
2203
2204 element parameters {
2205 altrepparam? &
2206 languageparam?
2207 }?,
2208
2209 value-text+
2210 }
2211
2212 # 3.8.1.11 Status
2213
2214 property-status-event = element status {
2215
2216 element parameters { empty }?,
2217
2218 element text {
2219 "TENTATIVE" |
2220 "CONFIRMED" |
2221 "CANCELLED"
2222 }
2223 }
2224
2225 property-status-todo = element status {
2226
2227 element parameters { empty }?,
2228
2229 element text {
2230 "NEEDS-ACTION" |
2231 "COMPLETED" |
2232 "IN-PROCESS" |
2233 "CANCELLED"
2234 }
2235 }
2236
2237
2238
2239
2240
2241
2242Daboo, et al. Standards Track [Page 40]
2243
2244RFC 6321 xCal August 2011
2245
2246
2247 property-status-jour = element status {
2248
2249 element parameters { empty }?,
2250
2251 element text {
2252 "DRAFT" |
2253 "FINAL" |
2254 "CANCELLED"
2255 }
2256 }
2257
2258 # 3.8.1.12 Summary
2259
2260 property-summary = element summary {
2261
2262 element parameters {
2263 altrepparam? &
2264 languageparam?
2265 }?,
2266
2267 value-text
2268 }
2269
2270 # 3.8.2 Date and Time Component Properties
2271
2272 # 3.8.2.1 Date/Time Completed
2273
2274 property-completed = element completed {
2275
2276 element parameters { empty }?,
2277
2278 value-date-time
2279 }
2280
2281 # 3.8.2.2 Date/Time End
2282
2283 property-dtend = element dtend {
2284
2285 element parameters {
2286 tzidparam?
2287 }?,
2288
2289 value-date-time |
2290 value-date
2291 }
2292
2293
2294
2295
2296
2297
2298Daboo, et al. Standards Track [Page 41]
2299
2300RFC 6321 xCal August 2011
2301
2302
2303 # 3.8.2.3 Date/Time Due
2304
2305 property-due = element due {
2306
2307 element parameters {
2308 tzidparam?
2309 }?,
2310
2311 value-date-time |
2312 value-date
2313 }
2314
2315 # 3.8.2.4 Date/Time Start
2316
2317 property-dtstart = element dtstart {
2318
2319 element parameters {
2320 tzidparam?
2321 }?,
2322
2323 value-date-time |
2324 value-date
2325 }
2326
2327 # 3.8.2.5 Duration
2328
2329 property-duration = element duration {
2330
2331 element parameters { empty }?,
2332
2333 value-duration
2334 }
2335
2336 # 3.8.2.6 Free/Busy Time
2337
2338 property-freebusy = element freebusy {
2339
2340 element parameters {
2341 fbtypeparam?
2342 }?,
2343
2344
2345 value-period+
2346 }
2347
2348 # 3.8.2.7 Time Transparency
2349
2350 property-transp = element transp {
2351
2352
2353
2354Daboo, et al. Standards Track [Page 42]
2355
2356RFC 6321 xCal August 2011
2357
2358
2359 element parameters { empty }?,
2360
2361 element text {
2362 "OPAQUE" |
2363 "TRANSPARENT"
2364 }
2365 }
2366
2367 # 3.8.3 Time Zone Component Properties
2368
2369 # 3.8.3.1 Time Zone Identifier
2370
2371 property-tzid = element tzid {
2372
2373 element parameters { empty }?,
2374
2375 value-text
2376 }
2377
2378 # 3.8.3.2 Time Zone Name
2379
2380 property-tzname = element tzname {
2381
2382 element parameters {
2383 languageparam?
2384 }?,
2385
2386 value-text
2387 }
2388
2389 # 3.8.3.3 Time Zone Offset From
2390
2391 property-tzoffsetfrom = element tzoffsetfrom {
2392
2393 element parameters { empty }?,
2394
2395 value-utc-offset
2396 }
2397
2398 # 3.8.3.4 Time Zone Offset To
2399
2400 property-tzoffsetto = element tzoffsetto {
2401
2402 element parameters { empty }?,
2403
2404 value-utc-offset
2405 }
2406
2407
2408
2409
2410Daboo, et al. Standards Track [Page 43]
2411
2412RFC 6321 xCal August 2011
2413
2414
2415 # 3.8.3.5 Time Zone URL
2416
2417 property-tzurl = element tzurl {
2418
2419 element parameters { empty }?,
2420
2421 value-uri
2422 }
2423
2424 # 3.8.4 Relationship Component Properties
2425
2426 # 3.8.4.1 Attendee
2427
2428 property-attendee = element attendee {
2429
2430 element parameters {
2431 cutypeparam? &
2432 memberparam? &
2433 roleparam? &
2434 partstatparam? &
2435 rsvpparam? &
2436 deltoparam? &
2437 delfromparam? &
2438 sentbyparam? &
2439 cnparam? &
2440 dirparam? &
2441 languageparam?
2442 }?,
2443
2444 value-cal-address
2445 }
2446
2447 # 3.8.4.2 Contact
2448
2449 property-contact = element contact {
2450
2451 element parameters {
2452 altrepparam? &
2453 languageparam?
2454 }?,
2455
2456 value-text
2457 }
2458
2459 # 3.8.4.3 Organizer
2460
2461 property-organizer = element organizer {
2462
2463
2464
2465
2466Daboo, et al. Standards Track [Page 44]
2467
2468RFC 6321 xCal August 2011
2469
2470
2471 element parameters {
2472 cnparam? &
2473 dirparam? &
2474 sentbyparam? &
2475 languageparam?
2476 }?,
2477
2478 value-cal-address
2479 }
2480
2481 # 3.8.4.4 Recurrence ID
2482
2483 property-recurid = element recurrence-id {
2484
2485 element parameters {
2486 tzidparam? &
2487 rangeparam?
2488 }?,
2489
2490 value-date-time |
2491 value-date
2492 }
2493
2494 # 3.8.4.5 Related-To
2495
2496 property-related = element related-to {
2497
2498 element parameters {
2499 reltypeparam?
2500 }?,
2501
2502 value-text
2503 }
2504
2505 # 3.8.4.6 Uniform Resource Locator
2506
2507 property-url = element url {
2508
2509 element parameters { empty }?,
2510
2511 value-uri
2512 }
2513
2514 # 3.8.4.7 Unique Identifier
2515
2516 property-uid = element uid {
2517
2518 element parameters { empty }?,
2519
2520
2521
2522Daboo, et al. Standards Track [Page 45]
2523
2524RFC 6321 xCal August 2011
2525
2526
2527 value-text
2528 }
2529
2530 # 3.8.5 Recurrence Component Properties
2531
2532 # 3.8.5.1 Exception Date/Times
2533
2534 property-exdate = element exdate {
2535
2536 element parameters {
2537 tzidparam?
2538 }?,
2539
2540 value-date-time+ |
2541 value-date+
2542 }
2543
2544 # 3.8.5.2 Recurrence Date/Times
2545
2546 property-rdate = element rdate {
2547
2548 element parameters {
2549 tzidparam?
2550 }?,
2551
2552 value-date-time+ |
2553 value-date+ |
2554 value-period+
2555 }
2556
2557 # 3.8.5.3 Recurrence Rule
2558
2559 property-rrule = element rrule {
2560
2561 element parameters { empty }?,
2562
2563 value-recur
2564 }
2565
2566 # 3.8.6 Alarm Component Properties
2567
2568 # 3.8.6.1 Action
2569
2570 property-action = element action {
2571
2572 element parameters { empty }?,
2573
2574
2575
2576
2577
2578Daboo, et al. Standards Track [Page 46]
2579
2580RFC 6321 xCal August 2011
2581
2582
2583 element text {
2584 "AUDIO" |
2585 "DISPLAY" |
2586 "EMAIL"
2587 }
2588 }
2589
2590 # 3.8.6.2 Repeat Count
2591
2592 property-repeat = element repeat {
2593
2594 element parameters { empty }?,
2595
2596 value-integer
2597 }
2598
2599 # 3.8.6.3 Trigger
2600
2601 property-trigger = element trigger {
2602
2603 (
2604 element parameters {
2605 trigrelparam?
2606 }?,
2607
2608 value-duration
2609 ) |
2610 (
2611 element parameters { empty }?,
2612
2613 value-date-time
2614 )
2615 }
2616
2617 # 3.8.7 Change Management Component Properties
2618
2619 # 3.8.7.1 Date/Time Created
2620
2621 property-created = element created {
2622
2623 element parameters { empty }?,
2624
2625 value-date-time
2626 }
2627
2628 # 3.8.7.2 Date/Time Stamp
2629
2630 property-dtstamp = element dtstamp {
2631
2632
2633
2634Daboo, et al. Standards Track [Page 47]
2635
2636RFC 6321 xCal August 2011
2637
2638
2639 element parameters { empty }?,
2640
2641 value-date-time
2642 }
2643
2644 # 3.8.7.3 Last Modified
2645
2646 property-last-mod = element last-modified {
2647
2648 element parameters { empty }?,
2649
2650 value-date-time
2651 }
2652
2653 # 3.8.7.4 Sequence Number
2654
2655 property-seq = element sequence {
2656
2657 element parameters { empty }?,
2658
2659 value-integer
2660 }
2661
2662 # 3.8.8 Miscellaneous Component Properties
2663
2664 # 3.8.8.3 Request Status
2665
2666 property-rstatus = element request-status {
2667
2668 element parameters {
2669 languageparam?
2670 }?,
2671
2672 element code { xsd:string },
2673 element description { xsd:string },
2674 element data { xsd:string }?
2675 }
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690Daboo, et al. Standards Track [Page 48]
2691
2692RFC 6321 xCal August 2011
2693
2694
2695Appendix B. Examples
2696
2697 This section contains two examples of iCalendar objects with their
2698 xCal representation.
2699
2700B.1. Example 1
2701
2702B.1.1. iCalendar Data
2703
2704 BEGIN:VCALENDAR
2705 CALSCALE:GREGORIAN
2706 PRODID:-//Example Inc.//Example Calendar//EN
2707 VERSION:2.0
2708 BEGIN:VEVENT
2709 DTSTAMP:20080205T191224Z
2710 DTSTART:20081006
2711 SUMMARY:Planning meeting
2712 UID:4088E990AD89CB3DBB484909
2713 END:VEVENT
2714 END:VCALENDAR
2715
2716B.1.2. XML Data
2717
2718 <?xml version="1.0" encoding="utf-8"?>
2719 <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
2720 <vcalendar>
2721 <properties>
2722 <calscale>
2723 <text>GREGORIAN</text>
2724 </calscale>
2725 <prodid>
2726 <text>-//Example Inc.//Example Calendar//EN</text>
2727 </prodid>
2728 <version>
2729 <text>2.0</text>
2730 </version>
2731 </properties>
2732 <components>
2733 <vevent>
2734 <properties>
2735 <dtstamp>
2736 <date-time>2008-02-05T19:12:24Z</date-time>
2737 </dtstamp>
2738 <dtstart>
2739 <date>2008-10-06</date>
2740 </dtstart>
2741 <summary>
2742 <text>Planning meeting</text>
2743
2744
2745
2746Daboo, et al. Standards Track [Page 49]
2747
2748RFC 6321 xCal August 2011
2749
2750
2751 </summary>
2752 <uid>
2753 <text>4088E990AD89CB3DBB484909</text>
2754 </uid>
2755 </properties>
2756 </vevent>
2757 </components>
2758 </vcalendar>
2759 </icalendar>
2760
2761B.2. Example 2
2762
2763B.2.1. iCalendar Data
2764
2765 VERSION:2.0
2766 PRODID:-//Example Corp.//Example Client//EN
2767 BEGIN:VTIMEZONE
2768 LAST-MODIFIED:20040110T032845Z
2769 TZID:US/Eastern
2770 BEGIN:DAYLIGHT
2771 DTSTART:20000404T020000
2772 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
2773 TZNAME:EDT
2774 TZOFFSETFROM:-0500
2775 TZOFFSETTO:-0400
2776 END:DAYLIGHT
2777 BEGIN:STANDARD
2778 DTSTART:20001026T020000
2779 RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
2780 TZNAME:EST
2781 TZOFFSETFROM:-0400
2782 TZOFFSETTO:-0500
2783 END:STANDARD
2784 END:VTIMEZONE
2785 BEGIN:VEVENT
2786 DTSTAMP:20060206T001121Z
2787 DTSTART;TZID=US/Eastern:20060102T120000
2788 DURATION:PT1H
2789 RRULE:FREQ=DAILY;COUNT=5
2790 RDATE;TZID=US/Eastern;VALUE=PERIOD:20060102T150000/PT2H
2791 SUMMARY:Event #2
2792 DESCRIPTION:We are having a meeting all this week at 12 pm fo
2793 r one hour\, with an additional meeting on the first day 2 h
2794 ours long.\nPlease bring your own lunch for the 12 pm meetin
2795 gs.
2796 UID:00959BC664CA650E933C892C@example.com
2797 END:VEVENT
2798 BEGIN:VEVENT
2799
2800
2801
2802Daboo, et al. Standards Track [Page 50]
2803
2804RFC 6321 xCal August 2011
2805
2806
2807 DTSTAMP:20060206T001121Z
2808 DTSTART;TZID=US/Eastern:20060104T140000
2809 DURATION:PT1H
2810 RECURRENCE-ID;TZID=US/Eastern:20060104T120000
2811 SUMMARY:Event #2 bis
2812 UID:00959BC664CA650E933C892C@example.com
2813 END:VEVENT
2814 END:VCALENDAR
2815
2816B.2.2. XML Data
2817
2818 <?xml version="1.0" encoding="utf-8" ?>
2819 <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
2820 <vcalendar>
2821 <properties>
2822 <prodid>
2823 <text>-//Example Inc.//Example Client//EN</text>
2824 </prodid>
2825 <version>
2826 <text>2.0</text>
2827 </version>
2828 </properties>
2829 <components>
2830 <vtimezone>
2831 <properties>
2832 <last-modified>
2833 <date-time>2004-01-10T03:28:45Z</date-time>
2834 </last-modified>
2835 <tzid>US/Eastern</tzid>
2836 </properties>
2837 <components>
2838 <daylight>
2839 <properties>
2840 <dtstart>
2841 <date-time>2000-04-04T02:00:00</date-time>
2842 </dtstart>
2843 <rrule>
2844 <recur>
2845 <freq>YEARLY</freq>
2846 <byday>1SU</byday>
2847 <bymonth>4</bymonth>
2848 </recur>
2849 </rrule>
2850 <tzname>
2851 <text>EDT</text>
2852 </tzname>
2853 <tzoffsetfrom>
2854 <utc-offset>-05:00</utc-offset>
2855
2856
2857
2858Daboo, et al. Standards Track [Page 51]
2859
2860RFC 6321 xCal August 2011
2861
2862
2863 </tzoffsetfrom>
2864 <tzoffsetto>
2865 <utc-offset>-04:00</utc-offset>
2866 </tzoffsetto>
2867 </properties>
2868 </daylight>
2869 <standard>
2870 <properties>
2871 <dtstart>
2872 <date-time>2000-10-26T02:00:00</date-time>
2873 </dtstart>
2874 <rrule>
2875 <recur>
2876 <freq>YEARLY</freq>
2877 <byday>-1SU</byday>
2878 <bymonth>10</bymonth>
2879 </recur>
2880 </rrule>
2881 <tzname>
2882 <text>EST</text>
2883 </tzname>
2884 <tzoffsetfrom>
2885 <utc-offset>-04:00</utc-offset>
2886 </tzoffsetfrom>
2887 <tzoffsetto>
2888 <utc-offset>-05:00</utc-offset>
2889 </tzoffsetto>
2890 </properties>
2891 </standard>
2892 </components>
2893 </vtimezone>
2894 <vevent>
2895 <properties>
2896 <dtstamp>
2897 <date-time>2006-02-06T00:11:21Z</date-time>
2898 </dtstamp>
2899 <dtstart>
2900 <parameters>
2901 <tzid><text>US/Eastern</text></tzid>
2902 </parameters>
2903 <date-time>2006-01-02T12:00:00</date-time>
2904 </dtstart>
2905 <duration>
2906 <duration>PT1H</duration>
2907 </duration>
2908 <rrule>
2909 <recur>
2910 <freq>DAILY</freq>
2911
2912
2913
2914Daboo, et al. Standards Track [Page 52]
2915
2916RFC 6321 xCal August 2011
2917
2918
2919 <count>5</count>
2920 </recur>
2921 </rrule>
2922 <rdate>
2923 <parameters>
2924 <tzid><text>US/Eastern</text></tzid>
2925 </parameters>
2926 <period>
2927 <start>2006-01-02T15:00:00</start>
2928 <duration>PT2H</duration>
2929 </period>
2930 </rdate>
2931 <summary>
2932 <text>Event #2</text>
2933 </summary>
2934 <description>
2935 <text>We are having a meeting all this week at 12
2936 pm for one hour, with an additional meeting on the first day
2937 2 hours long.&#x0a;Please bring your own lunch for the 12 pm
2938 meetings.</text>
2939 </description>
2940 <uid>
2941 <text>00959BC664CA650E933C892C@example.com</text>
2942 </uid>
2943 </properties>
2944 </vevent>
2945 <vevent>
2946 <properties>
2947 <dtstamp>
2948 <date-time>2006-02-06T00:11:21Z</date-time>
2949 </dtstamp>
2950 <dtstart>
2951 <parameters>
2952 <tzid><text>US/Eastern</text></tzid>
2953 </parameters>
2954 <date-time>2006-01-04T14:00:00</date-time>
2955 </dtstart>
2956 <duration>
2957 <duration>PT1H</duration>
2958 </duration>
2959 <recurrence-id>
2960 <parameters>
2961 <tzid><text>US/Eastern</text></tzid>
2962 </parameters>
2963 <date-time>2006-01-04T12:00:00</date-time>
2964 </recurrence-id>
2965 <summary>
2966 <text>Event #2 bis</text>
2967
2968
2969
2970Daboo, et al. Standards Track [Page 53]
2971
2972RFC 6321 xCal August 2011
2973
2974
2975 </summary>
2976 <uid>
2977 <text>00959BC664CA650E933C892C@example.com</text>
2978 </uid>
2979 </properties>
2980 </vevent>
2981 </components>
2982 </vcalendar>
2983 </icalendar>
2984
2985Authors' Addresses
2986
2987 Cyrus Daboo
2988 Apple Inc.
2989 1 Infinite Loop
2990 Cupertino, CA 95014
2991 USA
2992
2993 EMail: cyrus@daboo.name
2994 URI: http://www.apple.com/
2995
2996
2997 Mike Douglass
2998 Rensselaer Polytechnic Institute
2999 110 8th Street
3000 Troy, NY 12180
3001 USA
3002
3003 EMail: douglm@rpi.edu
3004 URI: http://www.rpi.edu/
3005
3006
3007 Steven Lees
3008 Microsoft Corporation
3009 One Microsoft Way
3010 Redmond, WA 98052
3011 USA
3012
3013 EMail: steven.lees@microsoft.com
3014 URI: http://www.microsoft.com/
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026Daboo, et al. Standards Track [Page 54]
3027
3028