6321
PROPOSED STANDARD

xCal: The XML Format for iCalendar

Authors: C. Daboo, M. Douglass, S. Lees
Date: August 2011
Working Group: NON WORKING GROUP
Stream: IETF
Updated by: RFC 6868

Abstract

This specification defines "xCal", an XML format for iCalendar data. [STANDARDS-TRACK]

RFC 6321: xCal: The XML Format for iCalendar [RFC Home] [TEXT|PDF|HTML] [Tracker] [IPR] [Errata] [Info page]

PROPOSED STANDARD
Updated by: 6868, 7529 Errata Exist
Internet Engineering Task Force (IETF)                          C. Daboo
Request for Comments: 6321                                   Apple, Inc.
Category: Standards Track                                    M. Douglass
ISSN: 2070-1721                                                      RPI
                                                                 S. Lees
                                                               Microsoft
                                                             August 2011


                   <span class="h1">xCal: The XML Format for iCalendar</span>

Abstract

   This specification defines "xCal", an XML format for iCalendar data.

Status of This Memo

   This is an Internet Standards Track document.

   This document is a product of the Internet Engineering Task Force
   (IETF).  It represents the consensus of the IETF community.  It has
   received public review and has been approved for publication by the
   Internet Engineering Steering Group (IESG).  Further information on
   Internet Standards is available in <a href="./rfc5741#section-2">Section 2 of RFC 5741</a>.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at
   <a href="https://www.rfc-editor.org/info/rfc6321">http://www.rfc-editor.org/info/rfc6321</a>.

