One document matched: draft-daboo-et-al-icalendar-in-xml-00.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd'
[
<!ENTITY rfc2119 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
<!ENTITY rfc3688 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3688.xml'>
<!ENTITY id2445bis SYSTEM 'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-calsify-rfc2445bis.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-00'>
<front>
<title abbrev="iCalendar in XML">iCalendar XML Representation</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 a format for representing iCalendar data in XML.</t>
</abstract>
</front>
<middle>
<section title='Introduction'>
<t>The iCalendar data format <xref target="I-D.ietf-calsify-rfc2445bis"/> 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 an XML format that allows iCalendar data to be converted to XML, and then back to iCalendar, without losing any semantic meaning in the data. Anyone creating XML calendar data according to this specification will know that their data can be converted to a valid iCalendar representation as well.</t>
<t>Several key design decisions have been made:
<list>
<t>Round-tripping: i.e., converting an iCalendar instance to XML and back will give the same result as the starting point.</t>
<t>Make the conversion process as simple as possible.</t>
<t>Make it easy to work with the XML without needing to re-parse it. It is worth explaining the rationale behind this decision. One result is that this specification breaks up date/time values from iCalendar into separate year, month, day, hour, minute, and second elements. By separating the values into different elements, it becomes much easier to transform or query over the resulting XML. For instance, given a set of xCal elements representing events, it is easy to find the events that start at a particular time or in a particular year, month, or day. Given a date / time value in the xCal format described here, it would be easy to transform it to HTML while removing unneeded sub-elements; no additional parsing is needed.</t>
<t>Preserve the semantics of the iCalendar data. This decision is important: the semantics of iCalendar is preserved in the XML so a full understanding of iCalendar is required in order to actually use the data, whether it be in the iCalendar or XML formats.</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" are referenced in this document outside of the context of an XML fragment, the string "ICAL:" 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 XML'>
<t>This section describes how iCalendar data is converted to XML using a simple, predictable mapping between the iCalendar data model and XML elements.</t>
<section title="Pre-processing">
<t>iCalendar data 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="I-D.ietf-calsify-rfc2445bis"/>.</t>
<t>Prior to converting iCalendar data into XML all folded lines MUST be unfolded.</t>
<t>iCalendar data uses an "escape" character sequence for text values and parameter values. When such text elements are converted into XML the escaping MUST be removed.</t>
<t>iCalendar uses a base64 encoding for binary data. The base64 encoding MUST remain when converted to XML.</t>
</section>
<section title="iCalendar stream (2445bis section 3.4)">
<t>iCalendar has a well defined object model for its data that makes mapping to XML a simple process of following a set of rules for mapping the various object model types into XML elements.</t>
<t>At the top-level of the iCalendar object model is an "iCalendar stream". This object encompasses multiple "iCalendar objects". In XML, the entire stream is contained in the root ICAL:icalendar XML element.</t>
<t>Example:
<figure><artwork><![CDATA[
<?xml version="1.0" encoding="utf-8"?>
<icalendar xmlns="urn:ietf:params:xml:ns:icalendar">
...
</icalendar>
]]></artwork></figure>
</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 ICAL:vcalendar XML element.</t>
<t>Example:
<figure><artwork><![CDATA[
<?xml version="1.0" encoding="utf-8"?>
<icalendar xmlns="urn:ietf:params:xml:ns:icalendar">
<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 optionally a set of "parameters".</t>
<t>In XML, "components" are contained within an ICAL:components XML element. With that element, another ICAL:components element could appear (representing components nested within components) or the ICAL:properties XML element could appear. ICAL: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 an optional ICAL:parameters XML element used to encapsulate any iCalendar 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">
<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>ICAL:icalendar</c>
<c><xref target="schema"/> # 3.4</c>
<c>VCALENDAR</c>
<c>ICAL:vcalendar</c>
<c><xref target="schema"/> # 3.6</c>
</texttable>
</section>
<section title="Components (2445bis 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:</t>
<texttable>
<ttcol>Component</ttcol>
<ttcol>XML element</ttcol>
<ttcol>XML Definition</ttcol>
<c>VEVENT</c>
<c>ICAL:vevent</c>
<c><xref target="schema"/> # 3.6.1</c>
<c>VTODO</c>
<c>ICAL:vtodo</c>
<c><xref target="schema"/> # 3.6.2</c>
<c>VJOURNAL</c>
<c>ICAL:vjournal</c>
<c><xref target="schema"/> # 3.6.3</c>
<c>VFREEBUSY</c>
<c>ICAL:vfreebusy</c>
<c><xref target="schema"/> # 3.6.4</c>
<c>VTIMEZONE</c>
<c>ICAL:vtimezone</c>
<c><xref target="schema"/> # 3.6.5</c>
<c>STANDARD</c>
<c>ICAL:standard</c>
<c><xref target="schema"/> # 3.6.5</c>
<c>DAYLIGHT</c>
<c>ICAL:daylight</c>
<c><xref target="schema"/> # 3.6.5</c>
<c>VALARM</c>
<c>ICAL:valarm</c>
<c><xref target="schema"/> # 3.6.6</c>
</texttable>
</section>
<section title="Properties (2445bis section 3.5)">
<t>iCalendar properties , whether they apply to the VCALENDAR object or to the components, are handled in a consistent way.</t>
<t>iCalendar properties are enclosed in the XML element ICAL:properties.</t>
<t>Each invidivual iCalendar property is represented in XML by an element of the same name as the iCalendar property, but in lowercase. For example, the CALSCALE property is represented in XML by the ICAL:calscale element.</t>
<t>Example:
<figure><artwork><![CDATA[
<?xml version="1.0" encoding="utf-8"?>
<icalendar xmlns="urn:ietf:params:xml:ns:icalendar">
<vcalendar>
<properties>
<calscale>...</calscale>
<version>...</version>
<prodid>...</prodid>
</properties>
<components>
...
</components>
</vcalendar>
</icalendar>
]]></artwork></figure>
</t>
<t>Each property can contain an ICAL:parameters XML element encapsulating any iCalendar 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>
<texttable>
<ttcol>Property</ttcol>
<ttcol>XML element</ttcol>
<ttcol>XML Definition</ttcol>
<c>CALSCALE</c>
<c>ICAL:calscale</c>
<c><xref target="schema"/> # 3.7.1</c>
<c>METHOD</c>
<c>ICAL:method</c>
<c><xref target="schema"/> # 3.7.2</c>
<c>PRODID</c>
<c>ICAL:prodid</c>
<c><xref target="schema"/> # 3.7.3</c>
<c>VERSION</c>
<c>ICAL:version</c>
<c><xref target="schema"/> # 3.7.4</c>
<c>ATTACH</c>
<c>ICAL:attach</c>
<c><xref target="schema"/> # 3.8.1.1</c>
<c>CATEGORIES</c>
<c>ICAL:categories</c>
<c><xref target="schema"/> # 3.8.1.2</c>
<c>CLASS</c>
<c>ICAL:class</c>
<c><xref target="schema"/> # 3.8.1.3</c>
<c>COMMENT</c>
<c>ICAL:comment</c>
<c><xref target="schema"/> # 3.8.1.4</c>
<c>DESCRIPTION</c>
<c>ICAL:description</c>
<c><xref target="schema"/> # 3.8.1.5</c>
<c>GEO</c>
<c>ICAL:geo</c>
<c><xref target="schema"/> # 3.8.1.6</c>
<c>LOCATION</c>
<c>ICAL:location</c>
<c><xref target="schema"/> # 3.8.1.7</c>
<c>PERCENT-COMPLETE</c>
<c>ICAL:percent-complete</c>
<c><xref target="schema"/> # 3.8.1.8</c>
<c>PRIORITY</c>
<c>ICAL:priority</c>
<c><xref target="schema"/> # 3.8.1.9</c>
<c>RESOURCES</c>
<c>ICAL:resources</c>
<c><xref target="schema"/> # 3.8.1.10</c>
<c>STATUS</c>
<c>ICAL:status</c>
<c><xref target="schema"/> # 3.8.1.11</c>
<c>SUMMARY</c>
<c>ICAL:summary</c>
<c><xref target="schema"/> # 3.8.1.12</c>
<c>COMPLETED</c>
<c>ICAL:completed</c>
<c><xref target="schema"/> # 3.8.2.1</c>
<c>DTEND</c>
<c>ICAL:dtend</c>
<c><xref target="schema"/> # 3.8.2.2</c>
<c>DUE</c>
<c>ICAL:due</c>
<c><xref target="schema"/> # 3.8.2.3</c>
<c>DTSTART</c>
<c>ICAL:dtstart</c>
<c><xref target="schema"/> # 3.8.2.4</c>
<c>DURATION</c>
<c>ICAL:duration</c>
<c><xref target="schema"/> # 3.8.2.5</c>
<c>FREEBUSY</c>
<c>ICAL:freebusy</c>
<c><xref target="schema"/> # 3.8.2.6</c>
<c>TRANSP</c>
<c>ICAL:transp</c>
<c><xref target="schema"/> # 3.8.2.7</c>
<c>TZID</c>
<c>ICAL:tzid</c>
<c><xref target="schema"/> # 3.8.3.1</c>
<c>TZNAME</c>
<c>ICAL:tzname</c>
<c><xref target="schema"/> # 3.8.3.2</c>
<c>TZOFFSETFROM</c>
<c>ICAL:tzoffsetfrom</c>
<c><xref target="schema"/> # 3.8.3.3</c>
<c>TZOFFSETTO</c>
<c>ICAL:tzoffsetto</c>
<c><xref target="schema"/> # 3.8.3.4</c>
<c>TZURL</c>
<c>ICAL:tzurl</c>
<c><xref target="schema"/> # 3.8.3.5</c>
<c>ATTENDEE</c>
<c>ICAL:attendee</c>
<c><xref target="schema"/> # 3.8.4.1</c>
<c>CONTACT</c>
<c>ICAL:contact</c>
<c><xref target="schema"/> # 3.8.4.2</c>
<c>ORGANIZER</c>
<c>ICAL:organizer</c>
<c><xref target="schema"/> # 3.8.4.3</c>
<c>RECURRENCE-ID</c>
<c>ICAL:recurrence-id</c>
<c><xref target="schema"/> # 3.8.4.4</c>
<c>RELATED-TO</c>
<c>ICAL:related-to</c>
<c><xref target="schema"/> # 3.8.4.5</c>
<c>URL</c>
<c>ICAL:url</c>
<c><xref target="schema"/> # 3.8.4.6</c>
<c>UID</c>
<c>ICAL:uid</c>
<c><xref target="schema"/> # 3.8.4.7</c>
<c>EXDATE</c>
<c>ICAL:exdate</c>
<c><xref target="schema"/> # 3.8.5.1</c>
<c>RDATE</c>
<c>ICAL:rdate</c>
<c><xref target="schema"/> # 3.8.5.2</c>
<c>RRULE</c>
<c>ICAL:rrule</c>
<c><xref target="schema"/> # 3.8.5.3</c>
<c>ACTION</c>
<c>ICAL:action</c>
<c><xref target="schema"/> # 3.8.6.1</c>
<c>REPEAT</c>
<c>ICAL:repeat</c>
<c><xref target="schema"/> # 3.8.6.2</c>
<c>TRIGGER</c>
<c>ICAL:trigger</c>
<c><xref target="schema"/> # 3.8.6.3</c>
<c>CREATED</c>
<c>ICAL:created</c>
<c><xref target="schema"/> # 3.8.7.1</c>
<c>DTSTAMP</c>
<c>ICAL:dtstamp</c>
<c><xref target="schema"/> # 3.8.7.2</c>
<c>LAST-MODIFIED</c>
<c>ICAL:last-modified</c>
<c><xref target="schema"/> # 3.8.7.3</c>
<c>SEQUENCE</c>
<c>ICAL:sequence</c>
<c><xref target="schema"/> # 3.8.7.4</c>
<c>REQUEST-STATUS</c>
<c>ICAL:request-status</c>
<c><xref target="schema"/> # 3.8.8.3</c>
</texttable>
<section title="Special Cases for Properties">
<t>Some properties in iCalendar can contain "structured" value data. This includes lists of "standard" value types, as well as values with specific "fields". In XML, these "structured" values are represented as separate XML elements in various ways for ease of processing using standard XML tools.</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 XML 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>ICAL:categories</c>
<c><xref target="schema"/> # 3.8.1.2</c>
<c>RESOURCES</c>
<c>ICAL:resources</c>
<c><xref target="schema"/> # 3.8.1.10</c>
<c>FREEBUSY</c>
<c>ICAL:freebusy</c>
<c><xref target="schema"/> # 3.8.2.6</c>
<c>EXDATE</c>
<c>ICAL:exdate</c>
<c><xref target="schema"/> # 3.8.5.1</c>
<c>RDATE</c>
<c>ICAL: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 XML, the value for the ICAL:geo element is represented by an ICAL:value element containing an ICAL:latitude element and an ICAL:longitude element, each of which contain text values representing the FLOAT values. See <xref target="schema"/> # 3.8.1.6.</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 (optional) additional data.</t>
<t>In XML, the value for the ICAL:request-status element is represented by an ICAL:value element containing an ICAL:code element, and iCAL:description element, and optionally and ICAL:data element, each of which contain the corresponding TEXT values. See <xref target="schema"/> # 3.8.8.3.</t>
</section>
</section>
</section>
<section anchor="parameters" title="Parameters (2445bis section 3.4)">
<t>iCalendar parameters are enclosed in the XML element ICAL:parameters which optionally occurs once in each property XML element.</t>
<t>Each invidivual iCalendar parameter is represented in XML by an element of the same name as the iCalendar parameter, but in lowercase. For example, the PARTSTAT parameter is represented in XML by the ICAL:partstat element.</t>
<t>Example:
<figure><artwork><![CDATA[
<?xml version="1.0" encoding="utf-8"?>
<icalendar xmlns="urn:ietf:params:xml:ns:icalendar">
<vcalendar>
...
<components>
...
<attendee>
<parameters>
<partstat>NEEDS-ACTION</partstat>
</parameters>
...
</components>
</vcalendar>
</icalendar>
]]></artwork></figure>
</t>
<t>Each parameter contains either text, or one or more child XML elements representing iCalendar value types.</t>
<texttable>
<ttcol>Parameter</ttcol>
<ttcol>XML element</ttcol>
<ttcol>XML Definition</ttcol>
<c>ALTREP</c>
<c>ICAL:altrep</c>
<c><xref target="schema"/> # 3.2.1</c>
<c>CN</c>
<c>ICAL:cn</c>
<c><xref target="schema"/> # 3.2.2</c>
<c>CUTYPE</c>
<c>ICAL:cutype</c>
<c><xref target="schema"/> # 3.2.3</c>
<c>DELEGATED-FROM</c>
<c>ICAL:delegated-from</c>
<c><xref target="schema"/> # 3.2.4</c>
<c>DELEGATED-TO</c>
<c>ICAL:delegated-to</c>
<c><xref target="schema"/> # 3.2.5</c>
<c>DIR</c>
<c>ICAL:dir</c>
<c><xref target="schema"/> # 3.2.6</c>
<c>ENCODING</c>
<c>ICAL:encoding</c>
<c><xref target="schema"/> # 3.2.7</c>
<c>FMTTYPE</c>
<c>ICAL:fmttype</c>
<c><xref target="schema"/> # 3.2.8</c>
<c>FBTYPE</c>
<c>ICAL:fbtype</c>
<c><xref target="schema"/> # 3.2.9</c>
<c>LANGUAGE</c>
<c>ICAL:language</c>
<c><xref target="schema"/> # 3.2.10</c>
<c>MEMBER</c>
<c>ICAL:member</c>
<c><xref target="schema"/> # 3.2.11</c>
<c>PARTSTAT</c>
<c>ICAL:partstat</c>
<c><xref target="schema"/> # 3.2.12</c>
<c>RANGE</c>
<c>ICAL:range</c>
<c><xref target="schema"/> # 3.2.13</c>
<c>RELATED</c>
<c>ICAL:related</c>
<c><xref target="schema"/> # 3.2.14</c>
<c>RELTYPE</c>
<c>ICAL:reltype</c>
<c><xref target="schema"/> # 3.2.15</c>
<c>ROLE</c>
<c>ICAL:role</c>
<c><xref target="schema"/> # 3.2.16</c>
<c>RSVP</c>
<c>ICAL:rsvp</c>
<c><xref target="schema"/> # 3.2.17</c>
<c>SENT-BY</c>
<c>ICAL:sent-by</c>
<c><xref target="schema"/> # 3.2.18</c>
<c>TZID</c>
<c>ICAL:tzid</c>
<c><xref target="schema"/> # 3.2.19</c>
</texttable>
<section title="VALUE parameter">
<t>iCalendar defines a VALUE parameter (Section 3.2.20 of <xref target="I-D.ietf-calsify-rfc2445bis"/>. This parameter is not mapped to an XML element. Instead, the value type is handled by having different XML elements for each value, and these appear inside of ICAL:property elements. Thus, when converting from iCalendar to XML, any VALUE parameters are skipped. When converting from XML into iCalendar, the appropriate VALUE 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 (2445bis section 3.3)">
<t>iCalendar value types are mapped into XML elements with a matching name in all lowercase. In some cases, iCalendar defines "structured" values and these are mapped into separate child elements in each value element, as described by the simple DTD definitions below.</t>
<t>Some properties allow for multiple values and these are represented by separate matching value XML elements.</t>
<section title="Binary (2445bis section 4.3.1)">
<t><list style="hanging">
<t hangText="Description:">iCalendar BINARY property values are represented by the ICAL:binary XML element. The content of the element is base64 encoded data. 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>
</list></t>
</section>
<section title="Boolean (2445bis section 4.3.2)">
<t><list style="hanging">
<t hangText="Description:">iCalendar BOOLEAN property values are represented by the ICAL:boolean XML element. The content of the element is text containing either of "TRUE" or "FALSE".</t>
<t hangText="XML Definition:"><xref target="schema"/> # 3.3.2</t>
</list></t>
</section>
<section title="Calendar User Address (2445bis section 4.3.3)">
<t><list style="hanging">
<t hangText="Description:">iCalendar CAL-ADDRESS property values are represented by the ICAL:cal-address XML element. The content of the element is a URI.</t>
<t hangText="XML Definition:"><xref target="schema"/> # 3.3.3</t>
</list></t>
</section>
<section title="Date (2445bis section 4.3.4)">
<t><list style="hanging">
<t hangText="Description:">iCalendar DATE property values are represented by the ICAL:date XML element. The content of the element is three child elements representing the year, month and day values in the date.</t>
<t hangText="XML Definition:"><xref target="schema"/> # 3.3.4</t>
</list></t>
</section>
<section title="Date-Time (2445bis section 4.3.5)">
<t><list style="hanging">
<t hangText="Description:">iCalendar DATE-TIME property values are represented by the ICAL:date-time XML element. The content of the element is six child elements representing the year, month, day, hour, minute and second values in the date-time. In addition, an XML attribute is used to indicate whether the date-time value represents a UTC based date-time (represented by a trailing "Z" in the iCalendar value).</t>
<t hangText="XML Definition:"><xref target="schema"/> # 3.3.5</t>
</list></t>
</section>
<section title="Duration (2445bis section 4.3.6)">
<t><list style="hanging">
<t hangText="Description:">iCalendar DURATION property values are represented by the ICAL:duration XML element. The content of the element is various child elements representing the possible combinations of week, day, hour, minute and second values. In addition, an XML attribute is used to indicate whether the duration value represents a positive or negative offset.</t>
<t hangText="XML Definition:"><xref target="schema"/> # 3.3.6</t>
</list></t>
</section>
<section title="Float (2445bis section 4.3.7)">
<t><list style="hanging">
<t hangText="Description:">iCalendar FLOAT property values are represented by the ICAL: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>
</list></t>
</section>
<section title="Integer (2445bis section 4.3.8)">
<t><list style="hanging">
<t hangText="Description:">iCalendar INTEGER property values are represented by the ICAL: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>
</list></t>
</section>
<section title="Period of Time (2445bis section 4.3.9)">
<t><list style="hanging">
<t hangText="Description:">iCalendar PERIOD property values are represented by the ICAL:period XML element. The content of the element is two child elements representing the start date-time and end date-time or positive duration.</t>
<t hangText="XML Definition:"><xref target="schema"/> # 3.3.9</t>
</list></t>
</section>
<section title="Recurrence Rule (2445bis section 4.3.10)">
<t><list style="hanging">
<t hangText="Description:">iCalendar RECUR property values are represented by the ICAL: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>
</list></t>
</section>
<section title="Text (2445bis section 4.3.11)">
<t><list style="hanging">
<t hangText="Description:">iCalendar TEXT property values are represented by the ICAL:text XML element. The content of the element is simple text.</t>
<t hangText="XML Definition:"><xref target="schema"/> # 3.3.11</t>
</list></t>
</section>
<section title="Time (2445bis section 4.3.12)">
<t><list style="hanging">
<t hangText="Description:">iCalendar TIME property values are represented by the ICAL:time XML element. The content of the element is three child elements representing the hour, minute and second values in the time. In addition, an XML attribute is used to indicate whether the time value represents a UTC based time (represented by a trailing "Z" in the iCalendar value).</t>
<t hangText="XML Definition:"><xref target="schema"/> # 3.3.12</t>
</list></t>
</section>
<section title="URI (2445bis section 4.3.13)">
<t><list style="hanging">
<t hangText="Description:">iCalendar URI property values are represented by the ICAL:uri XML element. The content of the element is a URI.</t>
<t hangText="XML Definition:"><xref target="schema"/> # 3.3.13</t>
</list></t>
</section>
<section title="UTC Offset (2445bis section 4.3.14)">
<t><list style="hanging">
<t hangText="Description:">iCalendar UTC-OFFSET property values are represented by the ICAL:utc-offset XML element. The content of the element is two or three child elements representing the hour, minute and (optional) second values in the UTC offset. In addition, an XML attribute is used to indicate whether the offset value represents a positive or negative offset.</t>
<t hangText="XML Definition:"><xref target="schema"/> # 3.3.14</t>
</list></t>
</section>
</section>
<section title="Extensions">
<t>iCalendar extension properties and parameters (ones with an "X-" prefix in their name) are handled in the same way as other properties and parameters: the property or 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 ICAL:x-foo element in XML.</t>
</section>
</section>
<section title='Converting from XML into iCalendar'>
<t>When converting from XML back to iCalendar, any elements in the XML that are not in the "urn:ietf:params:xml:ns:icalendar" namespace MUST be ignored.</t>
<t>When converting component, property and 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="I-D.ietf-calsify-rfc2445bis"/>.</t>
<t>Backslash escaping and line folding MUST be applied to the resulting iCalendar data as required by <xref target="I-D.ietf-calsify-rfc2445bis"/>.</t>
</section>
<section title='Security Considerations' anchor='security'>
<t>This extension does not introduce any new security concerns than those already described in iCalendar.</t>
</section>
<section title='IANA Considerations'>
<t>This document uses one new URN to identify a new XML namespace, and one new media type. The URN conforms to a registry mechanism described in <xref target="RFC3688"/>.</t>
<section title='Namespace Registration' anchor='ns.registration'>
<t>Registration request for the iCalendar namespace: </t>
<t>URI: urn:ietf:params:xml:ns:icalendar </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">
<t>This section defines the MIME media type for use with iCalendar in XML data.
<list style="hanging">
<t hangText="To:">ietf-types@iana.org</t>
<t hangText="Subject:">Registration of media type application/xml+calendar</t>
<t hangText="Type name:">application</t>
<t hangText="Subtype name:">xml+calendar</t>
<t hangText="Required parameters:">none</t>
<t hangText="Optional parameters:">charset, method, component and optinfo as defined for the text/calendar media type</t>
<t hangText="Encoding considerations:">iCalendar data is typically UTF-8 and thus the XML representation will follow that. As a result, for 7-bit transports, data in UTF-8 MUST be encoded in quoted-printable or base64.</t>
<t hangText="Security considerations:">See <xref target='security'/>.</t>
<t hangText="Interoperability considerations:">This media type provides an alternative syntax to 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):">XML data should use "xml" as the file extension.</t>
<t hangText="Macintosh file type code(s):">None specified.</t>
</list>
</t>
<t hangText="Person & email address to contact for further information:">See the "Author's Address" section of this document.</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>
<section title='Acknowledgments'>
<t>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;
&rfc3688;
&id2445bis;
</references>
<!--<references title='Informative References'>
</references>-->
<section anchor="schema" title="Relax NG Schema">
<t>Below is a Relax NG schema for iCalendar in XML. This schema uses the compact notation of Relax NG. The numeric section numbers given in the comments refer to section in <xref target="I-D.ietf-calsify-rfc2445bis"/>. The ordering of elements follows the section ordering of <xref target="I-D.ietf-calsify-rfc2445bis"/>.</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>
<figure><artwork><![CDATA[
# Relax NG Schema for iCalendar in XML
default namespace = "urn:ietf:params:xml:ns:icalendar"
# 3.2 Property Parameters
# 3.2.1 Alternate Text Representation
altrepparam = element altrep { value-uri }
# 3.2.2 Common Name
cnparam = element cn { text }
# 3.2.3 Calendar User Type
cutypeparam = element cutype {
"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 {
"8BIT" |
"BASE64"
}
# 3.2.8 Format Type
fmttypeparam = element fmttype { text }
# 3.2.9 Free/Busy Time Type
fbtypeparam = element fbtype {
"FREE" |
"BUSY" |
"BUSY-UNAVAILABLE" |
"BUSY-TENTATIVE"
}
# 3.2.10 Language
languageparam = element language { 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 = (
"NEEDS-ACTION" |
"ACCEPTED" |
"DECLINED" |
"TENTATIVE" |
"DELEGATED"
)
type-partstat-todo = (
"NEEDS-ACTION" |
"ACCEPTED" |
"DECLINED" |
"TENTATIVE" |
"DELEGATED" |
"COMPLETED" |
"IN-PROCESS"
)
type-partstat-jour = (
"NEEDS-ACTION" |
"ACCEPTED" |
"DECLINED"
)
# 3.2.13 Recurrence Identifier Range
rangeparam = element range {
"THISANDFUTURE"
}
# 3.2.14 Alarm Trigger Relationship
trigrelparam = element related {
"START" |
"END"
}
# 3.2.15 Relationship Type
reltypeparam = element reltype {
"PARENT" |
"CHILD" |
"SIBLING"
}
# 3.2.16 Participation Role
roleparam = element role {
"CHAIR" |
"REQ-PARTICIPANT" |
"OPT-PARTICIPANT" |
"NON-PARTICIPANT"
}
# 3.2.17 RSVP Expectation
rsvpparam = element rsvp {
"TRUE" |
"FALSE"
}
# 3.2.18 Sent By
sentbyparam = element sent-by { value-cal-address }
# 3.2.19 Time Zone Identifier
tzidparam = element tzid { text }
# 3.3 Property Value Data Types
# 3.3.1 BINARY
value-binary = element binary { text }
# 3.3.2 BOOLEAN
value-boolean = element boolean {
("TRUE" | "FALSE")
}
# 3.3.3 CAL-ADDRESS
value-cal-address = element cal-address { text }
# 3.3.4 DATE
value-date = element date {
element year { text },
element month { text },
element day { text }
}
# 3.3.5 DATE-TIME
value-date-time = element date-time {
attribute utc { "yes" | "no" },
element year { text },
element month { text },
element day { text },
element hour { text },
element minute { text },
element second { text }
}
# 3.3.6 DURATION
value-duration = element duration {
attribute sign { "+" | "-" },
(
(
element day { text },
element hour { text }?,
element minute { text }?,
element second { text }?
) |
(
element hour { text },
element minute { text }?,
element second { text }?
) |
(
element minute { text },
element second { text }?
) |
(
element second { text }
) |
element week { text }
)
}
# 3.3.7 FLOAT
value-float = element float { text }
# 3.3.8 INTEGER
value-integer = element integer { text }
# 3.3.9 PERIOD
value-period = element period {
value-date-time,
(
value-date-time |
value-duration
)
}
# 3.3.10 RECUR
value-recur = element recur {
type-freq,
(type-until | type-count)?,
element interval { text }?,
element bysecond { text }*,
element byminute { text }*,
element byhour { text }*,
type-byday*,
type-bymonthday*,
type-byyearday*,
type-byweekno*,
element bymonth { text }*,
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 { text }
type-weekday = (
"SU" |
"MO" |
"TU" |
"WE" |
"TH" |
"FR" |
"SA"
)
type-byday = element byday {
element ordwk {
text
}?,
element weekday { type-weekday }
}
type-bymonthday = element bymonthday {
text
}
type-byyearday = element byyearday {
text
}
type-byweekno = element byweekno {
text
}
type-bysetpos = element bysetpos {
text
}
# 3.3.11 TEXT
value-text = element text { text }
# 3.3.12 TIME
value-time = element time {
attribute utc { "yes" | "no" },
element hour { text },
element minute { text },
element second { text }
}
# 3.3.13 URI
value-uri = element uri { text }
# 3.3.14 UTC-OFFSET
value-utc-offset = element utc-offset {
attribute sign { "+" | "-" },
element hour { text },
element minute { text },
element second { text }?
}
# 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 }?,
value-text
}
# 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 value {
element latitude { text },
element longitude { text }
}
}
# 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-repeat = element repeat {
(
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 value {
element code { text },
element description { text },
element data { text }?
}
}
]]></artwork></figure>
</section>
<section title="XML Stylesheet for conversion to iCalendar">
<t>TO DO</t>
</section>
<section title="Example">
<t>Below is some example iCalendar data and its representation in XML as defined by this specification.</t>
<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">
<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 utc='yes'>
<year>2008</year><month>2</month><day>5</day>
<hour>19</hour><minute>12</minute><second>24</second>
</date-time>
</dtstamp>
<dtstart>
<date>
<year>2008</year><month>10</month><day>6</day>
</date>
</dtstart>
<summary>
<text>Planning meeting</text>
</summary>
<uid>
<text>4088E990AD89CB3DBB484909</text>
</uid>
</properties>
</vevent>
</components>
</vcalendar>
</icalendar>
]]></artwork></figure>
</section>
</section>
<!--
<section title='Change History (to be removed prior to publication as an RFC)'>
<t>Changes from -00:</t>
<list style='numbers'>
<t>Updated to 4918 reference.</t>
</list>
</section>
-->
</back>
</rfc>
| PAFTECH AB 2003-2026 | 2026-04-24 03:00:26 |