<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="../../rfc2629.xslt"?><!DOCTYPE rfc SYSTEM 'rfc2629.dtd'[  <!ENTITY rfc2119 PUBLIC '' 'bibxml/reference.RFC.2119.xml'>  <!ENTITY rfc3023 PUBLIC '' 'bibxml/reference.RFC.3023.xml'>  <!ENTITY rfc3470 PUBLIC '' 'bibxml/reference.RFC.3470.xml'>  <!ENTITY rfc3688 PUBLIC '' 'bibxml/reference.RFC.3688.xml'>  <!ENTITY rfc4648 PUBLIC '' 'bibxml/reference.RFC.4648.xml'>  <!ENTITY rfc5545 PUBLIC '' 'bibxml/reference.RFC.5545.xml'>  <!ENTITY W3C.REC-xmlschema-2-20041028 SYSTEM 'bibxml4/reference.W3C.REC-xmlschema-2-20041028.xml'>]><?rfc rfcedstyle="yes" ?><?rfc toc="yes"?><?rfc tocdepth="4"?><!-- default = 3 --><?rfc symrefs="yes"?><?rfc sortrefs="yes"?><?rfc compact="yes"?><?rfc subcompact="no"?><!--<?rfc strict="yes"?> --><!--<?rfc comments="yes"?> --><!--<?rfc inline="yes"?> --><rfc category='std' ipr='trust200902' docName='draft-daboo-et-al-icalendar-in-xml-10'>  <front>    <title abbrev="xCal">xCal: The XML format for iCalendar</title>    <author initials="C." surname="Daboo" fullname="Cyrus Daboo">      <organization abbrev="Apple, Inc.">Apple Inc.</organization>      <address>        <postal>          <street>1 Infinite Loop</street>          <city>Cupertino</city>          <region>CA</region>          <code>95014</code>          <country>USA</country>        </postal>        <email>cyrus@daboo.name</email>        <uri>http://www.apple.com/</uri>      </address>    </author>    <author initials="M." surname="Douglass" fullname="Mike Douglass">      <organization abbrev="RPI">Rensselaer Polytechnic Institute</organization>      <address>        <postal>          <street>110 8th Street</street>          <city>Troy</city>          <region>NY</region>          <code>12180</code>          <country>USA</country>        </postal>        <email>douglm@rpi.edu</email>        <uri>http://www.rpi.edu/</uri>      </address>    </author>    <author initials="S." surname="Lees" fullname="Steven Lees">      <organization abbrev="Microsoft">Microsoft Corporation</organization>      <address>        <postal>          <street>One Microsoft Way</street>          <city>Redmond</city>          <region>WA</region>          <code>98052</code>          <country>USA</country>        </postal>        <email>steven.lees@microsoft.com</email>        <uri>http://www.microsoft.com/</uri>      </address>    </author>    <date />    <area>Applications</area>    <abstract>      <t>This specification defines "xCal", an XML format for iCalendar data.</t>    </abstract>  </front>  <middle>    <section title='Introduction'>      <t>The iCalendar data format <xref target='RFC5545'/> 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.</t>      <t>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.</t>      <t>Key design considerations are:        <list>          <t>Round-tripping (converting an iCalendar instance to xCal and back) will give the same semantic result as the starting point. i.e., all components, properties and property parameters are guaranteed to be preserved, with the exception of those which have default values.</t>          <t>Preserve 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.</t>          <t>Ability to handle many extensions to the underlying iCalendar specification without requiring an update to this document.</t>        </list>      </t>    </section>    <section title='Conventions Used in This Document'>      <t>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       <xref target='RFC2119' />.</t>      <t>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.</t>      <t>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.</t>    </section>    <section title='Converting from iCalendar to xCal'>      <t>This section describes how iCalendar data is converted to xCal using a simple mapping between the iCalendar data model and XML elements.</t>      <section title="Pre-processing">        <t>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 Section 3.1 of <xref target='RFC5545'/>. Prior to converting iCalendar data into xCal all folded lines MUST be unfolded.</t>        <t>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.</t>        <t>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":        <list style="symbols">          <t>If the property value type is "BINARY", the base64 encoding MUST be preserved.</t>          <t>If the value type is not "BINARY", the "ENCODING" property parameter MUST be removed, and the value MUST be base64 decoded.</t>        </list>        </t>                <t>When base64 encoding and decoding is used, it MUST conform to Section 4 of <xref target='RFC4648'/>, which is the base64 method used in <xref target='RFC5545'/>.</t>                <t>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 <xref target="W3C.REC-xmlschema-2-20041028"/> to aid with XML processing.</t>      </section>      <section title="iCalendar stream (RFC5545 section 3.4)">        <t>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.</t>        <t>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.</t>        <t>Example:        <figure><artwork><![CDATA[<?xml version="1.0" encoding="utf-8"?><icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">  <vcalendar>  ...  </vcalendar></icalendar>]]></artwork></figure>        </t>        <t>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".</t>        <t>In xCal, component elements, for example IC:vevent, 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.</t>        <t>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.</t>        <t>Example:        <figure><artwork><![CDATA[<?xml version="1.0" encoding="utf-8"?><icalendar xmlns="urn:ietf:params:xml:ns:icalendar-2.0">  <vcalendar>    <properties>    ...    </properties>    <components>    ...    </components>  </vcalendar></icalendar>]]></artwork></figure>        </t>        <texttable>          <ttcol>Item</ttcol>          <ttcol>XML element</ttcol>          <ttcol>XML Definition</ttcol>          <c>iCalendar Stream</c>          <c>IC:icalendar</c>          <c><xref target="schema"/> # 3.4</c>          <c>VCALENDAR</c>          <c>IC:vcalendar</c>          <c><xref target="schema"/> # 3.6</c>        </texttable>      </section>      <section title="Components (RFC5545 section 3.6)">        <t>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.</t>        <texttable>          <ttcol>Component</ttcol>          <ttcol>XML element</ttcol>          <ttcol>XML Definition</ttcol>          <c>VEVENT</c>          <c>IC:vevent</c>          <c><xref target="schema"/> # 3.6.1</c>          <c>VTODO</c>          <c>IC:vtodo</c>          <c><xref target="schema"/> # 3.6.2</c>          <c>VJOURNAL</c>          <c>IC:vjournal</c>          <c><xref target="schema"/> # 3.6.3</c>          <c>VFREEBUSY</c>          <c>IC:vfreebusy</c>          <c><xref target="schema"/> # 3.6.4</c>          <c>VTIMEZONE</c>          <c>IC:vtimezone</c>          <c><xref target="schema"/> # 3.6.5</c>          <c>STANDARD</c>          <c>IC:standard</c>          <c><xref target="schema"/> # 3.6.5</c>          <c>DAYLIGHT</c>          <c>IC:daylight</c>          <c><xref target="schema"/> # 3.6.5</c>          <c>VALARM</c>          <c>IC:valarm</c>          <c><xref target="schema"/> # 3.6.6</c>        </texttable>      </section>      <section title="Properties (RFC5545 section 3.7 and 3.8)">        <t>iCalendar properties , whether they apply to the "VCALENDAR" object or to a component, are handled in a consistent way in the xCal format.</t>        <t>iCalendar properties are enclosed in the XML element IC:properties.</t>        <t>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.</t>        <t>Example:        <figure><artwork><![CDATA[<?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>]]></artwork></figure>        </t>        <t>Each property can contain an IC:parameters XML element encapsulating any iCalendar property parameters associated with the iCalendar property.</t>        <t>Each property will contain one or more "value" XML elements as described below representing the value of the iCalendar property.</t>                <t>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.</t>        <texttable>          <ttcol>Property</ttcol>          <ttcol>XML element</ttcol>          <ttcol>XML Definition</ttcol>          <c>CALSCALE</c>          <c>IC:calscale</c>          <c><xref target="schema"/> # 3.7.1</c>          <c>METHOD</c>          <c>IC:method</c>          <c><xref target="schema"/> # 3.7.2</c>          <c>PRODID</c>          <c>IC:prodid</c>          <c><xref target="schema"/> # 3.7.3</c>          <c>VERSION</c>          <c>IC:version</c>          <c><xref target="schema"/> # 3.7.4</c>          <c>ATTACH</c>          <c>IC:attach</c>          <c><xref target="schema"/> # 3.8.1.1</c>          <c>CATEGORIES</c>          <c>IC:categories</c>          <c><xref target="schema"/> # 3.8.1.2</c>          <c>CLASS</c>          <c>IC:class</c>          <c><xref target="schema"/> # 3.8.1.3</c>          <c>COMMENT</c>          <c>IC:comment</c>          <c><xref target="schema"/> # 3.8.1.4</c>          <c>DESCRIPTION</c>          <c>IC:description</c>          <c><xref target="schema"/> # 3.8.1.5</c>          <c>GEO</c>          <c>IC:geo</c>          <c><xref target="schema"/> # 3.8.1.6</c>          <c>LOCATION</c>          <c>IC:location</c>          <c><xref target="schema"/> # 3.8.1.7</c>          <c>PERCENT-COMPLETE</c>          <c>IC:percent-complete</c>          <c><xref target="schema"/> # 3.8.1.8</c>          <c>PRIORITY</c>          <c>IC:priority</c>          <c><xref target="schema"/> # 3.8.1.9</c>          <c>RESOURCES</c>          <c>IC:resources</c>          <c><xref target="schema"/> # 3.8.1.10</c>          <c>STATUS</c>          <c>IC:status</c>          <c><xref target="schema"/> # 3.8.1.11</c>          <c>SUMMARY</c>          <c>IC:summary</c>          <c><xref target="schema"/> # 3.8.1.12</c>          <c>COMPLETED</c>          <c>IC:completed</c>          <c><xref target="schema"/> # 3.8.2.1</c>          <c>DTEND</c>          <c>IC:dtend</c>          <c><xref target="schema"/> # 3.8.2.2</c>          <c>DUE</c>          <c>IC:due</c>          <c><xref target="schema"/> # 3.8.2.3</c>          <c>DTSTART</c>          <c>IC:dtstart</c>          <c><xref target="schema"/> # 3.8.2.4</c>          <c>DURATION</c>          <c>IC:duration</c>          <c><xref target="schema"/> # 3.8.2.5</c>          <c>FREEBUSY</c>          <c>IC:freebusy</c>          <c><xref target="schema"/> # 3.8.2.6</c>          <c>TRANSP</c>          <c>IC:transp</c>          <c><xref target="schema"/> # 3.8.2.7</c>          <c>TZID</c>          <c>IC:tzid</c>          <c><xref target="schema"/> # 3.8.3.1</c>          <c>TZNAME</c>          <c>IC:tzname</c>          <c><xref target="schema"/> # 3.8.3.2</c>          <c>TZOFFSETFROM</c>          <c>IC:tzoffsetfrom</c>          <c><xref target="schema"/> # 3.8.3.3</c>          <c>TZOFFSETTO</c>          <c>IC:tzoffsetto</c>          <c><xref target="schema"/> # 3.8.3.4</c>          <c>TZURL</c>          <c>IC:tzurl</c>          <c><xref target="schema"/> # 3.8.3.5</c>          <c>ATTENDEE</c>          <c>IC:attendee</c>          <c><xref target="schema"/> # 3.8.4.1</c>          <c>CONTACT</c>          <c>IC:contact</c>          <c><xref target="schema"/> # 3.8.4.2</c>          <c>ORGANIZER</c>          <c>IC:organizer</c>          <c><xref target="schema"/> # 3.8.4.3</c>          <c>RECURRENCE-ID</c>          <c>IC:recurrence-id</c>          <c><xref target="schema"/> # 3.8.4.4</c>          <c>RELATED-TO</c>          <c>IC:related-to</c>          <c><xref target="schema"/> # 3.8.4.5</c>          <c>URL</c>          <c>IC:url</c>          <c><xref target="schema"/> # 3.8.4.6</c>          <c>UID</c>          <c>IC:uid</c>          <c><xref target="schema"/> # 3.8.4.7</c>          <c>EXDATE</c>          <c>IC:exdate</c>          <c><xref target="schema"/> # 3.8.5.1</c>          <c>RDATE</c>          <c>IC:rdate</c>          <c><xref target="schema"/> # 3.8.5.2</c>          <c>RRULE</c>          <c>IC:rrule</c>          <c><xref target="schema"/> # 3.8.5.3</c>          <c>ACTION</c>          <c>IC:action</c>          <c><xref target="schema"/> # 3.8.6.1</c>          <c>REPEAT</c>          <c>IC:repeat</c>          <c><xref target="schema"/> # 3.8.6.2</c>          <c>TRIGGER</c>          <c>IC:trigger</c>          <c><xref target="schema"/> # 3.8.6.3</c>          <c>CREATED</c>          <c>IC:created</c>          <c><xref target="schema"/> # 3.8.7.1</c>          <c>DTSTAMP</c>          <c>IC:dtstamp</c>          <c><xref target="schema"/> # 3.8.7.2</c>          <c>LAST-MODIFIED</c>          <c>IC:last-modified</c>          <c><xref target="schema"/> # 3.8.7.3</c>          <c>SEQUENCE</c>          <c>IC:sequence</c>          <c><xref target="schema"/> # 3.8.7.4</c>          <c>REQUEST-STATUS</c>          <c>IC:request-status</c>          <c><xref target="schema"/> # 3.8.8.3</c>        </texttable>        <section title="Special Cases for Properties">          <t>This section describes some properties that have special handling when converting to xCal.</t>          <section title="Multi-valued Properties">            <t>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 (<xref target="values"/>).</t>            <texttable>              <ttcol>Property</ttcol>              <ttcol>XML element</ttcol>              <ttcol>XML Definition</ttcol>              <c>CATEGORIES</c>              <c>IC:categories</c>              <c><xref target="schema"/> # 3.8.1.2</c>              <c>RESOURCES</c>              <c>IC:resources</c>              <c><xref target="schema"/> # 3.8.1.10</c>              <c>FREEBUSY</c>              <c>IC:freebusy</c>              <c><xref target="schema"/> # 3.8.2.6</c>              <c>EXDATE</c>              <c>IC:exdate</c>              <c><xref target="schema"/> # 3.8.5.1</c>              <c>RDATE</c>              <c>IC:rdate</c>              <c><xref target="schema"/> # 3.8.5.2</c>            </texttable>          </section>          <section title="GEO Property">            <t>In iCalendar, the "GEO" property value is defined as a semi-colon separated list of two "FLOAT" values, the first representing latitude and the second longitude.</t>                        <t>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 contain float values. See <xref target="schema"/> # 3.8.1.6.</t>			<t>Example:			<figure><artwork><![CDATA[<?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>]]></artwork></figure>	        </t>          </section>          <section title="REQUEST-STATUS Property">            <t>In iCalendar, the "REQUEST-STATUS" property value is defined as a semi-colon separated list of two or three "TEXT" values. The first represents a code, the second a description, and the third any additional data.</t>                        <t>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 contain 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 <xref target="schema"/> # 3.8.8.3.</t>			<t>Example:			<figure><artwork><![CDATA[<?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>]]></artwork></figure>	        </t>          </section>        </section>      </section>      <section anchor="parameters" title="Parameters (RFC5545 section 3.2)">        <t>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.</t>        <t>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.</t>        <t>Example:        <figure><artwork><![CDATA[<?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>]]></artwork></figure>        </t>        <t>Each XML parameter element contains one or more child XML elements representing iCalendar value types.</t>                <t>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.</t>        <texttable>          <ttcol>Parameter</ttcol>          <ttcol>XML element</ttcol>          <ttcol>XML Definition</ttcol>          <c>ALTREP</c>          <c>IC:altrep</c>          <c><xref target="schema"/> # 3.2.1</c>          <c>CN</c>          <c>IC:cn</c>          <c><xref target="schema"/> # 3.2.2</c>          <c>CUTYPE</c>          <c>IC:cutype</c>          <c><xref target="schema"/> # 3.2.3</c>          <c>DELEGATED-FROM</c>          <c>IC:delegated-from</c>          <c><xref target="schema"/> # 3.2.4</c>          <c>DELEGATED-TO</c>          <c>IC:delegated-to</c>          <c><xref target="schema"/> # 3.2.5</c>          <c>DIR</c>          <c>IC:dir</c>          <c><xref target="schema"/> # 3.2.6</c>          <c>ENCODING</c>          <c>IC:encoding</c>          <c><xref target="schema"/> # 3.2.7</c>          <c>FMTTYPE</c>          <c>IC:fmttype</c>          <c><xref target="schema"/> # 3.2.8</c>          <c>FBTYPE</c>          <c>IC:fbtype</c>          <c><xref target="schema"/> # 3.2.9</c>          <c>LANGUAGE</c>          <c>IC:language</c>          <c><xref target="schema"/> # 3.2.10</c>          <c>MEMBER</c>          <c>IC:member</c>          <c><xref target="schema"/> # 3.2.11</c>          <c>PARTSTAT</c>          <c>IC:partstat</c>          <c><xref target="schema"/> # 3.2.12</c>          <c>RANGE</c>          <c>IC:range</c>          <c><xref target="schema"/> # 3.2.13</c>          <c>RELATED</c>          <c>IC:related</c>          <c><xref target="schema"/> # 3.2.14</c>          <c>RELTYPE</c>          <c>IC:reltype</c>          <c><xref target="schema"/> # 3.2.15</c>          <c>ROLE</c>          <c>IC:role</c>          <c><xref target="schema"/> # 3.2.16</c>          <c>RSVP</c>          <c>IC:rsvp</c>          <c><xref target="schema"/> # 3.2.17</c>          <c>SENT-BY</c>          <c>IC:sent-by</c>          <c><xref target="schema"/> # 3.2.18</c>          <c>TZID</c>          <c>IC:tzid</c>          <c><xref target="schema"/> # 3.2.19</c>        </texttable>                <section title="VALUE parameter">          <t>iCalendar defines a "VALUE" property parameter (Section 3.2.20 of <xref target='RFC5545'/>). 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 IC: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.</t>        </section>      </section>      <section anchor="values" title="Values (RFC5545 section 3.3)">        <t>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.</t>        <section title="Binary (RFC5545 section 3.3.1)">        <t><list style="hanging">            <t hangText="Description:">iCalendar "BINARY" property values are represented by the IC:binary XML element. The content of the element is base64 encoded data, conforming to Section 4 of <xref target='RFC4648'/>, which is the base64 method used in <xref target='RFC5545'/>. 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.</t>            <t hangText="XML Definition:"><xref target="schema"/> # 3.3.1</t>			<t hangText="Example:"><figure><artwork><![CDATA[<binary>SGVsbG8gV29ybGQh</binary>]]></artwork></figure></t>          </list></t>        </section>        <section title="Boolean  (RFC5545 section 3.3.2)">          <t><list style="hanging">            <t hangText="Description:">iCalendar "BOOLEAN" property values are represented by the IC:boolean XML element. The content of the element is a boolean value.</t>            <t hangText="XML Definition:"><xref target="schema"/> # 3.3.2</t>			<t hangText="Example:"><figure><artwork><![CDATA[<boolean>true</boolean>]]></artwork></figure></t>          </list></t>        </section>        <section title="Calendar User Address (RFC5545 section 3.3.3)">          <t><list style="hanging">            <t hangText="Description:">iCalendar "CAL-ADDRESS" property values are represented by the IC:cal-address XML element. The content of the element is a URI.</t>            <t hangText="XML Definition:"><xref target="schema"/> # 3.3.3</t>			<t hangText="Example:"><figure><artwork><![CDATA[<cal-address>mailto:cyrus@example.com</cal-address>]]></artwork></figure></t>          </list></t>        </section>        <section title="Date (RFC5545 section 3.3.4)">          <t><list style="hanging">            <t hangText="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 <xref target='RFC5545'/>, with the exception that the date components are separated by "-" characters, for consistency with <xref target="W3C.REC-xmlschema-2-20041028"/>.</t>            <t hangText="XML Definition:"><xref target="schema"/> # 3.3.4</t>			<t hangText="Example:"><figure><artwork><![CDATA[<date>2011-05-17</date>]]></artwork></figure></t>          </list></t>        </section>        <section title="Date-Time (RFC5545 section 3.3.5)">          <t><list style="hanging">            <t hangText="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 <xref target='RFC5545'/>, with the exception that the date components are separated by "-" characters, and the time components are separated by ":" characters, for consistency with <xref target="W3C.REC-xmlschema-2-20041028"/>. Note that while [W3C.REC-xmlschema-2-20041028] 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 timezone definitions via the "TZID" property parameter.</t>            <t hangText="XML Definition:"><xref target="schema"/> # 3.3.5</t>			<t hangText="Example:"><figure><artwork><![CDATA[<date-time>2011-05-17T12:00:00</date-time>]]></artwork></figure></t>          </list></t>        </section>        <section title="Duration (RFC5545 section 3.3.6)">          <t><list style="hanging">            <t hangText="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 <xref target='RFC5545'/>.</t>            <t hangText="XML Definition:"><xref target="schema"/> # 3.3.6</t>			<t hangText="Example:"><figure><artwork><![CDATA[<duration>P1D</duration>]]></artwork></figure></t>          </list></t>        </section>        <section title="Float (RFC5545 section 3.3.7)">          <t><list style="hanging">            <t hangText="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.</t>            <t hangText="XML Definition:"><xref target="schema"/> # 3.3.7</t>			<t hangText="Example:"><figure><artwork><![CDATA[<float>0.5</float>]]></artwork></figure></t>          </list></t>        </section>        <section title="Integer (RFC5545 section 3.3.8)">          <t><list style="hanging">            <t hangText="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.</t>            <t hangText="XML Definition:"><xref target="schema"/> # 3.3.8</t>			<t hangText="Examples:"><figure><artwork><![CDATA[<integer>50</integer><integer>-100</integer>]]></artwork></figure></t>          </list></t>        </section>        <section title="Period of Time (RFC5545 section 3.3.9)">          <t><list style="hanging">            <t hangText="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.</t>            <t hangText="XML Definition:"><xref target="schema"/> # 3.3.9</t>			<t hangText="Example:"><figure><artwork><![CDATA[<period>  <start>2011-05-17T12:00:00</start>  <duration>P1H</duration></period>]]></artwork></figure></t>          </list></t>        </section>        <section title="Recurrence Rule (RFC5545 section 3.3.10)">          <t><list style="hanging">            <t hangText="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.</t>            <t hangText="XML Definition:"><xref target="schema"/> # 3.3.10</t>			<t hangText="Example:"><figure><artwork><![CDATA[<recur>  <freq>YEARLY</freq>  <count>5</count>  <byday>-1SU</byday>  <bymonth>10</bymonth></recur>]]></artwork></figure></t>          </list></t>        </section>        <section title="Text (RFC5545 section 3.3.11)">          <t><list style="hanging">            <t hangText="Description:">iCalendar "TEXT" property values are represented by the IC:text XML element. The content of the element is simple text.</t>            <t hangText="XML Definition:"><xref target="schema"/> # 3.3.11</t>			<t hangText="Example:"><figure><artwork><![CDATA[<text>Hello World!</text>]]></artwork></figure></t>          </list></t>        </section>        <section title="Time (RFC5545 section 3.3.12)">          <t><list style="hanging">            <t hangText="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 <xref target='RFC5545'/>, with the exception that the time components are separated by ":" characters, for consistency with <xref target="W3C.REC-xmlschema-2-20041028"/>. Note that while [W3C.REC-xmlschema-2-20041028] 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 timezone definitions via the "TZID" property parameter.</t>            <t hangText="XML Definition:"><xref target="schema"/> # 3.3.12</t>			<t hangText="Example:"><figure><artwork><![CDATA[<time>12:00:00</time>]]></artwork></figure></t>          </list></t>        </section>        <section title="URI (RFC5545 section 3.3.13)">          <t><list style="hanging">            <t hangText="Description:">iCalendar "URI" property values are represented by the IC:uri XML element. The content of the element is a URI.</t>            <t hangText="XML Definition:"><xref target="schema"/> # 3.3.13</t>			<t hangText="Example:"><figure><artwork><![CDATA[<uri>http://calendar.example.com</uri>]]></artwork></figure></t>          </list></t>        </section>        <section title="UTC Offset (RFC5545 section 3.3.14)">          <t><list style="hanging">            <t hangText="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 <xref target='RFC5545'/>, with the exception that the hour and minute components are separated by a ":" character, for consistency with <xref target="W3C.REC-xmlschema-2-20041028"/>.</t>            <t hangText="XML Definition:"><xref target="schema"/> # 3.3.14</t>			<t hangText="Example:"><figure><artwork><![CDATA[<utc-offset>-05:00</utc-offset>]]></artwork></figure></t>          </list></t>        </section>      </section>      <section title="Extensions">        <t>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. But see <xref target='unrecognized'/> for how to deal with default values for unrecognized extension properties or property parameters.</t>      </section>    </section>    <section title='Converting from xCal into iCalendar'>      <t>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 <xref target='RFC5545'/>.</t>      <t>Backslash escaping and line folding MUST be applied to the resulting iCalendar data as required by <xref target='RFC5545'/>.</t>            <t>Non-binary value types MUST NOT be base64 encoded.</t>      <section title="Converting XML Extensions into iCalendar">      <t>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.</t>            <t>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.</t>            <t>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 <xref target="XMLprop"/>.</t>      </section>            <section title="The XML property for iCalendar" anchor="XMLprop">        <t>This section describes an extension property for iCalendar, as covered in section 8.2.3 of <xref target='RFC5545'/>.</t>                <t>Property name: XML</t>                <t>Purpose: To embed XML-encoded calendar data in the iCalendar format.</t>                <t>Value type: The default value type is "TEXT". The value type can also be set to "BINARY" to indicate base64 encoded content.</t>                <t>Property parameters: IANA, non-standard, inline encoding, and value data type property parameters can be specified on this property.</t>                       <t>Conformance: The property can appear on any iCalendar component.</t>                <t>Description: The value of this property is an XML element. The "XML" property MUST NOT be used to contain properties that are already defined in iCalendar, or properties that use the "X-" iCalendar extension property syntax. 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 which is the value of this property MUST have an XML namespace declaration.</t>                <t>Note that the source XML may contain characters not allowed in iCalendar such as control characters. If this is the case, then the XML data MUST be base64 encoded. As required by <xref target='RFC5545'/>, the "ENCODING" property parameter MUST be present and set to "BASE64", and the "VALUE" property parameter MUST be present and set to "BINARY".</t>        <t>There can be more than one "XML" property present for a given iCalendar object. The ordering of "XML" properties is not preserved in the conversion between xCal and iCalendar.</t>                <t>Format definition: This property is defined by the following notation:                         <figure><artwork name="abnf"><![CDATA[xml      = "XML" xmlparam ( ":" text ) /             (               ";" "ENCODING" "=" "BASE64"               ";" "VALUE" "=" "BINARY"               ":" binary             )             CRLFxmlparam     = *(";" other-param)]]></artwork></figure>        </t>                <t>Example: The following is an example of an iCalendar event with a location embedded in KML markup inside the "XML" property.</t>                <figure><artwork><![CDATA[BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//Example Inc.//Example Calendar//ENVERSION:2.0 BEGIN:VEVENT DTSTAMP:20080205T191224Z DTSTART:20081006 SUMMARY:Planning meeting UID:4088E990AD89CB3DBB484909 XML:<kml xmlns="http://www.opengis.net/kml/2.2">...</kml>END:VEVENT END:VCALENDAR ]]></artwork></figure>      </section>    </section>    <section title='Handling Unrecognized Properties or Parameters' anchor='unrecognized'>      <t>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.</t>      <t>When new properties are defined or "X-" properties used, an iCalendar&lt;-&gt;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:            <list style='symbols'>        <t>When converting iCalendar into xCal:                <list style='symbols'>            <t>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.</t>            <t>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.</t>        </list>        </t>                <t>When converting xCal into iCalendar:                <list style='symbols'>            <t>Any IC:unknown property value XML elements are converted directly into iCalendar values. The containing property MUST NOT have a "VALUE" property parameter.</t>            <t>Any IC:unknown parameter value XML elements are converted as if they were IC:text value type XML elements.</t>        </list>        </t>      </list>          </t>      <t>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.</t>                <figure><preamble>iCalendar:</preamble><artwork><![CDATA[X-PROPERTY:20110512T120000Z]]></artwork></figure>                <figure><preamble>xCal:</preamble><artwork><![CDATA[<x-property>  <unknown>20110512T120000Z</unknown></x-property>]]></artwork></figure>      <t>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.</t>                <figure><preamble>iCalendar:</preamble><artwork><![CDATA[DTSTART;X-PARAM=PT30M:20110512T130000Z]]></artwork></figure>                <figure><preamble>xCal:</preamble><artwork><![CDATA[<dtstart>  <parameters>    <x-param><unknown>PT30M</unknown></x-param>  </parameters>  <date-time>2011-05-12T13:00:00Z</date-time></dtstart>]]></artwork></figure>    </section>            <section title='Security Considerations' anchor='security'>      <t>For security considerations specific to calendar data, see Section 7 of <xref target='RFC5545'/>. Since this specification is a mapping from iCalendar, no new security concerns are introduced related to calendar data.</t>            <t>The use of XML as a format does have security risks. Section 7 of <xref target='RFC3470'/> discusses these risks. See also the security discussion for the application/xml type in <xref target='RFC3023'/>.</t>    </section>    <section title='IANA Considerations'>      <t>This document defines a new URN to identify a new XML namespace for iCalendar data. The URN conforms to a registry mechanism described in <xref target="RFC3688"/>.</t>      <t>This document defines a new media type. The registration is in <xref target="MediaType"/>.</t>      <t>This document defines a new property for iCalendar. The registration is in <xref target="iana_props"/>.</t>      <section title='Namespace Registration' anchor='ns.registration'>        <t>Registration request for the iCalendar namespace: </t>        <t>URI: urn:ietf:params:xml:ns:icalendar-2.0 </t>        <t>Registrant Contact: See the "Authors' Addresses" section of this document.</t>        <t>XML: None. Namespace URIs do not represent an XML specification.</t>      </section>      <section title="Media Type" anchor="MediaType">        <t>This section defines the MIME media type for use with iCalendar in XML data.        <list style="hanging">          <t hangText="Type name:">application</t>          <t hangText="Subtype name:">calendar+xml</t>          <t hangText="Required parameters:">none</t>          <t hangText="Optional parameters:">method, component and optinfo as defined for the text/calendar media type in <xref target='RFC5545'/>; charset as defined for application/xml in <xref target='RFC3023'/>; per <xref target='RFC3023'/>, use of the charset property parameter with the value "utf-8" is "STRONGLY RECOMMENDED"</t>          <t hangText="Encoding considerations:">Same as encoding considerations of application/xml as specified in <xref target='RFC3023'/></t>          <t hangText="Security considerations:">See <xref target='security'/>.</t>          <t hangText="Interoperability considerations:">This media type provides an alternative format for iCalendar data based on XML.</t>          <t hangText="Published specification:">This specification.</t>          <t hangText="Applications which use this media type:">Applications that currently make use of the text/calendar media type can use this as an alternative.</t>          <t hangText="Additional information:">            <list style="hanging">              <t hangText="Magic number(s):">None</t>              <t hangText="File extension(s):">xcs</t>              <t hangText="Macintosh file type code(s):">None specified.</t>            </list>          </t>          <t hangText="Person &amp; email address to contact for further information:">calsify@ietf.org</t>          <t hangText="Intended usage:">COMMON</t>          <t hangText="Restrictions on usage:">There are no restrictions on where this media type can be used.</t>          <t hangText="Author:">See the "Author's Address" section of this document.</t>          <t hangText="Change controller:">IETF</t>        </list>        </t>      </section>        <section title='iCalendar Property Registrations' anchor='iana_props'>            <t>                This document defines the following new iCalendar property to be added to the registry defined in Section 8.2.3 of <xref target="RFC5545" />:            </t>            <texttable>                <ttcol>Property</ttcol>                <ttcol>Status</ttcol>                <ttcol>Reference</ttcol>                    <c>XML</c>                <c>Current</c>                <c>RFCXXXX, <xref target="XMLprop"/></c>            </texttable>            </section>    </section>    <section title='Acknowledgments'>      <t>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.</t>    </section>  </middle>  <back>    <references title='Normative References'>      &rfc2119;      &rfc3023;      &rfc3470;      &rfc3688;      &rfc4648;      &rfc5545;    </references>    <references title='Informative References'>      &W3C.REC-xmlschema-2-20041028;    </references>    <section anchor="schema" title="Relax NG Schema">      <t>Below is a Relax NG schema for iCalendar in XML. The schema is non-normative and given for reference only.</t>            <t>This schema uses the compact notation of Relax NG. The numeric section numbers given in the comments refer to section in <xref target='RFC5545'/>. The ordering of elements follows the section ordering of <xref target='RFC5545'/>.</t>      <t>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 RelaxNG, this is the best representation that can be given.</t>            <t>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.</t>      <figure><artwork><![CDATA[# 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}# 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}# 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"    })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"    }}# 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}# 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}# 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"}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}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" }}# UNKNOWNvalue-unknown = element unknown {    xsd:string}# 3.4 iCalendar Streamstart = element icalendar {    vcalendar+}# 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? &    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? &    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* &    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*    }}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*}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" }}# 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?    }?,    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}# 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"    }}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}# 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 {    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}# 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 {    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 }?,    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 }?,    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 {    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 }?}]]></artwork></figure>    </section>    <section title="Examples">      <t>This section contains two examples of iCalendar objects with their xCal representation.</t><section title="Example 1">      <section title="iCalendar Data">        <figure><artwork><![CDATA[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 ]]></artwork></figure>      </section>      <section title="XML Data">        <figure><artwork><![CDATA[<?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>     </summary>     <uid>      <text>4088E990AD89CB3DBB484909</text>     </uid>    </properties>   </vevent>  </components> </vcalendar></icalendar>]]></artwork></figure>      </section>    </section>    <section title="Example 2">      <section title="iCalendar Data">        <figure><artwork><![CDATA[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:00959BC664CA650E933C892C@example.comEND:VEVENTBEGIN:VEVENTDTSTAMP:20060206T001121ZDTSTART;TZID=US/Eastern:20060104T140000DURATION:PT1HRECURRENCE-ID;TZID=US/Eastern:20060104T120000SUMMARY:Event #2 bisUID:00959BC664CA650E933C892C@example.comEND:VEVENTEND:VCALENDAR]]></artwork></figure>      </section>      <section title="XML Data">        <figure><artwork><![CDATA[<?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>              </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>              <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>00959BC664CA650E933C892C@example.com</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>          </summary>          <uid>            <text>00959BC664CA650E933C892C@example.com</text>          </uid>        </properties>      </vevent>    </components>  </vcalendar></icalendar>]]></artwork></figure>      </section>    </section></section><section title='Change History (to be removed prior to publication as an RFC)'><t>Changes in -10:<list style='numbers'><t>IESG: Added more XML schema references in value descriptions.</t><t>IESG: Added reference to RFC4648 for base64 definition.</t><t>IESG: Rephrased various uses of "optional".</t><t>IESG: Clarified round-tripping design consideration.</t><t>IESG: Use "As an example" rather than "non-normative" for tables.</t><t>IESG: Added a few more examples.</t>	<t>IESG: Added a note that UTC-offset is not used with time values.</t>	</list></t><t>Changes in -09:<list style='numbers'><t>LC: Changed namespace prefix to IC:.</t><t>LC: Clarified what needs to happen with base64 encoding.</t><t>LC: Changed "XML" to "xCal" in various places.</t><t>LC: Schema now uses xsd types where appropriate.</t><t>LC: GEO value fixed to be two floats.</t><t>LC: Fix use of &lt;text&gt; within parameters.</t><t>LC: Add IC:unknown value element to deal with unrecognized properties or parameters.</t><t>LC: Added escaped/folded text example property.</t><t>Removed &lt;value&gt; wrapper element for GEO and REQUEST-STATUS.</t><t>Date/time, duration and utc-offset values defined in terms of patterns. Some now align with xsd patterns rather than iCalendar ones.</t><t>Period schema value defined in terms of child elements.</t><t>Added more examples.</t></list></t><t>Changes in -08:<list style='numbers'><t>Updated optional parameters section of media type registration (feedback from ietf-types)</t><t>Corrected the schema for the trigger element</t><t>Updated to ietf.org mailing list</t><t>Updated definition of iCalendar XML property</t></list></t><t>Changes in -07:<list style='numbers'><t>Updated XML reference to latest version.</t><t>Corrected dtstamp elements in samples.</t><t>Removed empty informative references section.</t><t>Changed media type registration file extension to "xcs" (feedback from ietf-types)</t><t>Changed media type registration follow up email to ietf-calsify (feedback from ietf-types)</t><t>Updated several parts of the specification to show how future extensions to iCalendar can be handled without changing this specification (feedback from ietf-types)</t><t>Updated security concerns in section 5 (feedback from ietf-types)</t><t>Updated encoding considerations in section 5 (feedback from ietf-types)</t></list></t><t>Changes in -06:<list style='numbers'><t>Removed the ordwk and weekday elements from the byday element in a recurrence rule. The byday elementnow takes a text value which is the same as the value used in <xref target='RFC5545'/>.</t><t>Added another example of an iCalendar object converted to xCal.</t><t>Fixed the MIME type registration (another instance of xml+calendar corrected to calendar+xml).</t></list></t><t>Changes in -05:<list style='numbers'><t>Added description to XML extension discussing how to handle binary data in XML.</t><t>Removed empty Appendix B.</t></list></t><t>Changes in -04:<list style='numbers'><t>Changed the proposed MIME type from xml+calendar to calendar+xml.</t><t>Fixed several references to sections of RFC5545.</t><t>Updated example in Appendix C.</t><t>Corrected the definition and grammar for TIME and UTC-OFFSET properties.</t></list></t><t>Changes in -03:<list style='numbers'><t>Removed the LINK extension and related sections. The concept will be addressed in a separate specification.</t><t>Various minor edits for clarity and consistency.</t></list></t><t>Changes in -02:<list style='numbers'><t>Added LINK extension to iCalendar and section discussing links in XML format.</t><t>Adopted "xCal" as the short name for the specification.</t></list></t><t>Changes in -01:<list style='numbers'><t>Changed 2445bis references to RFC5545.</t><t>Added a version number to the XML namespace for iCalendar.</t><t>Changed the values for the date, date-time, period, and duration elements to exactly match the values specified in RFC5545. Previously these were broken out into separate elements for day, month, year, etc.</t><t>Added specification for XML property in iCalendar.</t></list></t></section>  </back></rfc>