Copyright Notice

   Copyright (c) 2011 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to <a href="https://www.rfc-editor.org/bcp/bcp78">BCP 78</a> and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (<a href="http://trustee.ietf.org/license-info">http://trustee.ietf.org/license-info</a>) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.








<span class="grey">Daboo, et al.                Standards Track                    [Page 1]</span>

<span id="page-2" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


Table of Contents

   <a href="#section-1">1</a>. Introduction ....................................................<a href="#page-3">3</a>
   <a href="#section-2">2</a>. Conventions Used in This Document ...............................<a href="#page-4">4</a>
   <a href="#section-3">3</a>. Converting from iCalendar to xCal ...............................<a href="#page-4">4</a>
      <a href="#section-3.1">3.1</a>. Pre-Processing .............................................<a href="#page-4">4</a>
      <a href="#section-3.2">3.2</a>. iCalendar Stream (<a href="./rfc5545#section-3.4">RFC 5545, Section 3.4</a>) ...................<a href="#page-5">5</a>
      <a href="#section-3.3">3.3</a>. Components (<a href="./rfc5545#section-3.6">RFC 5545, Section 3.6</a>) .........................<a href="#page-6">6</a>
      <a href="#section-3.4">3.4</a>. Properties (<a href="./rfc5545">RFC 5545</a>, Sections <a href="#section-3.7">3.7</a> and <a href="#section-3.8">3.8</a>) ................<a href="#page-6">6</a>
           <a href="#section-3.4.1">3.4.1</a>. Special Cases for Properties ........................<a href="#page-8">8</a>
                  <a href="#section-3.4.1.1">3.4.1.1</a>. Multi-Valued Properties ....................<a href="#page-8">8</a>
                  <a href="#section-3.4.1.2">3.4.1.2</a>. GEO Property ...............................<a href="#page-9">9</a>
                  <a href="#section-3.4.1.3">3.4.1.3</a>. REQUEST-STATUS Property ....................<a href="#page-9">9</a>
      <a href="#section-3.5">3.5</a>. Parameters (<a href="./rfc5545#section-3.2">RFC 5545, Section 3.2</a>) ........................<a href="#page-10">10</a>
           <a href="#section-3.5.1">3.5.1</a>. VALUE Parameter ....................................<a href="#page-11">11</a>
      <a href="#section-3.6">3.6</a>. Values (<a href="./rfc5545#section-3.3">RFC 5545, Section 3.3</a>) ............................<a href="#page-11">11</a>
           <a href="#section-3.6.1">3.6.1</a>. Binary (<a href="./rfc5545#section-3.3.1">RFC 5545, Section 3.3.1</a>) ...................<a href="#page-12">12</a>
           <a href="#section-3.6.2">3.6.2</a>. Boolean  (<a href="./rfc5545#section-3.3.2">RFC 5545, Section 3.3.2</a>) .................<a href="#page-12">12</a>
           <a href="#section-3.6.3">3.6.3</a>. Calendar User Address (<a href="./rfc5545#section-3.3.3">RFC 5545, Section 3.3.3</a>) ....<a href="#page-12">12</a>
           <a href="#section-3.6.4">3.6.4</a>. Date (<a href="./rfc5545#section-3.3.4">RFC 5545, Section 3.3.4</a>) .....................<a href="#page-12">12</a>
           <a href="#section-3.6.5">3.6.5</a>. Date-Time (<a href="./rfc5545#section-3.3.5">RFC 5545, Section 3.3.5</a>) ................<a href="#page-13">13</a>
           <a href="#section-3.6.6">3.6.6</a>. Duration (<a href="./rfc5545#section-3.3.6">RFC 5545, Section 3.3.6</a>) .................<a href="#page-13">13</a>
           <a href="#section-3.6.7">3.6.7</a>. Float (<a href="./rfc5545#section-3.3.7">RFC 5545, Section 3.3.7</a>) ....................<a href="#page-13">13</a>
           <a href="#section-3.6.8">3.6.8</a>. Integer (<a href="./rfc5545#section-3.3.8">RFC 5545, Section 3.3.8</a>) ..................<a href="#page-14">14</a>
           <a href="#section-3.6.9">3.6.9</a>. Period of Time (<a href="./rfc5545#section-3.3.9">RFC 5545, Section 3.3.9</a>) ...........<a href="#page-14">14</a>
           <a href="#section-3.6.10">3.6.10</a>. Recurrence Rule (<a href="./rfc5545#section-3.3.10">RFC 5545, Section 3.3.10</a>) ........<a href="#page-14">14</a>
           <a href="#section-3.6.11">3.6.11</a>. Text (<a href="./rfc5545#section-3.3.11">RFC 5545, Section 3.3.11</a>) ...................<a href="#page-15">15</a>
           <a href="#section-3.6.12">3.6.12</a>. Time (<a href="./rfc5545#section-3.3.12">RFC 5545, Section 3.3.12</a>) ...................<a href="#page-15">15</a>
           <a href="#section-3.6.13">3.6.13</a>. URI (<a href="./rfc5545#section-3.3.13">RFC 5545, Section 3.3.13</a>) ....................<a href="#page-15">15</a>
           <a href="#section-3.6.14">3.6.14</a>. UTC Offset (<a href="./rfc5545#section-3.3.14">RFC 5545, Section 3.3.14</a>) .............<a href="#page-16">16</a>
      <a href="#section-3.7">3.7</a>. Extensions ................................................<a href="#page-16">16</a>
   <a href="#section-4">4</a>. Converting from xCal into iCalendar ............................<a href="#page-16">16</a>
      <a href="#section-4.1">4.1</a>. Converting XML Extensions into iCalendar ..................<a href="#page-16">16</a>
      <a href="#section-4.2">4.2</a>. The XML Property for iCalendar ............................<a href="#page-17">17</a>
   <a href="#section-5">5</a>. Handling Unrecognized Properties or Parameters .................<a href="#page-18">18</a>
   <a href="#section-6">6</a>. Security Considerations ........................................<a href="#page-19">19</a>
   <a href="#section-7">7</a>. IANA Considerations ............................................<a href="#page-20">20</a>
      <a href="#section-7.1">7.1</a>. Namespace Registration ....................................<a href="#page-20">20</a>
      <a href="#section-7.2">7.2</a>. Media Type ................................................<a href="#page-20">20</a>
      <a href="#section-7.3">7.3</a>. iCalendar Property Registrations ..........................<a href="#page-21">21</a>
   <a href="#section-8">8</a>. Acknowledgments ................................................<a href="#page-22">22</a>
   <a href="#section-9">9</a>. References .....................................................<a href="#page-22">22</a>
      <a href="#section-9.1">9.1</a>. Normative References ......................................<a href="#page-22">22</a>
      <a href="#section-9.2">9.2</a>. Informative References ....................................<a href="#page-22">22</a>







<span class="grey">Daboo, et al.                Standards Track                    [Page 2]</span>

<span id="page-3" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   <a href="#appendix-A">Appendix A</a>. RELAX NG Schema .......................................<a href="#page-23">23</a>
   <a href="#appendix-B">Appendix B</a>. Examples ..............................................<a href="#page-49">49</a>
     <a href="#appendix-B.1">B.1</a>. Example 1 ..................................................<a href="#page-49">49</a>
       <a href="#appendix-B.1.1">B.1.1</a>. iCalendar Data .........................................<a href="#page-49">49</a>
       <a href="#appendix-B.1.2">B.1.2</a>. XML Data ...............................................<a href="#page-49">49</a>
     <a href="#appendix-B.2">B.2</a>. Example 2 ..................................................<a href="#page-50">50</a>
       <a href="#appendix-B.2.1">B.2.1</a>. iCalendar Data .........................................<a href="#page-50">50</a>
       <a href="#appendix-B.2.2">B.2.2</a>. XML Data ...............................................<a href="#page-51">51</a>

<span class="h2"><a class="selflink" id="section-1" href="#section-1">1</a>.  Introduction</span>

   The iCalendar data format [<a href="./rfc5545" title=""Internet Calendaring and Scheduling Core Object Specification (iCalendar)"">RFC5545</a>] is a widely deployed interchange
   format for calendaring and scheduling data.  While many applications
   and services consume and generate calendar data, iCalendar is a
   specialized format that requires its own parser/generator.  In
   contrast, XML-based formats are widely used for interoperability
   between applications, and the many tools that generate, parse, and
   manipulate XML make it easier to work with than iCalendar.

   The purpose of this specification is to define "xCal", an XML format
   for iCalendar data. xCal is defined as a straightforward mapping into
   XML from iCalendar, so that iCalendar data can be converted to XML,
   and then back to iCalendar, without losing any semantic meaning in
   the data.  Anyone creating xCal calendar data according to this
   specification will know that their data can be converted to a valid
   iCalendar representation as well.

   Key design considerations are:

      Round-tripping (converting an iCalendar instance to xCal and back)
      will give the same semantic result as the starting point.  That
      is, all components, properties, and property parameters are
      guaranteed to be preserved, with the exception of those that have
      default values.

      xCal preserves the semantics of the iCalendar data.  While a
      simple consumer can easily browse the calendar data in xCal, a
      full understanding of iCalendar is still required in order to
      modify and/or fully comprehend the calendar data.

      xCal has the ability to handle many extensions to the underlying
      iCalendar specification without requiring an update to this
      document.








<span class="grey">Daboo, et al.                Standards Track                    [Page 3]</span>

<span id="page-4" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


<span class="h2"><a class="selflink" id="section-2" href="#section-2">2</a>.  Conventions Used in This Document</span>

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [<a href="./rfc2119" title=""Key words for use in RFCs to Indicate Requirement Levels"">RFC2119</a>].

   When XML element types in the namespace
   "urn:ietf:params:xml:ns:icalendar-2.0" are referenced in this
   document outside of the context of an XML fragment, the string "IC:"
   will be prefixed to the element types.

   Some examples in this document contain "partial" XML documents used
   for illustrative purposes.  In these examples, three periods "..."
   are used to indicate a portion of the document that has been removed
   for compactness.

<span class="h2"><a class="selflink" id="section-3" href="#section-3">3</a>.  Converting from iCalendar to xCal</span>

   This section describes how iCalendar data is converted to xCal using
   a simple mapping between the iCalendar data model and XML elements.

<span class="h3"><a class="selflink" id="section-3.1" href="#section-3.1">3.1</a>.  Pre-Processing</span>

   iCalendar uses a line folding mechanism to limit lines of data to a
   maximum line length (typically 72 characters) to ensure maximum
   likelihood of preserving data integrity as it is transported via
   various means (e.g., email) -- see <a href="./rfc5545#section-3.1">Section 3.1 of [RFC5545]</a>.  Prior
   to converting iCalendar data into xCal, all folded lines MUST be
   unfolded.

   iCalendar data uses an "escape" character sequence for text values
   and property parameter values.  When such text elements are converted
   into xCal, the escaping MUST be removed.

   iCalendar uses a base64 encoding for binary data.  However, it does
   not restrict the encoding from being applied to non-binary value
   types.  So, the following rules MUST be applied when processing a
   property with the "ENCODING" property parameter set to "BASE64":

   o  If the property value type is "BINARY", the base64 encoding MUST
      be preserved.

   o  If the value type is not "BINARY", the "ENCODING" property
      parameter MUST be removed, and the value MUST be base64 decoded.

   When base64 encoding and decoding are used, they MUST conform to
   <a href="./rfc4648#section-4">Section 4 of [RFC4648]</a>, which is the base64 method used in [<a href="./rfc5545" title=""Internet Calendaring and Scheduling Core Object Specification (iCalendar)"">RFC5545</a>].




<span class="grey">Daboo, et al.                Standards Track                    [Page 4]</span>

<span id="page-5" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   One key difference in the formatting of values used in iCalendar and
   xCal is that, in xCal, the specification uses date/time and UTC
   offset values aligned with the syntax of
   [<a href="#ref-W3C.REC-xmlschema-2-20041028">W3C.REC-xmlschema-2-20041028</a>] to aid with XML processing.

<span class="h3"><a class="selflink" id="section-3.2" href="#section-3.2">3.2</a>.  iCalendar Stream (<a href="./rfc5545#section-3.4">RFC 5545, Section 3.4</a>)</span>

   At the top level of the iCalendar object model is an "iCalendar
   stream".  This object encompasses multiple "iCalendar objects".  In
   xCal, the entire stream is contained in the root IC:icalendar XML
   element.

   An iCalendar stream can contain one or more iCalendar objects.  Each
   iCalendar object, delimited by "BEGIN:VCALENDAR" and "END:VCALENDAR",
   is enclosed by the IC:vcalendar XML element.

   Example:

   <?xml version="1.0" encoding="utf-8"?>
   <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
     <vcalendar>
     ...
     </vcalendar>
   </icalendar>

   iCalendar objects are comprised of a set of "components",
   "properties", "parameters", and "values".  A "component" can contain
   other "components" or "properties".  A "property" has a value and a
   set of zero or more "parameters".

   In xCal, component elements, for example, IC:vevent and IC:vtodo, are
   contained within an IC:components XML element.  Within the component
   element, another IC:components element could appear (representing
   components nested within components) or the IC:properties XML element
   could appear.  IC:properties is used to encapsulate iCalendar
   properties.

   Each iCalendar property will be mapped to its own XML element as
   described below.  Within each of these elements, there is zero or one
   IC:parameters XML element used to encapsulate any iCalendar property
   parameters.  Additionally there will be one or more XML elements
   representing the value of the iCalendar property.









<span class="grey">Daboo, et al.                Standards Track                    [Page 5]</span>

<span id="page-6" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   Example:

   <?xml version="1.0" encoding="utf-8"?>
   <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
     <vcalendar>
       <properties>
       ...
       </properties>
       <components>
       ...
       </components>
     </vcalendar>
   </icalendar>

          +------------------+--------------+------------------+
          | Item             | XML element  | XML Definition   |
          +------------------+--------------+------------------+
          | iCalendar Stream | IC:icalendar | <a href="#appendix-A">Appendix A</a> # 3.4 |
          | VCALENDAR        | IC:vcalendar | <a href="#appendix-A">Appendix A</a> # 3.6 |
          +------------------+--------------+------------------+

<span class="h3"><a class="selflink" id="section-3.3" href="#section-3.3">3.3</a>.  Components (<a href="./rfc5545#section-3.6">RFC 5545, Section 3.6</a>)</span>

   Each calendar component in the "VCALENDAR" object, delimited by
   "BEGIN" and "END", will be converted to an enclosing XML element with
   the same name, but in lowercase.  As an example, the table below
   shows iCalendar-to-xCal mappings for current iCalendar components.
   Any new iCalendar components added in the future will be converted in
   the same way.

             +-----------+--------------+--------------------+
             | Component | XML element  | XML Definition     |
             +-----------+--------------+--------------------+
             | VEVENT    | IC:vevent    | <a href="#appendix-A">Appendix A</a> # 3.6.1 |
             | VTODO     | IC:vtodo     | <a href="#appendix-A">Appendix A</a> # 3.6.2 |
             | VJOURNAL  | IC:vjournal  | <a href="#appendix-A">Appendix A</a> # 3.6.3 |
             | VFREEBUSY | IC:vfreebusy | <a href="#appendix-A">Appendix A</a> # 3.6.4 |
             | VTIMEZONE | IC:vtimezone | <a href="#appendix-A">Appendix A</a> # 3.6.5 |
             | STANDARD  | IC:standard  | <a href="#appendix-A">Appendix A</a> # 3.6.5 |
             | DAYLIGHT  | IC:daylight  | <a href="#appendix-A">Appendix A</a> # 3.6.5 |
             | VALARM    | IC:valarm    | <a href="#appendix-A">Appendix A</a> # 3.6.6 |
             +-----------+--------------+--------------------+

<span class="h3"><a class="selflink" id="section-3.4" href="#section-3.4">3.4</a>.  Properties (<a href="./rfc5545">RFC 5545</a>, Sections <a href="#section-3.7">3.7</a> and <a href="#section-3.8">3.8</a>)</span>

   iCalendar properties, whether they apply to the "VCALENDAR" object or
   to a component, are handled in a consistent way in the xCal format.




<span class="grey">Daboo, et al.                Standards Track                    [Page 6]</span>

<span id="page-7" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   iCalendar properties are enclosed in the XML element IC:properties.

   Each individual iCalendar property is represented in xCal by an
   element of the same name as the iCalendar property, but in lowercase.
   For example, the "CALSCALE" property is represented in xCal by the
   IC:calscale element.

   Example:

   <?xml version="1.0" encoding="utf-8"?>
   <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
     <vcalendar>
       <properties>
         <calscale>...</calscale>
         <version>...</version>
         <prodid>...</prodid>
       </properties>
       <components>
       ...
       </components>
     </vcalendar>
   </icalendar>

   Each property can contain an IC:parameters XML element encapsulating
   any iCalendar property parameters associated with the iCalendar
   property.

   Each property will contain one or more "value" XML elements as
   described below representing the value of the iCalendar property.

   As an example, the table below shows iCalendar-to-xCal mappings for
   current iCalendar properties.  Any new iCalendar properties added in
   the future will be converted in the same way.

    +------------------+---------------------+-----------------------+
    | Property         | XML element         | XML Definition        |
    +------------------+---------------------+-----------------------+
    | CALSCALE         | IC:calscale         | <a href="#appendix-A">Appendix A</a> # 3.7.1    |
    | METHOD           | IC:method           | <a href="#appendix-A">Appendix A</a> # 3.7.2    |
    | PRODID           | IC:prodid           | <a href="#appendix-A">Appendix A</a> # 3.7.3    |
    | VERSION          | IC:version          | <a href="#appendix-A">Appendix A</a> # 3.7.4    |
    | ATTACH           | IC:attach           | <a href="#appendix-A">Appendix A</a> # 3.8.1.1  |
    | CATEGORIES       | IC:categories       | <a href="#appendix-A">Appendix A</a> # 3.8.1.2  |
    | CLASS            | IC:class            | <a href="#appendix-A">Appendix A</a> # 3.8.1.3  |
    | COMMENT          | IC:comment          | <a href="#appendix-A">Appendix A</a> # 3.8.1.4  |
    | DESCRIPTION      | IC:description      | <a href="#appendix-A">Appendix A</a> # 3.8.1.5  |
    | GEO              | IC:geo              | <a href="#appendix-A">Appendix A</a> # 3.8.1.6  |
    | LOCATION         | IC:location         | <a href="#appendix-A">Appendix A</a> # 3.8.1.7  |



<span class="grey">Daboo, et al.                Standards Track                    [Page 7]</span>

<span id="page-8" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


    | PERCENT-COMPLETE | IC:percent-complete | <a href="#appendix-A">Appendix A</a> # 3.8.1.8  |
    | PRIORITY         | IC:priority         | <a href="#appendix-A">Appendix A</a> # 3.8.1.9  |
    | RESOURCES        | IC:resources        | <a href="#appendix-A">Appendix A</a> # 3.8.1.10 |
    | STATUS           | IC:status           | <a href="#appendix-A">Appendix A</a> # 3.8.1.11 |
    | SUMMARY          | IC:summary          | <a href="#appendix-A">Appendix A</a> # 3.8.1.12 |
    | COMPLETED        | IC:completed        | <a href="#appendix-A">Appendix A</a> # 3.8.2.1  |
    | DTEND            | IC:dtend            | <a href="#appendix-A">Appendix A</a> # 3.8.2.2  |
    | DUE              | IC:due              | <a href="#appendix-A">Appendix A</a> # 3.8.2.3  |
    | DTSTART          | IC:dtstart          | <a href="#appendix-A">Appendix A</a> # 3.8.2.4  |
    | DURATION         | IC:duration         | <a href="#appendix-A">Appendix A</a> # 3.8.2.5  |
    | FREEBUSY         | IC:freebusy         | <a href="#appendix-A">Appendix A</a> # 3.8.2.6  |
    | TRANSP           | IC:transp           | <a href="#appendix-A">Appendix A</a> # 3.8.2.7  |
    | TZID             | IC:tzid             | <a href="#appendix-A">Appendix A</a> # 3.8.3.1  |
    | TZNAME           | IC:tzname           | <a href="#appendix-A">Appendix A</a> # 3.8.3.2  |
    | TZOFFSETFROM     | IC:tzoffsetfrom     | <a href="#appendix-A">Appendix A</a> # 3.8.3.3  |
    | TZOFFSETTO       | IC:tzoffsetto       | <a href="#appendix-A">Appendix A</a> # 3.8.3.4  |
    | TZURL            | IC:tzurl            | <a href="#appendix-A">Appendix A</a> # 3.8.3.5  |
    | ATTENDEE         | IC:attendee         | <a href="#appendix-A">Appendix A</a> # 3.8.4.1  |
    | CONTACT          | IC:contact          | <a href="#appendix-A">Appendix A</a> # 3.8.4.2  |
    | ORGANIZER        | IC:organizer        | <a href="#appendix-A">Appendix A</a> # 3.8.4.3  |
    | RECURRENCE-ID    | IC:recurrence-id    | <a href="#appendix-A">Appendix A</a> # 3.8.4.4  |
    | RELATED-TO       | IC:related-to       | <a href="#appendix-A">Appendix A</a> # 3.8.4.5  |
    | URL              | IC:url              | <a href="#appendix-A">Appendix A</a> # 3.8.4.6  |
    | UID              | IC:uid              | <a href="#appendix-A">Appendix A</a> # 3.8.4.7  |
    | EXDATE           | IC:exdate           | <a href="#appendix-A">Appendix A</a> # 3.8.5.1  |
    | RDATE            | IC:rdate            | <a href="#appendix-A">Appendix A</a> # 3.8.5.2  |
    | RRULE            | IC:rrule            | <a href="#appendix-A">Appendix A</a> # 3.8.5.3  |
    | ACTION           | IC:action           | <a href="#appendix-A">Appendix A</a> # 3.8.6.1  |
    | REPEAT           | IC:repeat           | <a href="#appendix-A">Appendix A</a> # 3.8.6.2  |
    | TRIGGER          | IC:trigger          | <a href="#appendix-A">Appendix A</a> # 3.8.6.3  |
    | CREATED          | IC:created          | <a href="#appendix-A">Appendix A</a> # 3.8.7.1  |
    | DTSTAMP          | IC:dtstamp          | <a href="#appendix-A">Appendix A</a> # 3.8.7.2  |
    | LAST-MODIFIED    | IC:last-modified    | <a href="#appendix-A">Appendix A</a> # 3.8.7.3  |
    | SEQUENCE         | IC:sequence         | <a href="#appendix-A">Appendix A</a> # 3.8.7.4  |
    | REQUEST-STATUS   | IC:request-status   | <a href="#appendix-A">Appendix A</a> # 3.8.8.3  |
    +------------------+---------------------+-----------------------+

<span class="h4"><a class="selflink" id="section-3.4.1" href="#section-3.4.1">3.4.1</a>.  Special Cases for Properties</span>

   This section describes some properties that have special handling
   when converting to xCal.

<span class="h5"><a class="selflink" id="section-3.4.1.1" href="#section-3.4.1.1">3.4.1.1</a>.  Multi-Valued Properties</span>

   The following iCalendar properties can have values that consist of a
   list of "standard" iCalendar values separated by a specific
   delimiter.  In xCal, these properties are represented by an XML
   element that contains multiple "value" elements (<a href="#section-3.6">Section 3.6</a>).



<span class="grey">Daboo, et al.                Standards Track                    [Page 8]</span>

<span id="page-9" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


          +------------+---------------+-----------------------+
          | Property   | XML element   | XML Definition        |
          +------------+---------------+-----------------------+
          | CATEGORIES | IC:categories | <a href="#appendix-A">Appendix A</a> # 3.8.1.2  |
          | RESOURCES  | IC:resources  | <a href="#appendix-A">Appendix A</a> # 3.8.1.10 |
          | FREEBUSY   | IC:freebusy   | <a href="#appendix-A">Appendix A</a> # 3.8.2.6  |
          | EXDATE     | IC:exdate     | <a href="#appendix-A">Appendix A</a> # 3.8.5.1  |
          | RDATE      | IC:rdate      | <a href="#appendix-A">Appendix A</a> # 3.8.5.2  |
          +------------+---------------+-----------------------+

<span class="h5"><a class="selflink" id="section-3.4.1.2" href="#section-3.4.1.2">3.4.1.2</a>.  GEO Property</span>

   In iCalendar, the "GEO" property value is defined as a semicolon-
   separated list of two "FLOAT" values; the first representing latitude
   and the second longitude.

   In xCal, the value for the IC:geo element is represented by two XML
   elements.  These are an IC:latitude element and an IC:longitude
   element, each of which contains float values.  See <a href="#appendix-A">Appendix A</a> #
   3.8.1.6.

   Example:

   <?xml version="1.0" encoding="utf-8"?>
   <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
     ...
     <geo>
       <latitude>37.386013</latitude>
       <longitude>-122.082932</longitude>
     </geo>
     ...
   </icalendar>

<span class="h5"><a class="selflink" id="section-3.4.1.3" href="#section-3.4.1.3">3.4.1.3</a>.  REQUEST-STATUS Property</span>

   In iCalendar, the "REQUEST-STATUS" property value is defined as a
   semicolon-separated list of two or three "TEXT" values.  The first
   represents a code, the second a description, and the third any
   additional data.

   In xCal, the value for the IC:request-status element is represented
   by two or three XML elements.  These are an IC:code element, an IC:
   description element, and an IC:data element, each of which contains
   the corresponding "TEXT" values.  If there is no additional data in
   the iCalendar value, the IC:data element (which would be empty)
   SHOULD NOT be present.  See <a href="#appendix-A">Appendix A</a> # 3.8.8.3.





<span class="grey">Daboo, et al.                Standards Track                    [Page 9]</span>

<span id="page-10" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   Example:

   <?xml version="1.0" encoding="utf-8"?>
   <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
     ...
     <request-status>
       <code>2.0</code>
       <description>Success</description>
     </request-status>
     ...
   </icalendar>

<span class="h3"><a class="selflink" id="section-3.5" href="#section-3.5">3.5</a>.  Parameters (<a href="./rfc5545#section-3.2">RFC 5545, Section 3.2</a>)</span>

   iCalendar property parameters are enclosed in the XML element IC:
   parameters, which occurs in each property XML element.  If there are
   no iCalendar property parameters, the IC:parameters element (which
   would be empty) SHOULD NOT be present.

   Each individual iCalendar property parameter is represented in xCal
   by an element of the same name as the iCalendar property parameter,
   but in lowercase.  For example, the "PARTSTAT" property parameter is
   represented in xCal by the IC:partstat element.

   Example:

   <?xml version="1.0" encoding="utf-8"?>
   <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
     <vcalendar>
       ...
       <components>
         ...
         <attendee>
           <parameters>
             <partstat><text>NEEDS-ACTION</text></partstat>
           </parameters>
           ...
         </attendee>
         ...
       </components>
     </vcalendar>
   </icalendar>

   Each XML parameter element contains one or more child XML elements
   representing iCalendar value types.






<span class="grey">Daboo, et al.                Standards Track                   [Page 10]</span>

<span id="page-11" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   As an example, the table below shows iCalendar-to-xCal mappings for
   current iCalendar parameters.  Any new iCalendar parameters added in
   the future will be converted in the same way.

       +----------------+-------------------+---------------------+
       | Parameter      | XML element       | XML Definition      |
       +----------------+-------------------+---------------------+
       | ALTREP         | IC:altrep         | <a href="#appendix-A">Appendix A</a> # 3.2.1  |
       | CN             | IC:cn             | <a href="#appendix-A">Appendix A</a> # 3.2.2  |
       | CUTYPE         | IC:cutype         | <a href="#appendix-A">Appendix A</a> # 3.2.3  |
       | DELEGATED-FROM | IC:delegated-from | <a href="#appendix-A">Appendix A</a> # 3.2.4  |
       | DELEGATED-TO   | IC:delegated-to   | <a href="#appendix-A">Appendix A</a> # 3.2.5  |
       | DIR            | IC:dir            | <a href="#appendix-A">Appendix A</a> # 3.2.6  |
       | ENCODING       | IC:encoding       | <a href="#appendix-A">Appendix A</a> # 3.2.7  |
       | FMTTYPE        | IC:fmttype        | <a href="#appendix-A">Appendix A</a> # 3.2.8  |
       | FBTYPE         | IC:fbtype         | <a href="#appendix-A">Appendix A</a> # 3.2.9  |
       | LANGUAGE       | IC:language       | <a href="#appendix-A">Appendix A</a> # 3.2.10 |
       | MEMBER         | IC:member         | <a href="#appendix-A">Appendix A</a> # 3.2.11 |
       | PARTSTAT       | IC:partstat       | <a href="#appendix-A">Appendix A</a> # 3.2.12 |
       | RANGE          | IC:range          | <a href="#appendix-A">Appendix A</a> # 3.2.13 |
       | RELATED        | IC:related        | <a href="#appendix-A">Appendix A</a> # 3.2.14 |
       | RELTYPE        | IC:reltype        | <a href="#appendix-A">Appendix A</a> # 3.2.15 |
       | ROLE           | IC:role           | <a href="#appendix-A">Appendix A</a> # 3.2.16 |
       | RSVP           | IC:rsvp           | <a href="#appendix-A">Appendix A</a> # 3.2.17 |
       | SENT-BY        | IC:sent-by        | <a href="#appendix-A">Appendix A</a> # 3.2.18 |
       | TZID           | IC:tzid           | <a href="#appendix-A">Appendix A</a> # 3.2.19 |
       +----------------+-------------------+---------------------+

<span class="h4"><a class="selflink" id="section-3.5.1" href="#section-3.5.1">3.5.1</a>.  VALUE Parameter</span>

   iCalendar defines a "VALUE" property parameter (<a href="./rfc5545#section-3.2.20">Section 3.2.20 of
   [RFC5545]</a>).  This property parameter is not mapped to an xCal XML
   element.  Instead, the value type is handled by having different XML
   elements for each value, and these appear inside of property
   elements.  Thus, when converting from iCalendar to xCal, any "VALUE"
   property parameters are skipped.  When converting from xCal into
   iCalendar, the appropriate "VALUE" property parameter MUST be
   included in the iCalendar property if the value type is not the
   default value type for that property.

<span class="h3"><a class="selflink" id="section-3.6" href="#section-3.6">3.6</a>.  Values (<a href="./rfc5545#section-3.3">RFC 5545, Section 3.3</a>)</span>

   In the typical case, iCalendar value types are mapped into XML
   elements with a matching name in all lowercase.  In the case of the
   value for a recurrence rule (see below), iCalendar defines
   "structured" values, and these are mapped into separate child
   elements for each value element.




<span class="grey">Daboo, et al.                Standards Track                   [Page 11]</span>

<span id="page-12" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


<span class="h4"><a class="selflink" id="section-3.6.1" href="#section-3.6.1">3.6.1</a>.  Binary (<a href="./rfc5545#section-3.3.1">RFC 5545, Section 3.3.1</a>)</span>

   Description:  iCalendar "BINARY" property values are represented by
      the IC:binary XML element.  The content of the element is base64
      encoded data, conforming to <a href="./rfc4648#section-4">Section 4 of [RFC4648]</a>, which is the
      base64 method used in [<a href="./rfc5545" title=""Internet Calendaring and Scheduling Core Object Specification (iCalendar)"">RFC5545</a>].  Whitespace MAY be inserted into
      the data at any point to "wrap" the data to reasonable line
      lengths.  When converting back to iCalendar, the whitespace MUST
      first be removed.

   XML Definition:  <a href="#appendix-A">Appendix A</a> # 3.3.1

   Example:

   <binary>SGVsbG8gV29ybGQh</binary>

<span class="h4"><a class="selflink" id="section-3.6.2" href="#section-3.6.2">3.6.2</a>.  Boolean  </span>(<a href="./rfc5545#section-3.3.2">RFC 5545, Section 3.3.2</a>)

   Description:  iCalendar "BOOLEAN" property values are represented by
      the IC:boolean XML element.  The content of the element is a
      boolean value.

   XML Definition:  <a href="#appendix-A">Appendix A</a> # 3.3.2

   Example:

   <boolean>true</boolean>

<span class="h4"><a class="selflink" id="section-3.6.3" href="#section-3.6.3">3.6.3</a>.  Calendar User Address (<a href="./rfc5545#section-3.3.3">RFC 5545, Section 3.3.3</a>)</span>

   Description:  iCalendar "CAL-ADDRESS" property values are represented
      by the IC:cal-address XML element.  The content of the element is
      a URI.

   XML Definition:  <a href="#appendix-A">Appendix A</a> # 3.3.3

   Example:

   <cal-address>mailto:[email protected]</cal-address>

<span class="h4"><a class="selflink" id="section-3.6.4" href="#section-3.6.4">3.6.4</a>.  Date (<a href="./rfc5545#section-3.3.4">RFC 5545, Section 3.3.4</a>)</span>

   Description:  iCalendar "DATE" property values are represented by the
      IC:date XML element.  The content of the element is the same date
      value specified by [<a href="./rfc5545" title=""Internet Calendaring and Scheduling Core Object Specification (iCalendar)"">RFC5545</a>], with the exception that the date
      components are separated by "-" characters, for consistency with
      [<a href="#ref-W3C.REC-xmlschema-2-20041028">W3C.REC-xmlschema-2-20041028</a>].




<span class="grey">Daboo, et al.                Standards Track                   [Page 12]</span>

<span id="page-13" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   XML Definition:  <a href="#appendix-A">Appendix A</a> # 3.3.4

   Example:

   <date>2011-05-17</date>

<span class="h4"><a class="selflink" id="section-3.6.5" href="#section-3.6.5">3.6.5</a>.  Date-Time (<a href="./rfc5545#section-3.3.5">RFC 5545, Section 3.3.5</a>)</span>

   Description:  iCalendar "DATE-TIME" property values are represented
      by the IC:date-time XML element.  The content of the element is
      the same date-time value specified by [<a href="./rfc5545" title=""Internet Calendaring and Scheduling Core Object Specification (iCalendar)"">RFC5545</a>], with the
      exception that the date components are separated by "-"
      characters, and the time components are separated by ":"
      characters, for consistency with [<a href="#ref-W3C.REC-xmlschema-2-20041028">W3C.REC-xmlschema-2-20041028</a>].
      Note that while [<a href="#ref-W3C.REC-xmlschema-2-20041028">W3C.REC-xmlschema-2-20041028</a>] allows for a UTC
      offset to be included in date/time values, xCal does not use that,
      and instead follows the iCalendar behavior of using time zone
      definitions via the "TZID" property parameter.

   XML Definition:  <a href="#appendix-A">Appendix A</a> # 3.3.5

   Example:

   <date-time>2011-05-17T12:00:00</date-time>

<span class="h4"><a class="selflink" id="section-3.6.6" href="#section-3.6.6">3.6.6</a>.  Duration (<a href="./rfc5545#section-3.3.6">RFC 5545, Section 3.3.6</a>)</span>

   Description:  iCalendar "DURATION" property values are represented by
      the IC:duration XML element.  The content of the element is the
      same duration value specified by [<a href="./rfc5545" title=""Internet Calendaring and Scheduling Core Object Specification (iCalendar)"">RFC5545</a>].

   XML Definition:  <a href="#appendix-A">Appendix A</a> # 3.3.6

   Example:

   <duration>P1D</duration>

<span class="h4"><a class="selflink" id="section-3.6.7" href="#section-3.6.7">3.6.7</a>.  Float (<a href="./rfc5545#section-3.3.7">RFC 5545, Section 3.3.7</a>)</span>

   Description:  iCalendar "FLOAT" property values are represented by
      the IC:float XML element.  The content of the element is a text
      representation of a floating point number.

   XML Definition:  <a href="#appendix-A">Appendix A</a> # 3.3.7

   Example:

   <float>0.5</float>



<span class="grey">Daboo, et al.                Standards Track                   [Page 13]</span>

<span id="page-14" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


<span class="h4"><a class="selflink" id="section-3.6.8" href="#section-3.6.8">3.6.8</a>.  Integer (<a href="./rfc5545#section-3.3.8">RFC 5545, Section 3.3.8</a>)</span>

   Description:  iCalendar "INTEGER" property values are represented by
      the IC:integer XML element.  The content of the element is a text
      representation of an integer number.

   XML Definition:  <a href="#appendix-A">Appendix A</a> # 3.3.8

   Examples:

   <integer>50</integer>
   <integer>-100</integer>

<span class="h4"><a class="selflink" id="section-3.6.9" href="#section-3.6.9">3.6.9</a>.  Period of Time (<a href="./rfc5545#section-3.3.9">RFC 5545, Section 3.3.9</a>)</span>

   Description:  iCalendar "PERIOD" property values are represented by
      the IC:period XML element.  The content of the element is child
      elements representing the start, end, or duration components of
      the period.

   XML Definition:  <a href="#appendix-A">Appendix A</a> # 3.3.9

   Example:

   <period>
     <start>2011-05-17T12:00:00</start>
     <duration>P1H</duration>
   </period>

<span class="h4"><a class="selflink" id="section-3.6.10" href="#section-3.6.10">3.6.10</a>.  Recurrence Rule (<a href="./rfc5545#section-3.3.10">RFC 5545, Section 3.3.10</a>)</span>

   Description:  iCalendar "RECUR" property values are represented by
      the IC:recur XML element.  The content of the element is child
      elements representing the various components of a recurrence rule.

   XML Definition:  <a href="#appendix-A">Appendix A</a> # 3.3.10

   Example:

   <recur>
     <freq>YEARLY</freq>
     <count>5</count>
     <byday>-1SU</byday>
     <bymonth>10</bymonth>
   </recur>






<span class="grey">Daboo, et al.                Standards Track                   [Page 14]</span>

<span id="page-15" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


<span class="h4"><a class="selflink" id="section-3.6.11" href="#section-3.6.11">3.6.11</a>.  Text (<a href="./rfc5545#section-3.3.11">RFC 5545, Section 3.3.11</a>)</span>

   Description:  iCalendar "TEXT" property values are represented by the
      IC:text XML element.  The content of the element is simple text.

   XML Definition:  <a href="#appendix-A">Appendix A</a> # 3.3.11

   Example:

   <text>Hello World!</text>

<span class="h4"><a class="selflink" id="section-3.6.12" href="#section-3.6.12">3.6.12</a>.  Time (<a href="./rfc5545#section-3.3.12">RFC 5545, Section 3.3.12</a>)</span>

   Description:  iCalendar "TIME" property values are represented by the
      IC:time XML element.  The content of the element is the same time
      value specified by [<a href="./rfc5545" title=""Internet Calendaring and Scheduling Core Object Specification (iCalendar)"">RFC5545</a>], with the exception that the time
      components are separated by ":" characters, for consistency with
      [<a href="#ref-W3C.REC-xmlschema-2-20041028">W3C.REC-xmlschema-2-20041028</a>].  Note that while
      [<a href="#ref-W3C.REC-xmlschema-2-20041028">W3C.REC-xmlschema-2-20041028</a>] allows for a UTC offset to be
      included in date/time values, xCal does not use that, and instead
      follows the iCalendar behavior of using time zone definitions via
      the "TZID" property parameter.

   XML Definition:  <a href="#appendix-A">Appendix A</a> # 3.3.12

   Example:

   <time>12:00:00</time>

<span class="h4"><a class="selflink" id="section-3.6.13" href="#section-3.6.13">3.6.13</a>.  URI (<a href="./rfc5545#section-3.3.13">RFC 5545, Section 3.3.13</a>)</span>

   Description:  iCalendar "URI" property values are represented by the
      IC:uri XML element.  The content of the element is a URI.

   XML Definition:  <a href="#appendix-A">Appendix A</a> # 3.3.13

   Example:

   <uri>http://calendar.example.com</uri>












<span class="grey">Daboo, et al.                Standards Track                   [Page 15]</span>

<span id="page-16" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


<span class="h4"><a class="selflink" id="section-3.6.14" href="#section-3.6.14">3.6.14</a>.  UTC Offset (<a href="./rfc5545#section-3.3.14">RFC 5545, Section 3.3.14</a>)</span>

   Description:  iCalendar "UTC-OFFSET" property values are represented
      by the IC:utc-offset XML element.  The content of the element is
      the same UTC offset value specified by [<a href="./rfc5545" title=""Internet Calendaring and Scheduling Core Object Specification (iCalendar)"">RFC5545</a>], with the
      exception that the hour, minute, and second components are
      separated by a ":" character, for consistency with
      [<a href="#ref-W3C.REC-xmlschema-2-20041028">W3C.REC-xmlschema-2-20041028</a>].

   XML Definition:  <a href="#appendix-A">Appendix A</a> # 3.3.14

   Example:

   <utc-offset>-05:00</utc-offset>

<span class="h3"><a class="selflink" id="section-3.7" href="#section-3.7">3.7</a>.  Extensions</span>

   iCalendar extension properties and property parameters (those with an
   "X-" prefix in their name) are handled in the same way as other
   properties and property parameters: the property or property
   parameter is represented by an XML element with the same name, but in
   lowercase, e.g., the "X-FOO" property in iCalendar turns into the IC:
   x-foo element in xCal.  However, see <a href="#section-5">Section 5</a> for how to deal with
   default values for unrecognized extension properties or property
   parameters.

<span class="h2"><a class="selflink" id="section-4" href="#section-4">4</a>.  Converting from xCal into iCalendar</span>

   When converting component, property, and property parameter values,
   the names SHOULD be converted to uppercase.  Although iCalendar names
   are case insensitive, common practice is to keep them all uppercase
   following the actual definitions in [<a href="./rfc5545" title=""Internet Calendaring and Scheduling Core Object Specification (iCalendar)"">RFC5545</a>].

   BACKSLASH character encoding and line folding MUST be applied to the
   resulting iCalendar data as required by [<a href="./rfc5545" title=""Internet Calendaring and Scheduling Core Object Specification (iCalendar)"">RFC5545</a>].

   Non-binary value types MUST NOT be base64 encoded.

<span class="h3"><a class="selflink" id="section-4.1" href="#section-4.1">4.1</a>.  Converting XML Extensions into iCalendar</span>

   XML extensions are converted back to iCalendar in one of two ways,
   depending on whether the extensions are in the iCalendar XML
   namespace or in an external namespace.

   Extensions that are part of the iCalendar XML namespace MUST have
   element names that begin with "x-", and will be converted back to the
   equivalent extension property in iCalendar.  For example, the "x-foo"
   element will convert to the "X-FOO" iCalendar property.



<span class="grey">Daboo, et al.                Standards Track                   [Page 16]</span>

<span id="page-17" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   Extensions that are in a namespace other than the iCalendar XML
   namespace SHOULD be preserved in the iCalendar representation using
   the "XML" iCalendar property described in <a href="#section-4.2">Section 4.2</a>.  Only those
   extension elements that are immediate child elements of the IC:
   properties element are converted, any others are ignored.

<span class="h3"><a class="selflink" id="section-4.2" href="#section-4.2">4.2</a>.  The XML Property for iCalendar</span>

   This section describes an extension property for iCalendar, as
   covered in <a href="./rfc5545#section-8.2.3">Section 8.2.3 of [RFC5545]</a>.

   Property name: XML

   Purpose: To embed extended XML-encoded iCalendar data in the
   iCalendar format.

   Value type: The default value type is "TEXT".  The value type can
   also be set to "BINARY" to indicate base64 encoded content.

   Property parameters: IANA, non-standard, inline encoding, and value
   data type property parameters can be specified on this property.

   Conformance: The property can be specified multiple times in any
   calendar component.

   Description: The value of this property is a single XML 1.0
   [<a href="#ref-W3C.REC-xml-20081126">W3C.REC-xml-20081126</a>] element.  The "XML" property MUST NOT be used
   to contain properties that are already defined in iCalendar.  Since
   all elements in the urn:ietf:params:xml:ns:icalendar-2.0 namespace
   convert to a well-defined iCalendar object, the elements in this
   property MUST NOT be in the urn:ietf:params:xml:ns:icalendar-2.0
   namespace.  The XML element that is the value of this property MUST
   have an XML namespace declaration.

   The default value type for this property is "TEXT", and normal
   BACKSLASH character encoding rules for that value MUST be applied.
   Note that the source XML can contain characters not allowed in "TEXT"
   property values.  If this is the case, then the XML data MUST be
   base64 encoded.  As required by [<a href="./rfc5545" title=""Internet Calendaring and Scheduling Core Object Specification (iCalendar)"">RFC5545</a>], the "ENCODING" property
   parameter MUST be present and set to "BASE64", and the "VALUE"
   property parameter MUST be present and set to "BINARY".

   The ordering of "XML" properties is not preserved in the conversion
   between xCal and iCalendar.

   Format definition: This property is defined by the following
   notation:




<span class="grey">Daboo, et al.                Standards Track                   [Page 17]</span>

<span id="page-18" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   xml      = "XML" xmlparam ( ":" text ) /
                (
                  ";" "ENCODING" "=" "BASE64"
                  ";" "VALUE" "=" "BINARY"
                  ":" binary
                )
                CRLF

   xmlparam     = *(";" other-param)

   Example: The following is an example of a location embedded in KML
   markup inside the "XML" property.

   XML:<kml xmlns="http://www.opengis.net/kml/2.2">\n
      <Document>\n
        <name>KML Sample</name>\n
        <open>1</open>\n
        <description>An incomplete example of a KML docum
    ent - used as an example!</description>\n
      </Document>\n
    </kml>

<span class="h2"><a class="selflink" id="section-5" href="#section-5">5</a>.  Handling Unrecognized Properties or Parameters</span>

   In iCalendar, properties have a default value type specified by their
   definition, e.g., "SUMMARY"'s value type is "TEXT" and "DURATION"'s
   is "DURATION".  When a property uses its default value type, the
   "VALUE" property parameter does not need to be specified on the
   property.

   When new properties are defined or "X-" properties are used, an
   iCalendar<->xCal converter might not recognize them, and know what
   the appropriate default value types are, yet they need to be able to
   preserve the values.  A similar issue arises for unrecognized
   property parameters.  As a result, the following rules are applied
   when dealing with unrecognized properties and property parameters:

   o  When converting iCalendar into xCal:

      *  Any property that does not include a "VALUE" property parameter
         and whose default value type is not known MUST be converted
         using the value type XML element IC:unknown.  The content of
         that element is the unprocessed value text.

      *  Any unrecognized property parameter MUST be converted using the
         value type XML element IC:unknown, with its content set to the
         property parameter value text, treated as if it were a "TEXT"
         value or list of "TEXT" values.



<span class="grey">Daboo, et al.                Standards Track                   [Page 18]</span>

<span id="page-19" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   o  When converting xCal into iCalendar:

      *  Any IC:unknown property value XML elements are converted
         directly into iCalendar values.  The containing property MUST
         NOT have a "VALUE" property parameter.

      *  Any IC:unknown parameter value XML elements are converted as if
         they were IC:text value type XML elements.

   Example: The following is an example of an unrecognized iCalendar
   property (that uses a "DATE-TIME" value as its default) and the
   equivalent xCal representation of that property.

   iCalendar:

   X-PROPERTY:20110512T120000Z

   xCal:

   <x-property>
     <unknown>20110512T120000Z</unknown>
   </x-property>

   Example: The following is an example of an unrecognized iCalendar
   property parameter (that uses a "DURATION" value as its default)
   specified on a recognized iCalendar property, and the equivalent xCal
   representation of that property and property parameter.

   iCalendar:

   DTSTART;X-PARAM=PT30M:20110512T130000Z

   xCal:

   <dtstart>
     <parameters>
       <x-param><unknown>PT30M</unknown></x-param>
     </parameters>
     <date-time>2011-05-12T13:00:00Z</date-time>
   </dtstart>

<span class="h2"><a class="selflink" id="section-6" href="#section-6">6</a>.  Security Considerations</span>

   For security considerations specific to calendar data, see <a href="./rfc5545#section-7">Section 7
   of [RFC5545]</a>.  Since this specification is a mapping from iCalendar,
   no new security concerns are introduced related to calendar data.





<span class="grey">Daboo, et al.                Standards Track                   [Page 19]</span>

<span id="page-20" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   The use of XML as a format does have security risks.  <a href="./rfc3470#section-7">Section 7 of
   [RFC3470]</a> discusses these risks.  See also the security discussion
   for the application/xml type in [<a href="./rfc3023" title=""XML Media Types"">RFC3023</a>].

<span class="h2"><a class="selflink" id="section-7" href="#section-7">7</a>.  IANA Considerations</span>

   This document defines a new URN to identify a new XML namespace for
   iCalendar data.  The URN conforms to a registry mechanism described
   in [<a href="./rfc3688" title=""The IETF XML Registry"">RFC3688</a>].

   This document defines a new media type.  The registration is in
   <a href="#section-7.2">Section 7.2</a>.

   This document defines a new property for iCalendar.  The registration
   is in <a href="#section-7.3">Section 7.3</a>.

<span class="h3"><a class="selflink" id="section-7.1" href="#section-7.1">7.1</a>.  Namespace Registration</span>

   Registration request for the iCalendar namespace:

   URI: urn:ietf:params:xml:ns:icalendar-2.0

   Registrant Contact: See the "Authors' Addresses" section of this
   document.

   XML: None.  Namespace URIs do not represent an XML specification.

<span class="h3"><a class="selflink" id="section-7.2" href="#section-7.2">7.2</a>.  Media Type</span>

   This section defines the MIME media type for use with iCalendar in
   XML data.

   Type name:  application

   Subtype name:  calendar+xml

   Required parameters:  None

   Optional parameters:  method, component, and optinfo as defined for
      the text/calendar media type in [<a href="./rfc5545" title=""Internet Calendaring and Scheduling Core Object Specification (iCalendar)"">RFC5545</a>]; charset as defined for
      application/xml in [<a href="./rfc3023" title=""XML Media Types"">RFC3023</a>]; per [<a href="./rfc3023" title=""XML Media Types"">RFC3023</a>], use of the charset
      property parameter with the value "utf-8" is STRONGLY RECOMMENDED.

   Encoding considerations:  Same as encoding considerations of
      application/xml as specified in [<a href="./rfc3023" title=""XML Media Types"">RFC3023</a>].






<span class="grey">Daboo, et al.                Standards Track                   [Page 20]</span>

<span id="page-21" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   Security considerations:  See <a href="#section-6">Section 6</a>.

   Interoperability considerations:  This media type provides an
      alternative format for iCalendar data based on XML.

   Published specification:  This specification.

   Applications that use this media type:  Applications that currently
      make use of the text/calendar media type can use this as an
      alternative.

   Additional information:

      Magic number(s):  None

      File extension(s):  xcs

      Macintosh file type code(s):  None specified.

   Person & email address to contact for further information:
      [email protected]

   Intended usage:  COMMON

   Restrictions on usage:  There are no restrictions on where this media
      type can be used.

   Author:  See the "Authors' Addresses" section of this document.

   Change controller:  IETF

<span class="h3"><a class="selflink" id="section-7.3" href="#section-7.3">7.3</a>.  iCalendar Property Registrations</span>

   This document defines the following new iCalendar property to be
   added to the registry defined in <a href="./rfc5545#section-8.2.3">Section 8.2.3 of [RFC5545]</a>:

              +----------+---------+-----------------------+
              | Property | Status  | Reference             |
              +----------+---------+-----------------------+
              | XML      | Current | <a href="./rfc6321#section-4.2">RFC 6321, Section 4.2</a> |
              +----------+---------+-----------------------+










<span class="grey">Daboo, et al.                Standards Track                   [Page 21]</span>

<span id="page-22" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


<span class="h2"><a class="selflink" id="section-8" href="#section-8">8</a>.  Acknowledgments</span>

   The authors would like to thank the following for their valuable
   contributions: Toby Considine, Bernard Desruisseaux, Keith Moore,
   Filip Navara, Simon Perreault, Arnaud Quillaud, Peter Saint-Andre,
   and Dave Thewlis.  This specification originated from the work of the
   XML technical committee of the Calendaring and Scheduling Consortium.

<span class="h2"><a class="selflink" id="section-9" href="#section-9">9</a>.  References</span>

<span class="h3"><a class="selflink" id="section-9.1" href="#section-9.1">9.1</a>.  Normative References</span>

   [<a id="ref-RFC2119">RFC2119</a>]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", <a href="https://www.rfc-editor.org/bcp/bcp14">BCP 14</a>, <a href="./rfc2119">RFC 2119</a>, March 1997.

   [<a id="ref-RFC3023">RFC3023</a>]  Murata, M., St. Laurent, S., and D. Kohn, "XML Media
              Types", <a href="./rfc3023">RFC 3023</a>, January 2001.

   [<a id="ref-RFC3470">RFC3470</a>]  Hollenbeck, S., Rose, M., and L. Masinter, "Guidelines for
              the Use of Extensible Markup Language (XML)
              within IETF Protocols", <a href="https://www.rfc-editor.org/bcp/bcp70">BCP 70</a>, <a href="./rfc3470">RFC 3470</a>, January 2003.

   [<a id="ref-RFC3688">RFC3688</a>]  Mealling, M., "The IETF XML Registry", <a href="https://www.rfc-editor.org/bcp/bcp81">BCP 81</a>, <a href="./rfc3688">RFC 3688</a>,
              January 2004.

   [<a id="ref-RFC4648">RFC4648</a>]  Josefsson, S., "The Base16, Base32, and Base64 Data
              Encodings", <a href="./rfc4648">RFC 4648</a>, October 2006.

   [<a id="ref-RFC5545">RFC5545</a>]  Desruisseaux, B., "Internet Calendaring and Scheduling
              Core Object Specification (iCalendar)", <a href="./rfc5545">RFC 5545</a>,
              September 2009.

   [<a id="ref-W3C.REC-xml-20081126">W3C.REC-xml-20081126</a>]
              Sperberg-McQueen, C., Yergeau, F., Bray, T., Paoli, J.,
              and E. Maler, "Extensible Markup Language (XML) 1.0 (Fifth
              Edition)", World Wide Web Consortium Recommendation REC-
              xml-20081126, November 2008,
              <<a href="http://www.w3.org/TR/2008/REC-xml-20081126">http://www.w3.org/TR/2008/REC-xml-20081126</a>>.

