]> git.mxchange.org Git - friendica-addons.git/blob - dav/SabreDAV/docs/rfc6321.txt
Merge branch 'master' of git://github.com/friendica/friendica-addons
[friendica-addons.git] / dav / SabreDAV / docs / rfc6321.txt
1
2
3
4
5
6
7 Internet Engineering Task Force (IETF)                          C. Daboo
8 Request for Comments: 6321                                   Apple, Inc.
9 Category: Standards Track                                    M. Douglass
10 ISSN: 2070-1721                                                      RPI
11                                                                  S. Lees
12                                                                Microsoft
13                                                              August 2011
14
15
16                    xCal: The XML Format for iCalendar
17
18 Abstract
19
20    This specification defines "xCal", an XML format for iCalendar data.
21
22 Status 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
36 Copyright 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
58 Daboo, et al.                Standards Track                    [Page 1]
59 \f
60 RFC 6321                          xCal                       August 2011
61
62
63 Table 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
114 Daboo, et al.                Standards Track                    [Page 2]
115 \f
116 RFC 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
128 1.  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
170 Daboo, et al.                Standards Track                    [Page 3]
171 \f
172 RFC 6321                          xCal                       August 2011
173
174
175 2.  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
191 3.  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
196 3.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
226 Daboo, et al.                Standards Track                    [Page 4]
227 \f
228 RFC 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
236 3.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
282 Daboo, et al.                Standards Track                    [Page 5]
283 \f
284 RFC 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
308 3.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
330 3.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
338 Daboo, et al.                Standards Track                    [Page 6]
339 \f
340 RFC 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
394 Daboo, et al.                Standards Track                    [Page 7]
395 \f
396 RFC 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
436 3.4.1.  Special Cases for Properties
437
438    This section describes some properties that have special handling
439    when converting to xCal.
440
441 3.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
450 Daboo, et al.                Standards Track                    [Page 8]
451 \f
452 RFC 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
465 3.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
488 3.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
506 Daboo, et al.                Standards Track                    [Page 9]
507 \f
508 RFC 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
523 3.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
562 Daboo, et al.                Standards Track                   [Page 10]
563 \f
564 RFC 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
595 3.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
607 3.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
618 Daboo, et al.                Standards Track                   [Page 11]
619 \f
620 RFC 6321                          xCal                       August 2011
621
622
623 3.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
639 3.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
651 3.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
663 3.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
674 Daboo, et al.                Standards Track                   [Page 12]
675 \f
676 RFC 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
685 3.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
704 3.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
716 3.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
730 Daboo, et al.                Standards Track                   [Page 13]
731 \f
732 RFC 6321                          xCal                       August 2011
733
734
735 3.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
748 3.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
764 3.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
786 Daboo, et al.                Standards Track                   [Page 14]
787 \f
788 RFC 6321                          xCal                       August 2011
789
790
791 3.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
802 3.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
820 3.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
842 Daboo, et al.                Standards Track                   [Page 15]
843 \f
844 RFC 6321                          xCal                       August 2011
845
846
847 3.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
862 3.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
873 4.  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
885 4.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
898 Daboo, et al.                Standards Track                   [Page 16]
899 \f
900 RFC 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
909 4.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
954 Daboo, et al.                Standards Track                   [Page 17]
955 \f
956 RFC 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
981 5.  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
1010 Daboo, et al.                Standards Track                   [Page 18]
1011 \f
1012 RFC 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
1056 6.  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
1066 Daboo, et al.                Standards Track                   [Page 19]
1067 \f
1068 RFC 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
1075 7.  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
1087 7.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
1098 7.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
1122 Daboo, et al.                Standards Track                   [Page 20]
1123 \f
1124 RFC 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
1158 7.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
1178 Daboo, et al.                Standards Track                   [Page 21]
1179 \f
1180 RFC 6321                          xCal                       August 2011
1181
1182
1183 8.  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
1191 9.  References
1192
1193 9.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
1222 9.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
1234 Daboo, et al.                Standards Track                   [Page 22]
1235 \f
1236 RFC 6321                          xCal                       August 2011
1237
1238
1239 Appendix 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
1290 Daboo, et al.                Standards Track                   [Page 23]
1291 \f
1292 RFC 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
1346 Daboo, et al.                Standards Track                   [Page 24]
1347 \f
1348 RFC 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
1402 Daboo, et al.                Standards Track                   [Page 25]
1403 \f
1404 RFC 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
1458 Daboo, et al.                Standards Track                   [Page 26]
1459 \f
1460 RFC 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
1514 Daboo, et al.                Standards Track                   [Page 27]
1515 \f
1516 RFC 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
1570 Daboo, et al.                Standards Track                   [Page 28]
1571 \f
1572 RFC 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
1626 Daboo, et al.                Standards Track                   [Page 29]
1627 \f
1628 RFC 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
1682 Daboo, et al.                Standards Track                   [Page 30]
1683 \f
1684 RFC 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
1738 Daboo, et al.                Standards Track                   [Page 31]
1739 \f
1740 RFC 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
1794 Daboo, et al.                Standards Track                   [Page 32]
1795 \f
1796 RFC 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
1850 Daboo, et al.                Standards Track                   [Page 33]
1851 \f
1852 RFC 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
1906 Daboo, et al.                Standards Track                   [Page 34]
1907 \f
1908 RFC 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
1962 Daboo, et al.                Standards Track                   [Page 35]
1963 \f
1964 RFC 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
2018 Daboo, et al.                Standards Track                   [Page 36]
2019 \f
2020 RFC 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
2074 Daboo, et al.                Standards Track                   [Page 37]
2075 \f
2076 RFC 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
2130 Daboo, et al.                Standards Track                   [Page 38]
2131 \f
2132 RFC 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
2186 Daboo, et al.                Standards Track                   [Page 39]
2187 \f
2188 RFC 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
2242 Daboo, et al.                Standards Track                   [Page 40]
2243 \f
2244 RFC 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
2298 Daboo, et al.                Standards Track                   [Page 41]
2299 \f
2300 RFC 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
2354 Daboo, et al.                Standards Track                   [Page 42]
2355 \f
2356 RFC 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
2410 Daboo, et al.                Standards Track                   [Page 43]
2411 \f
2412 RFC 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
2466 Daboo, et al.                Standards Track                   [Page 44]
2467 \f
2468 RFC 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
2522 Daboo, et al.                Standards Track                   [Page 45]
2523 \f
2524 RFC 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
2578 Daboo, et al.                Standards Track                   [Page 46]
2579 \f
2580 RFC 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
2634 Daboo, et al.                Standards Track                   [Page 47]
2635 \f
2636 RFC 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
2690 Daboo, et al.                Standards Track                   [Page 48]
2691 \f
2692 RFC 6321                          xCal                       August 2011
2693
2694
2695 Appendix B.  Examples
2696
2697    This section contains two examples of iCalendar objects with their
2698    xCal representation.
2699
2700 B.1.  Example 1
2701
2702 B.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
2716 B.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
2746 Daboo, et al.                Standards Track                   [Page 49]
2747 \f
2748 RFC 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
2761 B.2.  Example 2
2762
2763 B.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
2802 Daboo, et al.                Standards Track                   [Page 50]
2803 \f
2804 RFC 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
2816 B.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
2858 Daboo, et al.                Standards Track                   [Page 51]
2859 \f
2860 RFC 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
2914 Daboo, et al.                Standards Track                   [Page 52]
2915 \f
2916 RFC 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
2970 Daboo, et al.                Standards Track                   [Page 53]
2971 \f
2972 RFC 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
2985 Authors' 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
3026 Daboo, et al.                Standards Track                   [Page 54]
3027 \f