hcalendar-brainstorming-fr
Brainstorming hCalendar
to-do-fr : cette page pourrait simplement être nettoyée et un peu mieux réorganisée. - Tantek
Cette page est destinée à tester et documenter les moyens d'utiliser hCalendar qui peut impliquer plus de détails qu'actuellement dans la spécification.
Si vous avez une question, vérifiez svp les FAQ hCalendar, et posez tout d'abord vos questions sur la liste de discussion.
Auteurs
- (traduction en cours à vérifier -- Christophe Ducamp)
publication hCalendar des bonnes pratiques
Calendriers événements tabulaires
Beaucoup de calendriers sont postés sous forme tabulaire, là où les titres sur les colonnes et les lignes ont des valeurs de propriété qui s'appliquent aux cellules qui elles-mêmes sont des événements. Par exemple beaucoup de conférences ont beaucoup d'empreintes et postent des noms d'endroits (LOCATION) comme des titres de colonnes et des emplacements horaires (DTSTART, DTEND) comme titres de lignes.
Voilà une description de la façon dont parser ces types de balisage à l'intérieur d'un flux iCalendar. Ceci a été implémenté dans X2V et déployé.
TO DO : documenter un "Comment Faire" pour les éditeurs cherchant à baliser les listes tabulaires d'événements.
Pour permettre de baliser cela avec hCalendar, nous devons parser des attributs sémantiques supplémentaires provenant du HTML4.
Au moment de parser, en plus du cas spécial des règles documenté dans hcard-parsing :
- Si l'élément est une cellule de données tableau
<td>
, alors :- parsez sont attribut "headers" comme un ensemble d'espace distinct des IDs locales
- trouvez les éléments
<td>
et<th>
référencés par ces IDs (appelez-les cellules titres) et considérez-les comme parties de l'élément étant parsé comme suit :- Traitez les cellules d'en-tête comme des enfants de l'élément, triées par l'ordre des ids dans leurs attributs "headers", suivies immmédiatement par le dernier noeud enfant (texte ou élément). (L'idée fondamentale est que le contenu de ces cellules en-tête est utilisée pour construire le VEVENT, mais secondairement pour (AFTER) le contenu dans la cellule de données elle-même, de façon que la cellule de données puisse personnaliser/écraser la partie des données dans l'en-tête, par ex. si la cellule d'en-tête incluait à la fois l'heure de départ et le lieu, et l'événement étant géré à un endroit différent).
- Parsez l'attribut "axis" d'un en-tête comme une liste de catégories séparées par des virgules. Ces catégories doivent être utilisées vers (et avant) n'importe quels noms de classes sur cette cellule d'en-tête pour déterminer si c'est une propriété du VEVENT.
Exemple du monde dans la jungle d'un événement tabulaire balisé de cette manière : Web Essentials 05 Session program.
Remarque : Nous avons acquis une epxpérience suffisante avec ça à la fois pour le parsage hCard et le parsage hCalendar parce que les en-têtes de cellules de tableau et la technique des attributs sur l'axe est générique pour tous les microformats de classe de noms. Le cas d'utilisation spécifique d'usage sur la manière de publier un affichage tabulaire d'événéments devraient être documenté dans publication hcalendar. Tantek
hCard locations
Dans iCalendar (et de ce fait hCalendar), la propriété LOCATION est juste une chaîne texte. En pratique néanmoins, beaucoup de contenus d'événements contiennent quelque quantité de structure pour le lieu, souvent un endroit spécifique avec un nom, une adresse, etc. Les lieux sont souvent des organisations et de ce fait propices à être balisés sous hCards.
En prenant l'exemple à partir de la spécification hCalendar :
<span class="vevent"> <a class="url" href="http://www.web2con.com/"> <span class="summary">Web 2.0 Conference</span>: <abbr class="dtstart" title="2005-10-05">October 5</abbr>- <abbr class="dtend" title="2005-10-08">7</abbr>, at the <span class="location">Argent Hotel, San Francisco, CA</span> </a> </span>
Clairement "Argent Hotel" est un lieu, et de ce fait pourrait être balisé sous une hCard en lui-même :
<span class="location vcard"> <span class="fn org">Argent Hotel</span>, <span class="adr"><span class="locality">San Francisco</span>, <span class="region">CA</span></span> </span>
De ce fait dans le context d'un vevent entier cet exemple deviendrait :
<span class="vevent"> <a class="url" href="http://www.web2con.com/"> <span class="summary">Web 2.0 Conference</span>: <abbr class="dtstart" title="2005-10-05">October 5</abbr>- <abbr class="dtend" title="2005-10-08">7</abbr>, at the <span class="location vcard"> <span class="fn org">Argent Hotel</span>, <span class="adr"><span class="locality">San Francisco</span>, <span class="region">CA</span></span> </span> </a> </span>
L'avantage de baliser le lieu avec une sémantique explicite hCard fait que cela permet une bien meilleure identification des lieux des événements.
Pour un exemple du vrai monde en pratique voir l'excellente page événement du SXSW 2006 de Jeremy Keith : http://austin.adactio.com/ où tous les événements contiennent des lieux balisés sous des hCards avec des propriétés geo qui aident ensuite à situer les endroits précis sur une carte.
Note : Nous avons maintenant suffisamment d'expérience avec cela pour le formaliser dans hCalendar publication. Tantek
hCard attendees
Eu égard à représenter RFC2445 4.8.4.1 Attendee (propriété ATTENDEE), et la RFC2445 4.2.16 Participation Role (ROLE type), utilisant un exemple du vrai monde pour développer une proposition en brainstorming pour savoir comment utiliser respectivement les propriétés respectives de hCalendar attendee
et la sous-propriété role
.
Beaucoup d'événements en ligne (par ex. at http://upcoming.org/) indiquent qui est en train de participer à un événement, et en fait, qui est en train de "suivre" dans ce cas. Alors que la RFC2445 dit d'utiliser une "calendar address" (en fait une adresse e-mail) pour la propriété "ATTENDEE", elle n'a pas suffisamment de crochets pour faire qu'une hCard fonctionne à la place (DIR pour l'URL vers l'info de contact). De ce fait les attendees hCalendar devraient être balisés avec hCard de façon que la sémantique totale soit charriée.
par ex pour http://upcoming.org/event/152831/
Pour les <span>s qui suivent les titres "Attending" sur cette page
<span class="attendee vcard"> <a class="dynavatar_link" id="user_48265" href="http://upcoming.org/user/48265/"> <img id="image_cbe16d4252b4b1aab58c787379d130f552994da2" src="http://static.flickr.com/45/buddyicons/86708053%40N00.jpg" align="" valign="" height="12" width="12" border="0" class="avatar logo" style="padding: 2px;" /> </a></span> <span> <a class="friend url nickname" rel="friend" id="user_48265" title="Attending since Feb 15, 2007 02:15 PM" href="http://upcoming.org/user/48265/"> CPERIN</a> </span><br />
et pour les <span>s qui suivent le titre WATCHING
<span class="attendee vcard"><a class="dynavatar_link" id="user_29960" href="http://upcoming.org/user/29960/"><img id="image_2980a4eb9e608adc0341b318dfea501c5fed6621" src="http://static.flickr.com/16/buddyicons/39472722%40N00.jpg" align="" valign="" height="12" width="12" border="0" class="avatar logo" style="padding: 2px;" /></a></span><span><a class="friend url nickname" rel="friend" id="user_29960" title="Watching since Feb 15, 2007 02:26 PM" href="http://upcoming.org/user/29960/">cee-dub</a><abbr class="role" title="non-participant"></abbr></span><br />
et je *sais* que l'<abbr class="role" title="non-participant"></abbr> n'est pas une meilleure pratique parce que c'est de la métadonnée cachée, mais c'est *juste à côté* du texte du titre de l'ancre qui dit "Watching" aussi ceci est au moins *close*.
et ROLE=NON-PARTICIPANT
est la sémantique la plus proche dans la RFC2445 iCalendar vers "watching" - "NON-PARTICIPANT" est défini comme "Indicates a participant who is copied for information purposes only" qui sonne pour moi comme "watching". Tantek 19:34, 23 Feb 2007 (PST)
Chevauchement propriété Role
Tant vCard et iCalendar contiennent le terme ROLE. Leurs définitions sont suffisamment similaires pour imaginer un télécospage.
Par conséquent ce qui suite est proposé :
- La propriété "role" hCard et la sous-propriété "role" hCalendar de l'"attendee" (et n'importe quelle autre applicable) sont considérés équivalentes. Ceci est en fait une déclaration explicite du statu quo et de clarifiation dans le contexte de la proposition ci-dessus pour utiliser hCard afin de baliser les détails d'un participant à un événement hCalendar.
- les applications consommatrices de hCard PEUVENT ignorer les valeurs suivantes de propriété "role", parce que de telles valeurs s'appliquent probablement uniquement au contexte d'un participant à un événement hCalendar, et probablement n'indiquent pas le rôle de hCard en général. Les valeurs sont montrées en LETTRES CAPITALES selon la convention extraite de la RFC2445 mais ne sont pas sensibles à la casse selon les conventions hCard/hCalendar pour les valeurs de propriétés énumérées.
CHAIR
REQ-PARTICIPANT
OPT-PARTICIPANT
NON-PARTICIPANT
- les auteurs de hCalendar DOIVENT OMETTRE la valeur role "REQ-PARTICIPANT" pour la hCard 'un participant hCalendar, parce que :
- c'est plus simple/non nécessaire - "REQ-PARTICIPANT" est la valeur par défaut pour la valeur de sous-propriété "role" et de ce fait toute application conforme consommant du hCalendar présumerait cela par défaut pour toutes les hCards de tous les "attendee".
- Cela aidera à éviter à polluer les applications existantes consommatrices de hCard.
- les applications consommant des hCalendar DOIVENT IGNORER les valeurs role qui sont à l'extéireur de la liste ci-dessus de quatre valeurs.
bonnes pratiques génération iCalendar
Avec les quatre propriétés de base, vous pouvez définir des propriétés additionnelles à travers l'utilisation de la propriété x-prop. Pour les bonnes pratiques pour les transformateurs de hCal vers iCal, il serait utile si l'application de transformation ajoutait les propriétés suivante x-* :
X-FROM-URL
- X-FROM-URL. The value of this property would be the URL of the page where the iCal representation was generated.
X-FROM-URL:http://example.com/page-containing-hCal-encoding.html
Note: We have gained sufficient experience with this that we should formalize this in hcalendar-parsing. Tantek
X-WR-CALNAME
- X-WR-CALNAME. iCal.app recognizes this property as the "calendar name" for subscribed calendars. Thus transforming applications *should* take the
<title>...</title>
from the page being parsed, optionally append " events", and use that value for the X-WR-CALNAME property in the resulting feed. E.g. if the page had<title>Example Home Page</title>
then the .ics output should have as part of the vcalendar object:
X-WR-CALNAME:Example Home Page
Note: We have gained sufficient experience with this that we should formalize this in hcalendar-parsing. Tantek
exemples iCalendar dans hCalendar
This is a growing example case written in iCal format and transformed to the corresponding XHTML. These conversions are open to community input. See exemples hCalendar for current work.
BEGIN:VEVENT CATEGORIES:foo,bar SUMMARY: Short Title DESCRIPTION: Full Description DTSTART;VALUE=DATE:20040101 DTEND:20040101T235959Z RRULE:FREQ=YEARLY;UNTIL=20080102T000000Z URL;WORK:http://example.com ATTENDEE;ROLE=CHAIR:MAILTO:JohnDoe@example.com GEO:37.386013;-122.082932 END:VEVENT
<p class="vevent"> <!-- @@ how to deal with Whitespace issues in lists 'foo, bar' --> Categories: <ul class="categories"> <li>foo</li> <li>bar</li> </ul> <a href="http://example.com" class="summary">Short Title</a> <span class="description">description</span> <span class="geo"><span class="Lat">37.386013</span> <span class="Lon">-122.082932</span></span> <!-- This currently does not take into consideration the VALUE=DATE --> <!-- The transforming application could attempt to detect the proper format and add params as needed? --> Date: <em class="dtstart">20040101</em> - <em class="dtend">20040101T235959Z</em> <!-- any thoughts to better encode attendee --> <!-- the ROLE must be of a known type, but one of type is x-name (user-specified) --> <!-- therefore there is no solid way to know "chair" refers to a ROLE parameter --> <a class="attendee chair" href="mailto:JohnDoe@example.com">John Doe</a> <!-- this messy, but works. Is there a better way? --> <p class="rrule">The event will be held <span class="freq">yearly</span> until <span class=""until">20080102T000000Z</span>.</p> </p>
@@-need to look at nested tag examples
XHTML <span class="description"><span class="summary">Short Title</span> to a longer article</span> vCal SUMMARY:Short Title DESCRIPTION:Short Title to a longer article
Exemples extraits de la RFC 2445
- These examples are now all available on exemples hCalendar.
With the abbr's title attribute being used rather than the node value, the actual data could vary and still represent the same vcalendar.
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//hacksw/handcal//NONSGML v1.0//EN BEGIN:VEVENT DTSTART:19970714T170000Z DTEND:19970715T035959Z SUMMARY:Bastille Day Party END:VEVENT END:VCALENDAR
<span class="vcalendar"> <span class="vevent"> <abbr class="dtstart" title="19970714T170000Z">July 14th</abbr> <abbr class="dtend" title="19970715T035959Z"></abbr> <span class="summary">Bastille Day Party</span> </span> </span>
traitement UID
The UID in iCal is represented in HTML as the id attribute in these examples. Any valid id in HTML is a valid UID in iCal, but not the contrapositive, a valid UID is NOT a valid HTML id. HTML ids can only start with a letter, not a number.
BEGIN:VEVENT UID:19970901T130000Z-123401@host.com DTSTAMP:19970901T1300Z DTSTART:19970903T163000Z DTEND:19970903T190000Z SUMMARY:Annual Employee Review CLASS:PRIVATE CATEGORIES:BUSINESS,HUMAN RESOURCES END:VEVENT
<span class="vcalendar"> <span class="vevent" id="19970901T130000Z-123402@host.com"> <abbr class="dtstamp" title="19970901T1300Z"></abbr> <abbr class="dtstart" title="19970903T163000Z">September 3rd, 4:30pm</abbr>- <abbr class="dtend" title="19970903T190000Z">7:00pm</abbr> <span class="summary">Annual Employee Review</span> <span class="class">private</span> <ul class="categories"> <li>BUSINESS</li> <li>HUMAN RESOURCES</li> </ul> </span> </span>
BEGIN:VCALENDAR BEGIN:VEVENT UID:19970901T130000Z-123402@host.com DTSTAMP:19970901T1300Z DTSTART:19970401T163000Z DTEND:19970402T010000Z SUMMARY:Laurel is in sensitivity awareness class. CLASS:PUBLIC CATEGORIES:BUSINESS,HUMAN RESOURCES TRANSP:TRANSPARENT END:VEVENT END:VCALENDAR
<span class="vcalendar"> <span class="vevent" id="19970901T130000Z-123402@host.com"> <abbr class="dtstamp" title="19970901T1300Z"></abbr> <abbr class="dtstart" title="19970401T163000Z">April 1st 4:30pm</abbr>- <abbr class="dtend" title="19970402T010000Z">1:00am</abbr> <span class="summary">Laurel is in sensitivity awareness class.</span> <span class="class">PUBLIC</span> <ul class="categories"> <li>BUSINESS</li> <li>HUMAN RESOURCES</li> </ul> <span class="transp">Transparent</span> </span> </span>
traitement RRULE
The way RRULE is encoded should be discussed.
BEGIN:VEVENT UID:19970901T130000Z-123403@host.com DTSTAMP:19970901T1300Z DTSTART:19971102 SUMMARY:Our Blissful Anniversary CLASS:CONFIDENTIAL CATEGORIES:ANNIVERSARY,PERSONAL,SPECIAL OCCASION RRULE:FREQ=YEARLY END:VEVENT
<span class="vcalendar"> <span class="vevent" id="19970901T130000Z-123403@host.com"> <abbr class="dtstart" title="19970901T1300Z"></abbr> <abbr class="dtend" title="19971102">November 2nd</abbr> <span class="summary">Our Blissful Anniversary</span> <span class="class">CONFIDENTIAL</span> <ul class="categories"> <li>ANNIVERSARY</li> <li>PERSONAL</li> <li>SPECIAL OCCASION</li> </ul> <span class="rrule"><span class="freq">YEARLY</span></span> </span> </span>
Exemples extraits de sites d'événements du vrai monde
Réunions W3C
I just got email announcing the dates of another W3C meeting. I don't think it's marked up with hCalendar. I could mark it up myself, like I did for the TP day/week schedule, but it might not stick. Somehow I got our syndicated news markup (precursor to hAtom) to stick, i.e. to become part of the norm in the W3C comm team. I wonder if I could pull that off for calendars.
My first thought is authoring tools, but I don't think I can wait that long. Next thought is instant-feedback checking tools... X2V is really handy, but can't be used for confidential pages (and many/most calendars I use are not public). So.. how about some in-browser javascript "yes, you got it right!" or "hmm... that looks like a date; is there an event you didn't mark up?" feedback? I think I saw something like that in hCalendar implementations.
DanC 09:00, 3 Feb 2006 (PST)
Laughing Squid
Laughing Squid had the following multiple occurence event example:
Thu, Apr 7 : Tu/Wed: 12-4pm Th/Fr/Sat 12-7pm Sun 12-6pm
In addition, later on in the description, it says:
April 7-21, 2005
This is actually quite a non-trivial example, because the event lasts for different durations on different days (4 hours, 7 hours, 6 hours).
Because of the differing durations, the specification requires that *each* instance of this recurring event be explicitly specified.
But first we markup the starting date and time explicitly:
<abbr class="dtstart" title="20050407T1200-0700">Thu, Apr 7</abbr> :
Then we put in the quite lengthy explicit specification of every other time the event occurs, marked up around the human readable description.
<abbr class="rdate" title="20050407T1200-0700/PT7H, 20050408T1200-0700/PT7H, 20050409T1200-0700/PT7H, 20050410T1200-0700/PT6H, 20050412T1200-0700/PT4H, 20050413T1200-0700/PT4H, 200504014T1200-0700/PT7H, 20050415T1200-0700/PT7H, 20050416T1200-0700/PT7H, 20050417T1200-0700/PT6H, 20050419T1200-0700/PT4H, 20050420T1200-0700/PT4H, 20050421T1200-0700/PT7H" > Tu/Wed: 12-4pm Th/Fr/Sat 12-7pm Sun 12-6pm </abbr>
The RDATE "PERIOD" format is fairly straightforward. You simply list *each* occurrence of the event, separated by commas. Each occurrence consists of the ISO8601 datetime of the start of the event, followed by a slash "/", followed by *either* the duration of the event (e.g. 7 hours = PT7H), *or* a complete ISO8601 datetime of the end of the event. I chose to use the duration of the event for this example for reason of brevity.
Note that "value=period:" is unnecessary in the rdate value since the parser can infer "value=period:" from the presence of a "/" in the title attribute value.
With simpler repeating events, or perhaps events which only repeat a day or two, their hCalendar markup may be more illustrative of how to do this in a general way.
Styles CSS
Since the hCal properties are added in as HTML class names, you can style them with CSS class selectors along with other HTML class names. You are free to style these properties in any fashion you want (see specific notes), but here are a few examples that you can use.
Préserver l'espace-blanc
If you are encoding data that requires tabs, returns, or other white-space to be perserved you can use the following CSS property to do so in HTML.
<span style="white-space: pre"> This white-space will be preserved </span>
white-space can take one of three different parameters; normal, pre, and no-wrap.
Non recommandées
The following CSS styling techniques are not recommended:
Cacher les Données
Il est possible d'encoder des données supplémentairs sans qu'elles ne soient affichées dans le HTML, en utilisant la propriété CSS de style 'display'.
<span style="display:none">Données Dissimulées</span>
Cette donnée sera trouvée par toute application de transformation et sera proprement encodée dans un fichier iCal.
Vous ne DEVRIEZ PAS faire cela car cela viole le principe de visibilité.
hCalendar pour les timelines
There have been some interesting discussions about how to use hCalendar for marking up timelines. Here are some pointers:
Questions ouvertes
Encodages non décidées de Certains Attributs de Propriétés
There are several attributes that still need to be discussed about how to property encode them into HTML.
For example the RSVP and ROLE attrbutes: ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT:MAILTO:jsmith@host.com or ATTENDEE:CUTYPE=GROUP:MAILTO:john@host.com
Other attributes include:
- Delegate-To
- Delegate-from
- Sent-By
- Member
- Partstat
- CN
- DIR
Then all the enumerated possible values for each of these
Questions Générales
Q: Should Transforming applications purely extract the information and ignore validity? or should there be some checking, or should this be left to the importing application? (i.e. DTSTART;VALUE=DATE: This-Is-Not-a-proper-date)
A: The simpler the better. Other than checking for perhaps X(HT)ML validity, it should be a simple translator, because presumably the receiving iCalendar application has to have malformed .ics handling already. Let's avoid duplicating that. -- Tantek Çelik
Q: What about multiple of the instances same vCal entity? (two instances of DTSTART) Is this left up to the importing application, or should the XSLT transformation fail?
A: Same as previous. Leave it up to the importing application to interpret it per the iCalendar spec, e.g. what does RFC2445 say about two instances of DTSTART? -- Tantek Çelik
From RFC2445: 4.1.2 Multiple Values Some properties defined in the iCalendar object can have multiple values. The general rule for encoding multi-valued items is to simply create a new content line for each value, including the property name. However, it should be noted that some properties support encoding multiple values in a single property by separating the values with a COMMA character (US-ASCII decimal 44). Individual property definitions should be consulted for determining whether a specific property allows multiple values and in which of these two forms.
Other than that, it does not mention what to do ABOUT invalid data, or which of the multiple entries takes precedence. The only mention of duplicate instances is in the RRULE and EXDATE rules where events exclusions/inclusions overlap. Then duplicate instances are ignore. If it is explicitly written for those items, but NOT for things like DTSTART, then it is difficult to assume duplicate instances are ignored for them as well.
Each of the Components (VEVENT, ...) define which properties can exisit and in what quantity. So multiple DTSTART properties are NOT allowed. -- Brian Suda
Q: Should vCal entitles be represented in XHTML in classes ONLY on block-level element? or should some like VEVENT be block-level and others be of any? does this impact the semantics at all?
A: I don't think the (X)HTML notion of "block-level" should have any bearing whatsoever on vCal entities. You should be able to say
orQ: Should the transforming application add any additional information to the iCalendar representation other than what was encoded in the HTML? (i.e. UID, the unique identifier might not be present in the HTML code, but could be generated by the transforming application and added to the iCal file. Should this be allowed? or should the transforming app ONLY be allowed to add X-PROPERTY properties?) IF it was not explicitly encoded in the HTML should it be left out? What about default values?
Q: If we are looking at the most semantic way to encoding iCalendar data in HTML then several other attributes should be considered besides just 'class'. There are two other candidated, ID and REL. The ID tag MUST be unique within the XHTML file (this could be used for the UID property). The REL attribute can ONLY be applied to 'a' and 'link' tags, but might be helpful. Are namespac<ETH>H �n option? xml:lang, xml:base, are there any others that might be more semantically correct to encode this data?
Q: To help distinguish xparam values from other actual CSS styles, should we assume/mandate that all values in a class attribute within an encoded iCal component class attribute (<x class="vevent|vtodo|...">) be considered an xparam?
A: If you are using other CSS styles (e.g. "center", "bluebox", "greenline", etc.) nested within an iCal component, those should be avoided and the styles applied to the list of iCal properties instead/also?
.center, .vevent { text-align: center; }
Q: What about cases where the words "yesterday", "last year", or "last week" was used? How should we represent this? Is this overkill or not appropriate for hcard ? - User:B.K._DeLong
A: I took a stab at "yesterday" and just added a dtstart of the previous day. Not sure how to represent a single year or whole week - User:B.K._DeLong
<abbr class="dtstart" title="20050114">Yesterday's</abbr>
Evénements Récurrents
Recurring events are tricky. First, there's the question of whether to follow For types with multiple components, use nested elements with class names equivalent to the names of the components a la
<div class="rrule">every <em class="interval">1</em> <em class="freq">WEEKLY</em> on <em class="byday">TU</em> until <em class="until">2004-11-01</em></div>
... or ...
<abbr class="rrule" title="FREQ=WEEKLY;COUNT=17;INTERVAL=2;BYDAY=TH"> every other Thursday for 34 weeks</abbr>
... as in Tantek's 1 Aug msg.
DanC has been experimenting with representing his PDA calendar in hCalendar:
- in palmagent, there's dangerSync.py which uses the XMLRPC interface and spits out RDF data. Then asHCal.xsl converts that to hCalendar
- then in the RDF Calendar workspace, there's glean-hcal.xsl that turns hCalendar into RDF Calendar, and finally,
- in SWAP there's toIcal.py that turns RDF Calendar to .ics format.
So I can go from my sidekick to .ics with one Makefile.
events-test.html is a test file that has all the constructs from my PDA data, in hCalendar. In particular, it uses the nested element representation of recurring events. glean-hcal.xsl would be much less fun to write if it had to parse title="FREQ=WEEKLY;COUNT=17;INTERVAL=2;BYDAY=TH".
Then there's the question of "every tuesday afternoon at 2pm Chicago time". This isn't expressible using datetime-design-pattern. There are some good reasons for that, but it leaves a rather large and uncomfortable gap in hCalendar.
Questions Encodage
The way dates are encoded is not always the most user friendly. If i want to encode january 1st, 2005, that is 20050101
, which is displayed as 20050101. If we are marking-up comma seperated values, like FN, with each sub-element inside their own tag, then the date should be allowed the same.
(However, FN is in the RFC2426 spec and vCard schema, these individual date terms are not, therefore the reasoning in the last sentence is incorrect. -Tantek)
20050101 <span class="dtstart"><span class="Year">2005</span><span class="Month">01</span><span class="Day">01</span></span>
With this encoding, then YYYYMMDD schema can be rearranged for different cultures, DD-MM-YYYY for UK, MM-DD-YYYY for US, etc.
02-01-2005 <span class="dtstart"><span class="Month">02</span>-<span class="Day">01</span>-<span class="Year">2005</span></span> 01-02-2005 <span class="dtstart"><span class="Day" title="first">01</span>-<span class="Month" title="Feb">02</span>-<span class="Year">2005</span></span>
Both of the above encodings are equal, the '-' seperator is ignored by the transforming application. -- Brian Suda
Agreed that the way dates are encoded is not always the most user friendly, but there is an easier solution to this, once you think of what is actually going on in the difference between ISO8601 dates, and dates the way humans use them. Humans typically use an abbrevation or shorthand for a date, like "tomorrow", or "Tuesday", or "the 4th", or perhaps "July 4th". Thus it makes sense to permit this in hCalendar, using the <abbr>
tag which provides the ability to markup the human-familiar short form of some data or language, while preserving the long form in the 'title' attribute.
E.g. for the above example of a start date of January 1st, 2005, you could use this markup:
<abbr class="dtstart" title="20050101">January 1st, 2005</abbr>
Which would display as January 1st, 2005
but would provide the respective ISO8601 date in the title attribute. - Tantek
A Faire
XMDP Profile
- hCalendar XMDP profile (hcalendar-profile) needs to be created.
Applications
A simple implementation of transforming/extracting vCal data from an XHTML file is available for testing. A bookmarklet is also available. The code will be updated as the spec is finalised. http://suda.co.uk/projects/X2V/ . You may also use http://feeds.technorati.com/events/ for parsing hCalendar events and returning an iCalendar stream.
Parsage
Need to write up an hcalendar-parsing document, similar to hcard-parsing.
Relations avec les autres microformats
In a Technology Review interview, TBL said "It would have the relationships between the event and the various people chairing it.".
We should have examples of how hCalendar events can indicate such relationships, both in the format and in the presentation.
E.g.:
* Would it just link to URLs for the various people? (e.g. to their homepages/blogs etc.) * Would it include hCards for the various people? * Would it link to hCards for various people? * Perhaps allow all the above?
Mime-Type
According to RFC2445, the proposed media type value is 'text/calendar'.
A standard vCalendar file has an extension of .vcs and MIME type of text/x-vCalendar. If you use iCalendar, the MIME type is "text/Calendar" and the extension is .ics.
Text/X-vCalendar Content Type
The vCalendar object can also be passed as a non-standard MIME media type. This would be useful in order to clearly identify the vCalendar object in an electronic mail message body part. A non-standard, vCalendar object should be identified as the MIME type/subtype "text/x-vCalendar".
@@ - i have to do some more investigation, but (i think) vCalendar is a subset of iCalendar, so many of the same encodings will work for both, but this document is dealing with iCalendar RFC2445 representation!
Bouton
We need to come up with a nice [ hCal | friendly ]
button to indicate that event info on a page/site is using hCalendar. - Tantek.
Possibilities:
[ hCal | friendly ]
[ hCal | aware ]
[ hCal | inside ]
[ Valid | hCalendar ]
- though that would require writing an hCalendar validator which people could link to.[ <icon> | hCalendar ]
where <icon> could be some generic calendar looking thing, or it could be a PHP generated image with the actual date in the icon, kind of like how the Apple iCal icon updates in the dock automatically.
And then we have to pick colors and all that stuff - Tantek.
Other ideas:
[ hCal | enabled ]
[ hCal | available ]
- kind of an off-hand reference to being available for meetings, etc.
- Eric
Inclusion de Plus d'un iCalendar
Information libre/occupé
See Neil Jensen's analysis of how to represent the iCalendar VFREEBUSY object in hCalendar.
In order to show free/busy information, we could either use the existing vevent class (with empty location, summary, etc. properties) or create a new vfreebusy class. We should create a new vfreebusy class because it is consistent with the XHTML design principles, particularly point #4, "Use class names based on names from the original schema...".
In the iCalendar standard, the vfreebusy calendar component frequently has more than one freebusy property, and also may have a number of other properties such as organizer. For example:
BEGIN:VFREEBUSY ORGANIZER:jsmith@host.com DTSTART:19980313T141711Z DTEND:19980410T141711Z FREEBUSY:19980314T233000Z/19980315T003000Z FREEBUSY:19980316T153000Z/19980316T163000Z FREEBUSY:19980318T030000Z/19980318T040000Z URL:http://www.host.com/calendar/busytime/jsmith.ifb END:VFREEBUSY
So, our hCalendar representation should include separate elements for the vfreebusy calendar component (defined once) and the freebusy property (possibly defined many times):
<span class="vfreebusy"> <span class="freebusy"> <abbr class="dtstart" title="20050721T1000-0800"> July 21, 2005 - 10:00 </abbr> - <abbr class="dtend" title="20050721T1100-0800"> 11:00 </abbr> </span><br/> <span class="freebusy"> <abbr class="dtstart" title="20050722T1000-0800"> July 22, 2005 - 10:00 </abbr> - <abbr class="dtend" title="20050722T1100-0800"> 11:00 </abbr> </span><br/> </span>
According to RFC2445 section 4.8.4.3, "When publishing a "VFREEBUSY" calendar component, the [ORGANIZER] property is used to specify the calendar that the published busy time came from." The organizer property type is CAL-ADDRESS, and can include "non-standard, language, common name and directory entry reference" property parameters. CAL-ADDRESS is "...a URI as defined by [RFC 1738] or any other IANA registered form...".
From what I've seen, Microsoft Outlook typically populates this property with the email address of the calendar owner, which initially made me think of using hCard to specify the organizer. However, given that the property refers to the calendar and not necessarily the person who owns or has published it, I think we should use a new organizer element, as shown below:
BEGIN:VFREEBUSY ORGANIZER:jsmith@host.com FREEBUSY:20050314T133000Z/20050314T163000Z END:VFREEBUSY
becomes
<span class="vfreebusy"> organizer: <span class="organizer">jsmith@host.com</span> <span class="freebusy"> <abbr class="dtstart" title="20050314T133000Z"> March 14, 2005 - 13:30 </abbr> - <abbr class="dtend" title="20050314T163000Z"> 16:30 </abbr> </span><br/> </span>
Hmmm, this looks a little funny when the organizer is so obviously an email address, but at least it is semantically correct. The other problem that I can now see occurring is when the organizer property has parameters, for example (from the iCalendar spec):
ORGANIZER;CN=JohnSmith;DIR="ldap://host.com:6666/o=3DDC%20Associ ates,c=3DUS??(cn=3DJohn%20Smith)":MAILTO:jsmith@host1.com
Perhaps it's best to use the same approach described in "Human vs. ISO8601 dates problem solved"; use the abbr element like so:
<span class="vfreebusy"> <span class="freebusy"> organizer: <abbr class="organizer" title="CN=JohnSmith;DIR=ldap://host.com:6666/o=3DDC%20Associ ates,c=3DUS??(cn=3DJohn%20Smith):MAILTO:jsmith@host1.com">jsmith@host1.com</abbr> <abbr class="dtstart" title="20050314T133000Z"> March 14, 2005 - 13:30 </abbr> - <abbr class="dtend" title="20050314T163000Z"> 16:30 </abbr> </span> </span>
A different reading, particularly of section 4.6.4 "Free/Busy Component", is that the organizer property refers to a calendar user, not the calendar itself. In that section we find this: "When used to publish busy time, the "ORGANIZER" property specifies the calendar user associated with the published busy time".
Under this reading, an hCard might be appropriate. But if for some reason a simpler representation is wanted, using an <a> tag instead of <span> or <abbr> is closer semantically, more consistent with expected web presentation of uri-type data, and easily handles the ORGANIZER examples in the RFC. For example:
ORGANIZER;CN="John Smith":MAILTO:jsmith@host.com
becomes
<a class="organizer" href="mailto:jsmith@host.com">John Smith</a>
and
ORGANIZER;CN=JohnSmith;DIR="ldap://host.com:6666/o=3DDC%20Associ ates,c=3DUS??(cn=3DJohn%20Smith)":MAILTO:jsmith@host1.com
becomes
<a class="organizer" href="mailto:jsmith@host.com" title="DIR=ldap://host.com:6666/o=3DDC%20Associates,c=3DUS??(cn=3DJohn%20Smith)">John Smith</a>
Inforamtion To-Do
The Policy Aware Web (PAW) Project Meeting - 23 Aug 2005 uses class="vtodo" to capture action items. Clearly recording action items from a meeting and publishing them as minutes is a good practical example use of the VTODO object on the web.
What's the scenario for usage though?
What kind of indexer/aggregator application would find these VTODO items and what would it do with them?
Perhaps with some way of figuring out who the to-do item is assigned to ("ATTENDEE"), who assigned it ("DELEGATED-FROM"), and a whitelisting of who, perhaps the "ORGANIZER" property, (and their domains/URLs) that a user would accept assignments from, a user could aggregate to-do items assigned from other folks. Then question remains how to update the status ("STATUS") (RFC 2445 4.8.1.11 Status) on that to-do item when it is (a) completed ("COMPLETED"), (b) abandoned/cut/rejected ("CANCELLED"), (c) some progress is made ("IN-PROCESS") etc. There certainly seems to be sufficient expressiveness in VTODO and its properties to do a decentralized to-do list / task distribution system. Could be very interesting for helping open source projects and other distributed teams do project management using the Web.
References
Normative References
Informative References
- HTMLForCalendars (FOO camp) - presented just a few days before this, hopefully these efforts can be combine
- Personal Data Interchange (PDI) at the Internet Mail Consortium
- Markup language design notes
- A Touch of Class
- iTIP RFC2446
- iMIP RFC2447
- Guide to Internet Calendaring RFC3283
Other Implementations/Ideas
- OpenPSA calendar screenshot
- RDF Calendar Workspace - some older work done with RDF, not really applicable to the simple XHTML case, but perhaps worthy of analysis for when and why they may have diverged from established iCalendar schemas.
- 2003 RDF icalendar work, xCal references