<span class="h3"><a class="selflink" id="section-9.2" href="#section-9.2">9.2</a>.  Informative References</span>

   [<a id="ref-W3C.REC-xmlschema-2-20041028">W3C.REC-xmlschema-2-20041028</a>]
              Malhotra, A. and P. Biron, "XML Schema Part 2: Datatypes
              Second Edition", World Wide Web Consortium
              Recommendation REC-xmlschema-2-20041028, October 2004,
              <<a href="http://www.w3.org/TR/2004/REC-xmlschema-2-20041028">http://www.w3.org/TR/2004/REC-xmlschema-2-20041028</a>>.





<span class="grey">Daboo, et al.                Standards Track                   [Page 22]</span>

<span id="page-23" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


<span class="h2"><a class="selflink" id="appendix-A" href="#appendix-A">Appendix A</a>.  RELAX NG Schema</span>

   Below is a RELAX NG schema for iCalendar in XML.  The schema is non-
   normative and given for reference only.

   This schema uses the compact notation of RELAX NG.  The numeric
   section numbers given in the comments refer to sections in [<a href="./rfc5545" title=""Internet Calendaring and Scheduling Core Object Specification (iCalendar)"">RFC5545</a>].
   The ordering of elements follows the section ordering of [<a href="./rfc5545" title=""Internet Calendaring and Scheduling Core Object Specification (iCalendar)"">RFC5545</a>].

   The RELAX NG compact notation "?" operator is used to indicate an
   unordered list of items.  However, that operator, as defined, allows
   "mixing" each element that it operates on at any depth within the
   other elements, rather than just allowing "mixing" of siblings only.
   As a result, the schema provided allows certain constructs that are
   not allowed in iCalendar.  Given that there is no sibling-only
   unordered list operator in RELAX NG, this is the best representation
   that can be given.

   Patterns for date/time, duration, and UTC offset values are given
   because those differ from the values used in iCalendar.  More
   restrictive schema with patterns and numerical limits could be
   derived from the example schema here if more comprehensive schema
   validation is required.

   # RELAX NG Schema for iCalendar in XML

   default namespace = "urn:ietf:params:xml:ns:icalendar-2.0"

   # 3.2 Property Parameters

   # 3.2.1 Alternate Text Representation

   altrepparam = element altrep {
       value-uri
   }

   # 3.2.2 Common Name

   cnparam = element cn {
       value-text
   }










<span class="grey">Daboo, et al.                Standards Track                   [Page 23]</span>

<span id="page-24" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   # 3.2.3 Calendar User Type

   cutypeparam = element cutype {
       element text {
           "INDIVIDUAL" |
           "GROUP" |
           "RESOURCE" |
           "ROOM" |
           "UNKNOWN"
       }
   }

   # 3.2.4 Delegators

   delfromparam = element delegated-from {
       value-cal-address+
   }

   # 3.2.5 Delegatees

   deltoparam = element delegated-to {
       value-cal-address+
   }

   # 3.2.6 Directory Entry Reference

   dirparam = element dir {
       value-uri
   }

   # 3.2.7 Inline Encoding

   encodingparam = element encoding {
       element text {
           "8BIT" |
           "BASE64"
       }
   }

   # 3.2.8 Format Type

   fmttypeparam = element fmttype {
       value-text
   }







<span class="grey">Daboo, et al.                Standards Track                   [Page 24]</span>

<span id="page-25" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   # 3.2.9 Free/Busy Time Type

   fbtypeparam = element fbtype {
       element text {
           "FREE" |
           "BUSY" |
           "BUSY-UNAVAILABLE" |
           "BUSY-TENTATIVE"
       }
   }

   # 3.2.10 Language

   languageparam = element language {
       value-text
   }

   # 3.2.11 Group or List Membership

   memberparam = element member {
       value-cal-address+
   }

   # 3.2.12 Participation Status

   partstatparam = element partstat {
       type-partstat-event |
       type-partstat-todo |
       type-partstat-jour
   }

   type-partstat-event = (
       element text {
           "NEEDS-ACTION" |
           "ACCEPTED" |
           "DECLINED" |
           "TENTATIVE" |
           "DELEGATED"
       }
   )











<span class="grey">Daboo, et al.                Standards Track                   [Page 25]</span>

<span id="page-26" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   type-partstat-todo = (
       element text {
           "NEEDS-ACTION" |
           "ACCEPTED" |
           "DECLINED" |
           "TENTATIVE" |
           "DELEGATED" |
           "COMPLETED" |
           "IN-PROCESS"
       }
   )

   type-partstat-jour = (
       element text {
           "NEEDS-ACTION" |
           "ACCEPTED" |
           "DECLINED"
       }
   )

   # 3.2.13 Recurrence Identifier Range

   rangeparam = element range {
       element text {
           "THISANDFUTURE"
       }
   }

   # 3.2.14 Alarm Trigger Relationship

   trigrelparam = element related {
       element text {
           "START" |
           "END"
       }
   }

   # 3.2.15 Relationship Type

   reltypeparam = element reltype {
       element text {
           "PARENT" |
           "CHILD" |
           "SIBLING"
       }
   }





<span class="grey">Daboo, et al.                Standards Track                   [Page 26]</span>

<span id="page-27" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   # 3.2.16 Participation Role

   roleparam = element role {
       element text {
           "CHAIR" |
           "REQ-PARTICIPANT" |
           "OPT-PARTICIPANT" |
           "NON-PARTICIPANT"
       }
   }

   # 3.2.17 RSVP Expectation

   rsvpparam = element rsvp {
       value-boolean
   }

   # 3.2.18 Sent By

   sentbyparam = element sent-by {
       value-cal-address
   }

   # 3.2.19 Time Zone Identifier

   tzidparam = element tzid {
       value-text
   }

   # 3.3 Property Value Data Types

   # 3.3.1 BINARY

   value-binary =  element binary {
       xsd:string
   }

   # 3.3.2 BOOLEAN

   value-boolean = element boolean {
       xsd:boolean
   }

   # 3.3.3 CAL-ADDRESS

   value-cal-address = element cal-address {
       xsd:anyURI
   }



