martes, 9 de noviembre de 2010

iCalendar (I)

iCalendar es un estándar para el intercambio de información de eventos, tareas y reuniones de calendarios, el estándar está descrito en el RFC2445 y se complementa con el RFC2446.

En el RFC2445 se detalla la manera cómo se debe plasmar la información de eventos, tareas y reuniones para que puedan ser interpretados por igual en distintos clientes de calendarios; gracias a esto, Google Calendar puede interpretar los calendarios de iCal y viceversa.

Como se pueden imaginar, analizar de manera detallada estos documentos en un blog es una locura, por eso, en esta serie de artículos sólo hablaré sobre el RFC2445.

Antes de empezar, me gustaría aclarar la diferencia de 2 conceptos que aparecen mucho en el RFC2445: “componente” y “propiedades; Las diferencias entre estos dos conceptos son muy simples:

  1. Un componente puede anidar otros componentes.
  2. Un componente puede contener propiedades.
  3. Los componentes inician con el prefijo BEGIN y terminan con el prefijo END

ejemplo:

BEGIN:
...
END:

Bueno, comencemos con el componente raíz de un iCalendar.
Componente VCALENDAR

Es el elemento raíz de un iCalendar. En él, se describen las características de un calendario como pueden ser la zona horaria, la versión del estándar iCalendar utilizado, el identificador del productor (PRODID), etc..

Los propiedades más importantes son:

  1. PROID : Especifica el ID del programa que ha producido el iCalendar, el formato de esta propiedad suele ser “-//NOMBRE_EMPRESA/IDENTIFICADOR_APP//EN”, si desea una mejor explicación y esta dispuesto a pagar por ella lea la ISO_9070.
  2. VERSION: Especifica la versión de iCalendar utilizada, el valor “2.0” es el valor utilizado por el RFC2445.
  3. CALSCALE : Indica el tipo de calendario, “GREGORIAN” es el valor por defecto e indica que el calendario es de tipo gregoriano.
  4. X-WR-CALNAME: No es una propiedad estándar (las propiedades y componentes no estándar empiezan con el prefijo “X-”) pero es utilizada por MS Outlook y Google Calendar para indicar el nombre del calendario.

De los componentes de iCalendar, el componente VCALENDAR es uno de los mas sencillos, con dar valor a estas propiedades ud ya ha suministrado la información mínima para que un cliente iCalendar pueda entender la información de los eventos, tareas y reuniones que puede contener un componente VCALENDAR.

Ejemplo:

BEGIN:VCALENDAR
PRODID:-//Acme company//Acme Calendar x.y.z//EN
VERSION:2.0
CALSCALE:GREGORIAN
X-WR-CALNAME:Nombre de calendario
...
END:VCALENDAR


NOTA: Existen iniciativas que utilizan el estándar iCalendar para realizar otras operaciones distintas al intercambios de eventos, por ejemplo, tzurl.org utiliza el componente VCALENDAR para suministrar información actualizada sobre las zonas horarias mundo.

Componente VEVENT

Es un componente contenido dentro de un VCALENDAR, la finalidad de este componente es suministrar información de un evento, como pude ser el lugar, la fecha y hora de inicio y final, lógica de repetición, etc...

Las propiedades mas importantes:

  1. SUMMARY: Descripción corta del evento (esta información es suministrada por el usuario en una aplicación de calendario).
  2. UID: Identificador único del evento dentro del calendario
  3. TZID: Identificador de la zona horaria.
  4. CREATED: Fecha en la que fue creado el evento (no confundir con la fecha del evento)
  5. LAST-MODIFIED:Fecha de la ultima molificación de este evento.
  6. DESCRIPTION: Descripción del evento (esta información es suministrada por el usuario en una aplicación de calendario).
  7. DTSTART: Fecha/Hora en la que se produce el evento, por defecto se debe suministrar el valor de fecha/hora en el formato UTC que se describe en el ISO 8601
  8. DTEND:Fecha/Hora o en la que se produce el evento, por defecto se debe suministrar el valor de fecha/hora en el formato UTC que se describe en el ISO 8601
  9. SEQUENCE: Numero de revisión del evento, es un secuencial que describe las modificaciones que se realizan sobre el evento

Ejemplo de un evento simple:

BEGIN:VEVENT
SUMMARY:Evento simple
UID:ACME-02882072aecb5d3012aeccadYYYYYYY
SEQUENCE:0
TZID:Europe/Madrid
CREATED:20100831T220000Z
LAST-MODIFIED:20100831T220000Z
DESCRIPTION:Comentario del evento
LOCATION:Lugar
DTSTART:20100901T172200
DTEND:20100901T185200
END:VEVENT

En este ejemplo se define un evento con zona horaria “Europe/Madrid” y el evento inicia el 01/09/2010 17:22 y termina el 01/09/2010 18:52

Eventos de todo el día

Los eventos de todo el día se debe indicar solo la fecha de inicio (DTSTART) con un valor de fecha, con un ejemplo se entiende mejor

BEGIN:VEVENT
DTSTAMP:20100907T152733Z
SUMMARY:Evento todo el dia
UID:ACME-402882072aecb5d3012aeccf00XXXXX
SEQUENCE:0
TZID:Europe/Madrid
CREATED:20100906T220000Z
LAST-MODIFIED:20100906T220000Z
DESCRIPTION:Todo el dia ocupado
DTSTART;VALUE=DATE:20100907
END:VEVENT

Este es un ejemplo de un evento marcado como todo el día, la diferencia con el ejemplo anterior es muy sutil, este tipo de eventos no posee fecha de finalización (DTEND) y en su fecha de inicio (DTSTART) solo se indica la fecha de la forma DTSTART;VALUE=DATE:yyyymmdd.

No hay comentarios: