Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Mon livre « Cyberstructure »

Ève

RFC 7265: jCal: The JSON format for iCalendar

Date de publication du RFC : Mai 2014
Auteur(s) du RFC : P. Kewisch (Mozilla), C. Daboo (Apple), M. Douglass (RPI)
Chemin des normes
Réalisé dans le cadre du groupe de travail IETF jcardcal
Première rédaction de cet article le 1 juin 2014


Le format iCalendar permet de décrire de manière standard, compréhensible par tous les logiciels de gestion d'agenda, les événements, rendez-vous, tâches à accomplir, etc. Très connu et largement déployé, il est présent à de nombreux endroits. iCalendar est à la fois un modèle de données (décrivant ce qu'on stocke) et une syntaxe particulière. Des syntaxes alternatives sont possibles et ce nouveau RFC en propose une, fondée sur JSON. Elle se nomme donc jCal.

Il y avait déjà une autre syntaxe alternative, fondée sur XML, dans le RFC 6321. Celle-ci s'inscrit dans la mode JSON actuelle (RFC 8259) et promet de rendre le vieux format iCalendar plus accessible pour les applications Web, notamment celles écrites en JavaScript. Notez qu'il existe un autre format en JSON, le jsCalendar du RFC 8984, qui repose sur un modèle de données différent.

iCalendar est normalisé dans le RFC 5545. Il a plusieurs points techniques en commun avec le format vCard de description de « cartes de visite » virtuelles, normalisé dans le RFC 6350 et c'est pour cela que le même groupe de travail à l'IETF a normalisé la version JSON de iCalendar (dans ce RFC 7265) et la version JSON de vCard (RFC 7095). Cette dernière, jCard, a essuyé les plâtres et jCal lui doit beaucoup et lui ressemble énormément.

La section 1 du RFC résume le cahier des charges du projet jCal (identique à celui du RFC 6321 pour xCal) :

  • Possibilité de conversion iCalendar -> jCal et retour, sans perte sémantique,
  • Pas d'impératif de préservation de l'ordre des éléments,
  • Maintien du modèle de données de iCalendar,
  • Les futures extensions de iCalendar devront pouvoir être intégrées naturellement, sans nécessiter un nouveau RFC jCal.

La section 3 est le gros morceau du RFC, indiquant comment convertir les iCalendar actuels en jCal. iCalendar a quelques particularités syntaxiques. Par exemple, les lignes trop longues peuvent être repliées, et certaines valeurs ont besoin d'échappement. Pour passer à jCal, on déplie toutes les lignes et on retire les échappements. Puis on applique les échappements de JSON.

Un document iCalendar est une suite d'objets iCalendar (a iCalendar stream) qu'on transforme en un tableau JSON, dont chaque élément est un objet iCalendar. Ce simple objet iCalendar, qui définit un événement Planning meeting :

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

va être traduit ainsi en jCal (exemple tiré de l'annexe B du RFC) :

["vcalendar",
  [
    ["calscale", {}, "text", "GREGORIAN"],
    ["prodid", {}, "text", "-//Example Inc.//Example Calendar//EN"],
    ["version", {}, "text", "2.0"]
  ],
  [
    ["vevent",
      [
        ["dtstamp", {}, "date-time", "2008-02-05T19:12:24Z"],
        ["dtstart", {}, "date", "2008-10-06"],
        ["summary", {}, "text", "Planning meeting"],
        ["uid", {}, "text", "4088E990AD89CB3DBB484909"]
      ],
      []
    ]
  ]
]

La section 4 explique, elle, les détails de l'opération inverse, convertir du jCal en iCalendar.

Ce nouveau format jCal a désormais son propre type MIME, application/calendar+json (et pas jcal+json, attention).

Parmi les mises en œuvre de jCal, on note :


Téléchargez le RFC 7265

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)