<span class="grey">Daboo, et al.                Standards Track                   [Page 27]</span>

<span id="page-28" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   # 3.3.4 DATE

   pattern-date = xsd:string {
       pattern = "\d\d\d\d-\d\d-\d\d"
   }

   value-date = element date {
       pattern-date
   }

   # 3.3.5 DATE-TIME

   pattern-date-time = xsd:string {
       pattern = "\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ?"
   }

   value-date-time = element date-time {
       pattern-date-time
   }

   # 3.3.6 DURATION

   pattern-duration = xsd:string {
       pattern = "(+|-)?P(\d+W)|(\d+D)?"
               ~ "(T(\d+H(\d+M)?(\d+S)?)|"
               ~   "(\d+M(\d+S)?)|"
               ~   "(\d+S))?"
   }

   value-duration = element duration {
       pattern-duration
   }

   # 3.3.7 FLOAT

   value-float = element float {
       xsd:float
   }

   # 3.3.8 INTEGER

   value-integer = element integer {
       xsd:integer
   }







<span class="grey">Daboo, et al.                Standards Track                   [Page 28]</span>

<span id="page-29" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   # 3.3.9 PERIOD

   value-period = element period {
       element start {
           pattern-date-time
       },
       (
           element end {
               pattern-date-time
           } |
           element duration {
               pattern-duration
           }
       )
   }

   # 3.3.10 RECUR

   value-recur = element recur {
       type-freq,
       (type-until | type-count)?,
       element interval {
           xsd:positiveInteger
       }?,
       type-bysecond*,
       type-byminute*,
       type-byhour*,
       type-byday*,
       type-bymonthday*,
       type-byyearday*,
       type-byweekno*,
       type-bymonth*,
       type-bysetpos*,
       element wkst { type-weekday }?
   }

   type-freq = element freq {
       "SECONDLY" |
       "MINUTELY" |
       "HOURLY"   |
       "DAILY"    |
       "WEEKLY"   |
       "MONTHLY"  |
       "YEARLY"
   }






<span class="grey">Daboo, et al.                Standards Track                   [Page 29]</span>

<span id="page-30" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   type-until = element until {
       type-date |
       type-date-time
   }

   type-count = element count {
       xsd:positiveInteger
   }

   type-bysecond = element bysecond {
       xsd:positiveInteger
   }

   type-byminute = element byminute {
       xsd:positiveInteger
   }

   type-byhour = element byhour {
       xsd:positiveInteger
   }

   type-weekday = (
       "SU" |
       "MO" |
       "TU" |
       "WE" |
       "TH" |
       "FR" |
       "SA"
   )

   type-byday = element byday {
       xsd:integer?,
       type-weekday
   }

   type-bymonthday = element bymonthday {
       xsd:integer
   }

   type-byyearday = element byyearday {
       xsd:integer
   }

   type-byweekno = element byweekno {
       xsd:integer
   }




<span class="grey">Daboo, et al.                Standards Track                   [Page 30]</span>

<span id="page-31" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   type-bymonth = element bymonth {
       xsd:positiveInteger
   }

   type-bysetpos = element bysetpos {
       xsd:integer
   }

   # 3.3.11 TEXT

   value-text = element text {
       xsd:string
   }

   # 3.3.12 TIME

   pattern-time = xsd:string {
       pattern = "\d\d:\d\d:\d\dZ?"
   }

   value-time = element time {
       pattern-time
   }

   # 3.3.13 URI

   value-uri = element uri {
       xsd:anyURI
   }

   # 3.3.14 UTC-OFFSET

   value-utc-offset = element utc-offset {
       xsd:string { pattern = "(+|-)\d\d:\d\d(:\d\d)?" }
   }

   # UNKNOWN

   value-unknown = element unknown {
       xsd:string
   }

   # 3.4 iCalendar Stream

   start = element icalendar {
       vcalendar+
   }




<span class="grey">Daboo, et al.                Standards Track                   [Page 31]</span>

