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) :
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 :
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)