<span id="page-32" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   # 3.6 Calendar Components

   vcalendar = element vcalendar {
       type-calprops,
       type-component
   }

   type-calprops = element properties {
       property-prodid &
       property-version &
       property-calscale? &
       property-method?
   }

   type-component = element components {
       (
           component-vevent |
           component-vtodo |
           component-vjournal |
           component-vfreebusy |
           component-vtimezone
       )*
   }

   # 3.6.1 Event Component

   component-vevent = element vevent {
       type-eventprop,
       element components {
           component-valarm+
       }?
   }

   type-eventprop = element properties {
       property-dtstamp &
       property-dtstart &
       property-uid &

       property-class? &
       property-created? &
       property-description? &
       property-geo? &
       property-last-mod? &
       property-location? &
       property-organizer? &
       property-priority? &
       property-seq? &
       property-status-event? &



<span class="grey">Daboo, et al.                Standards Track                   [Page 32]</span>

<span id="page-33" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


       property-summary? &
       property-transp? &
       property-url? &
       property-recurid? &

       property-rrule? &

       (property-dtend | property-duration)? &

       property-attach* &
       property-attendee* &
       property-categories* &
       property-comment* &
       property-contact* &
       property-exdate* &
       property-rstatus* &
       property-related* &
       property-resources* &
       property-rdate*
   }

   # 3.6.2 To-do Component

   component-vtodo = element vtodo {
       type-todoprop,
       element components {
           component-valarm+
       }?
   }

   type-todoprop = element properties {
       property-dtstamp &
       property-uid &

       property-class? &
       property-completed? &
       property-created? &
       property-description? &
       property-geo? &
       property-last-mod? &
       property-location? &
       property-organizer? &
       property-percent? &
       property-priority? &
       property-recurid? &
       property-seq? &
       property-status-todo? &
       property-summary? &



<span class="grey">Daboo, et al.                Standards Track                   [Page 33]</span>

<span id="page-34" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


       property-url? &

       property-rrule? &

       (
           (property-dtstart?, property-dtend? ) |
           (property-dtstart, property-duration)?
       ) &

       property-attach* &
       property-attendee* &
       property-categories* &
       property-comment* &
       property-contact* &
       property-exdate* &
       property-rstatus* &
       property-related* &
       property-resources* &
       property-rdate*
   }

   # 3.6.3 Journal Component

   component-vjournal = element vjournal {
       type-jourprop
   }

   type-jourprop = element properties {
       property-dtstamp &
       property-uid &

       property-class? &
       property-created? &
       property-dtstart? &
       property-last-mod? &
       property-organizer? &
       property-recurid? &
       property-seq? &
       property-status-jour? &
       property-summary? &
       property-url? &

       property-rrule? &

       property-attach* &
       property-attendee* &
       property-categories* &
       property-comment* &



<span class="grey">Daboo, et al.                Standards Track                   [Page 34]</span>

<span id="page-35" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


       property-contact* &
       property-description? &
       property-exdate* &
       property-related* &
       property-rdate* &
       property-rstatus*
   }

   # 3.6.4 Free/Busy Component

   component-vfreebusy = element vfreebusy {
       type-fbprop
   }

   type-fbprop = element properties {
       property-dtstamp &
       property-uid &

       property-contact? &
       property-dtstart? &
       property-dtend? &
       property-duration? &
       property-organizer? &
       property-url? &

       property-attendee* &
       property-comment* &
       property-freebusy* &
       property-rstatus*
   }

   # 3.6.5 Time Zone Component

   component-vtimezone = element vtimezone {
       element properties {
           property-tzid &

           property-last-mod? &
           property-tzuurl?
       },
       element components {
           (component-standard | component-daylight) &
           component-standard* &
           component-daylight*
       }
   }





<span class="grey">Daboo, et al.                Standards Track                   [Page 35]</span>

<span id="page-36" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   component-standard = element standard {
       type-tzprop
   }

   component-daylight = element daylight {
       type-tzprop
   }

   type-tzprop = element properties {
       property-dtstart &
       property-tzoffsetto &
       property-tzoffsetfrom &

       property-rrule? &

       property-comment* &
       property-rdate* &
       property-tzname*
   }

   # 3.6.6 Alarm Component

   component-valarm = element valarm {
       audioprop | dispprop | emailprop
   }

   type-audioprop = element properties {
       property-action &

       property-trigger &

       (property-duration, property-repeat)? &

       property-attach?
   }

   type-dispprop = element properties {
       property-action &
       property-description &
       property-trigger &
       property-summary &

       property-attendee+ &

       (property-duration, property-repeat)? &

       property-attach*
   }



<span class="grey">Daboo, et al.                Standards Track                   [Page 36]</span>

<span id="page-37" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   type-emailprop = element properties {
       property-action &
       property-description &
       property-trigger &

       (property-duration, property-repeat)?
   }

   # 3.7 Calendar Properties

   # 3.7.1 Calendar Scale

   property-calscale = element calscale {

       element parameters { empty }?,

       element text { "GREGORIAN" }
   }

   # 3.7.2 Method

   property-method = element method {

       element parameters { empty }?,

       value-text
   }

   # 3.7.3 Product Identifier

   property-prodid = element prodid {

       element parameters { empty }?,

       value-text
   }

   # 3.7.4 Version

   property-version = element version {

       element parameters { empty }?,

       element text { "2.0" }
   }






<span class="grey">Daboo, et al.                Standards Track                   [Page 37]</span>

<span id="page-38" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   # 3.8 Component Properties

   # 3.8.1 Descriptive Component Properties

   # 3.8.1.1 Attachment

   property-attach = element attach {

       element parameters {
           fmttypeparam? &
           encodingparam?
       }?,

       value-uri | value-binary
   }

   # 3.8.1.2 Categories

   property-categories = element categories {

       element parameters {
           languageparam? &
       }?,

       value-text+
   }

   # 3.8.1.3 Classification

   property-class = element class {

       element parameters { empty }?,

       element text {
           "PUBLIC" |
           "PRIVATE" |
           "CONFIDENTIAL"
       }
   }

   # 3.8.1.4 Comment

   property-comment = element comment {

       element parameters {
           altrepparam? &
           languageparam?
       }?,



<span class="grey">Daboo, et al.                Standards Track                   [Page 38]</span>

<span id="page-39" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


       value-text
   }

   # 3.8.1.5 Description

   property-description = element description {

       element parameters {
           altrepparam? &
           languageparam?
       }?,

       value-text
   }

   # 3.8.1.6 Geographic Position

   property-geo = element geo {

       element parameters { empty }?,

       element latitude  { xsd:float },
       element longitude { xsd:float }
   }

   # 3.8.1.7 Location

   property-location = element location {

       element parameters {

           altrepparam? &
           languageparam?
       }?,

       value-text
   }

   # 3.8.1.8 Percent Complete

   property-percent = element percent-complete {

       element parameters { empty }?,

       value-integer
   }





<span class="grey">Daboo, et al.                Standards Track                   [Page 39]</span>

<span id="page-40" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   # 3.8.1.9 Priority

   property-priority = element priority {

       element parameters { empty }?,

       value-integer
   }

   # 3.8.1.10 Resources

   property-resources = element resources {

       element parameters {
           altrepparam? &
           languageparam?
       }?,

       value-text+
   }

   # 3.8.1.11 Status

   property-status-event = element status {

       element parameters { empty }?,

       element text {
           "TENTATIVE" |
           "CONFIRMED" |
           "CANCELLED"
       }
   }

   property-status-todo = element status {

       element parameters { empty }?,

       element text {
           "NEEDS-ACTION" |
           "COMPLETED" |
           "IN-PROCESS" |
           "CANCELLED"
       }
   }






<span class="grey">Daboo, et al.                Standards Track                   [Page 40]</span>

<span id="page-41" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   property-status-jour = element status {

       element parameters { empty }?,

       element text {
           "DRAFT" |
           "FINAL" |
           "CANCELLED"
       }
   }

   # 3.8.1.12 Summary

   property-summary = element summary {

       element parameters {
           altrepparam? &
           languageparam?
       }?,

       value-text
   }

   # 3.8.2 Date and Time Component Properties

   # 3.8.2.1 Date/Time Completed

   property-completed = element completed {

       element parameters { empty }?,

       value-date-time
   }

   # 3.8.2.2 Date/Time End

   property-dtend = element dtend {

       element parameters {
           tzidparam?
       }?,

       value-date-time |
       value-date
   }






<span class="grey">Daboo, et al.                Standards Track                   [Page 41]</span>

<span id="page-42" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   # 3.8.2.3 Date/Time Due

   property-due = element due {

       element parameters {
           tzidparam?
       }?,

       value-date-time |
       value-date
   }

   # 3.8.2.4 Date/Time Start

   property-dtstart = element dtstart {

       element parameters {
           tzidparam?
       }?,

       value-date-time |
       value-date
   }

   # 3.8.2.5 Duration

   property-duration = element duration {

       element parameters { empty }?,

       value-duration
   }

   # 3.8.2.6 Free/Busy Time

   property-freebusy = element freebusy {

       element parameters {
           fbtypeparam?
       }?,


       value-period+
   }

   # 3.8.2.7 Time Transparency

   property-transp = element transp {



<span class="grey">Daboo, et al.                Standards Track                   [Page 42]</span>

<span id="page-43" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


       element parameters { empty }?,

       element text {
           "OPAQUE" |
           "TRANSPARENT"
       }
   }

   # 3.8.3 Time Zone Component Properties

   # 3.8.3.1 Time Zone Identifier

   property-tzid = element tzid {

       element parameters { empty }?,

       value-text
   }

   # 3.8.3.2 Time Zone Name

   property-tzname = element tzname {

       element parameters {
           languageparam?
       }?,

       value-text
   }

   # 3.8.3.3 Time Zone Offset From

   property-tzoffsetfrom = element tzoffsetfrom {

       element parameters { empty }?,

       value-utc-offset
   }

   # 3.8.3.4 Time Zone Offset To

   property-tzoffsetto = element tzoffsetto {

       element parameters { empty }?,

       value-utc-offset
   }




<span class="grey">Daboo, et al.                Standards Track                   [Page 43]</span>

<span id="page-44" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   # 3.8.3.5 Time Zone URL

   property-tzurl = element tzurl {

       element parameters { empty }?,

       value-uri
   }

   # 3.8.4 Relationship Component Properties

   # 3.8.4.1 Attendee

   property-attendee = element attendee {

       element parameters {
           cutypeparam? &
           memberparam? &
           roleparam? &
           partstatparam? &
           rsvpparam? &
           deltoparam? &
           delfromparam? &
           sentbyparam? &
           cnparam? &
           dirparam? &
           languageparam?
       }?,

       value-cal-address
   }

   # 3.8.4.2 Contact

   property-contact = element contact {

       element parameters {
           altrepparam? &
           languageparam?
       }?,

       value-text
   }

   # 3.8.4.3 Organizer

   property-organizer = element organizer {




<span class="grey">Daboo, et al.                Standards Track                   [Page 44]</span>

<span id="page-45" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


       element parameters {
           cnparam? &
           dirparam? &
           sentbyparam? &
           languageparam?
       }?,

       value-cal-address
   }

   # 3.8.4.4 Recurrence ID

   property-recurid = element recurrence-id {

       element parameters {
           tzidparam? &
           rangeparam?
       }?,

       value-date-time |
       value-date
   }

   # 3.8.4.5 Related-To

   property-related = element related-to {

       element parameters {
           reltypeparam?
       }?,

       value-text
   }

   # 3.8.4.6 Uniform Resource Locator

   property-url = element url {

       element parameters { empty }?,

       value-uri
   }

   # 3.8.4.7 Unique Identifier

   property-uid = element uid {

       element parameters { empty }?,



<span class="grey">Daboo, et al.                Standards Track                   [Page 45]</span>

<span id="page-46" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


       value-text
   }

   # 3.8.5 Recurrence Component Properties

   # 3.8.5.1 Exception Date/Times

   property-exdate = element exdate {

       element parameters {
           tzidparam?
       }?,

       value-date-time+ |
       value-date+
   }

   # 3.8.5.2 Recurrence Date/Times

   property-rdate = element rdate {

       element parameters {
           tzidparam?
       }?,

       value-date-time+ |
       value-date+ |
       value-period+
   }

   # 3.8.5.3 Recurrence Rule

   property-rrule = element rrule {

       element parameters { empty }?,

       value-recur
   }

   # 3.8.6 Alarm Component Properties

   # 3.8.6.1 Action

   property-action = element action {

       element parameters { empty }?,





<span class="grey">Daboo, et al.                Standards Track                   [Page 46]</span>

<span id="page-47" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


       element text {
           "AUDIO" |
           "DISPLAY" |
           "EMAIL"
       }
   }

   # 3.8.6.2 Repeat Count

   property-repeat = element repeat {

       element parameters { empty }?,

       value-integer
   }

   # 3.8.6.3 Trigger

   property-trigger = element trigger {

       (
           element parameters {
               trigrelparam?
           }?,

           value-duration
       ) |
       (
           element parameters { empty }?,

           value-date-time
       )
   }

   # 3.8.7 Change Management Component Properties

   # 3.8.7.1 Date/Time Created

   property-created = element created {

       element parameters { empty }?,

       value-date-time
   }

   # 3.8.7.2 Date/Time Stamp

   property-dtstamp = element dtstamp {



<span class="grey">Daboo, et al.                Standards Track                   [Page 47]</span>

<span id="page-48" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


       element parameters { empty }?,

       value-date-time
   }

   # 3.8.7.3 Last Modified

   property-last-mod = element last-modified {

       element parameters { empty }?,

       value-date-time
   }

   # 3.8.7.4 Sequence Number

   property-seq = element sequence {

       element parameters { empty }?,

       value-integer
   }

   # 3.8.8 Miscellaneous Component Properties

   # 3.8.8.3 Request Status

   property-rstatus = element request-status {

       element parameters {
           languageparam?
       }?,

       element code { xsd:string },
       element description { xsd:string },
       element data { xsd:string }?
   }














<span class="grey">Daboo, et al.                Standards Track                   [Page 48]</span>

<span id="page-49" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


<span class="h2"><a class="selflink" id="appendix-B" href="#appendix-B">Appendix B</a>.  Examples</span>

   This section contains two examples of iCalendar objects with their
   xCal representation.

<span class="h3"><a class="selflink" id="appendix-B.1" href="#appendix-B.1">B.1</a>.  Example 1</span>

<span class="h4"><a class="selflink" id="appendix-B.1.1" href="#appendix-B.1.1">B.1.1</a>.  iCalendar Data</span>

   BEGIN:VCALENDAR
   CALSCALE:GREGORIAN
   PRODID:-//Example Inc.//Example Calendar//EN
   VERSION:2.0
   BEGIN:VEVENT
   DTSTAMP:20080205T191224Z
   DTSTART:20081006
   SUMMARY:Planning meeting
   UID:4088E990AD89CB3DBB484909
   END:VEVENT
   END:VCALENDAR

<span class="h4"><a class="selflink" id="appendix-B.1.2" href="#appendix-B.1.2">B.1.2</a>.  XML Data</span>

   <?xml version="1.0" encoding="utf-8"?>
   <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
    <vcalendar>
     <properties>
      <calscale>
        <text>GREGORIAN</text>
      </calscale>
      <prodid>
       <text>-//Example Inc.//Example Calendar//EN</text>
      </prodid>
      <version>
        <text>2.0</text>
      </version>
     </properties>
     <components>
      <vevent>
       <properties>
        <dtstamp>
          <date-time>2008-02-05T19:12:24Z</date-time>
        </dtstamp>
        <dtstart>
          <date>2008-10-06</date>
        </dtstart>
        <summary>
         <text>Planning meeting</text>



<span class="grey">Daboo, et al.                Standards Track                   [Page 49]</span>

<span id="page-50" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


        </summary>
        <uid>
         <text>4088E990AD89CB3DBB484909</text>
        </uid>
       </properties>
      </vevent>
     </components>
    </vcalendar>
   </icalendar>

<span class="h3"><a class="selflink" id="appendix-B.2" href="#appendix-B.2">B.2</a>.  Example 2</span>

<span class="h4"><a class="selflink" id="appendix-B.2.1" href="#appendix-B.2.1">B.2.1</a>.  iCalendar Data</span>

   VERSION:2.0
   PRODID:-//Example Corp.//Example Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060102T120000
   DURATION:PT1H
   RRULE:FREQ=DAILY;COUNT=5
   RDATE;TZID=US/Eastern;VALUE=PERIOD:20060102T150000/PT2H
   SUMMARY:Event #2
   DESCRIPTION:We are having a meeting all this week at 12 pm fo
    r one hour\, with an additional meeting on the first day 2 h
    ours long.\nPlease bring your own lunch for the 12 pm meetin
    gs.
   UID:[email protected]
   END:VEVENT
   BEGIN:VEVENT



<span class="grey">Daboo, et al.                Standards Track                   [Page 50]</span>

<span id="page-51" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060104T140000
   DURATION:PT1H
   RECURRENCE-ID;TZID=US/Eastern:20060104T120000
   SUMMARY:Event #2 bis
   UID:[email protected]
   END:VEVENT
   END:VCALENDAR

<span class="h4"><a class="selflink" id="appendix-B.2.2" href="#appendix-B.2.2">B.2.2</a>.  XML Data</span>

   <?xml version="1.0" encoding="utf-8" ?>
   <icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">
     <vcalendar>
       <properties>
         <prodid>
           <text>-//Example Inc.//Example Client//EN</text>
         </prodid>
         <version>
           <text>2.0</text>
         </version>
       </properties>
       <components>
         <vtimezone>
           <properties>
             <last-modified>
               <date-time>2004-01-10T03:28:45Z</date-time>
             </last-modified>
             <tzid>US/Eastern</tzid>
           </properties>
           <components>
             <daylight>
               <properties>
                 <dtstart>
                   <date-time>2000-04-04T02:00:00</date-time>
                 </dtstart>
                 <rrule>
                   <recur>
                     <freq>YEARLY</freq>
                     <byday>1SU</byday>
                     <bymonth>4</bymonth>
                   </recur>
                 </rrule>
                 <tzname>
                   <text>EDT</text>
                 </tzname>
                 <tzoffsetfrom>
                   <utc-offset>-05:00</utc-offset>



<span class="grey">Daboo, et al.                Standards Track                   [Page 51]</span>

<span id="page-52" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


                 </tzoffsetfrom>
                 <tzoffsetto>
                   <utc-offset>-04:00</utc-offset>
                 </tzoffsetto>
               </properties>
             </daylight>
             <standard>
               <properties>
                 <dtstart>
                   <date-time>2000-10-26T02:00:00</date-time>
                 </dtstart>
                 <rrule>
                   <recur>
                     <freq>YEARLY</freq>
                     <byday>-1SU</byday>
                     <bymonth>10</bymonth>
                   </recur>
                 </rrule>
                 <tzname>
                   <text>EST</text>
                 </tzname>
                 <tzoffsetfrom>
                   <utc-offset>-04:00</utc-offset>
                 </tzoffsetfrom>
                 <tzoffsetto>
                   <utc-offset>-05:00</utc-offset>
                 </tzoffsetto>
               </properties>
             </standard>
           </components>
         </vtimezone>
         <vevent>
           <properties>
             <dtstamp>
               <date-time>2006-02-06T00:11:21Z</date-time>
             </dtstamp>
             <dtstart>
               <parameters>
                 <tzid><text>US/Eastern</text></tzid>
               </parameters>
               <date-time>2006-01-02T12:00:00</date-time>
             </dtstart>
             <duration>
               <duration>PT1H</duration>
             </duration>
             <rrule>
               <recur>
                 <freq>DAILY</freq>



<span class="grey">Daboo, et al.                Standards Track                   [Page 52]</span>

<span id="page-53" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


                 <count>5</count>
               </recur>
             </rrule>
             <rdate>
               <parameters>
                 <tzid><text>US/Eastern</text></tzid>
               </parameters>
               <period>
                 <start>2006-01-02T15:00:00</start>
                 <duration>PT2H</duration>
               </period>
             </rdate>
             <summary>
               <text>Event #2</text>
             </summary>
             <description>
               <text>We are having a meeting all this week at 12
   pm for one hour, with an additional meeting on the first day
   2 hours long.&#x0a;Please bring your own lunch for the 12 pm
   meetings.</text>
             </description>
             <uid>
               <text>[email protected]</text>
             </uid>
           </properties>
         </vevent>
         <vevent>
           <properties>
             <dtstamp>
               <date-time>2006-02-06T00:11:21Z</date-time>
             </dtstamp>
             <dtstart>
               <parameters>
                 <tzid><text>US/Eastern</text></tzid>
               </parameters>
               <date-time>2006-01-04T14:00:00</date-time>
             </dtstart>
             <duration>
               <duration>PT1H</duration>
             </duration>
             <recurrence-id>
               <parameters>
                 <tzid><text>US/Eastern</text></tzid>
               </parameters>
               <date-time>2006-01-04T12:00:00</date-time>
             </recurrence-id>
             <summary>
               <text>Event #2 bis</text>



<span class="grey">Daboo, et al.                Standards Track                   [Page 53]</span>

<span id="page-54" ></span>
<span class="grey"><a href="./rfc6321">RFC 6321</a>                          xCal                       August 2011</span>


             </summary>
             <uid>
               <text>[email protected]</text>
             </uid>
           </properties>
         </vevent>
       </components>
     </vcalendar>
   </icalendar>

Authors' Addresses

   Cyrus Daboo
   Apple Inc.
   1 Infinite Loop
   Cupertino, CA  95014
   USA

   EMail: [email protected]
   URI:   <a href="http://www.apple.com/">http://www.apple.com/</a>


   Mike Douglass
   Rensselaer Polytechnic Institute
   110 8th Street
   Troy, NY  12180
   USA

   EMail: [email protected]
   URI:   <a href="http://www.rpi.edu/">http://www.rpi.edu/</a>


   Steven Lees
   Microsoft Corporation
   One Microsoft Way
   Redmond, WA  98052
   USA

   EMail: [email protected]
   URI:   <a href="http://www.microsoft.com/">http://www.microsoft.com/</a>











Daboo, et al.                Standards Track                   [Page 54]

Additional Resources