Copiado de http://discerning.com/topics/standards/calendars.txt
[see also: recurrence.txt GUPE/iCalendar.pm]
=head1 Standards Bodies and Consortia
=head1 Standard Formats
Regarding vCard and XML:
<org><orgname>Lotus Development Corporation</orgname>
<adr adr.type="WORK POSTAL PARCEL">
<street>6544 Battleford Drive</street>
<tel tel.type="WORK MSG PREF">+1–617–693-8728</tel>
carrying forward from Dawson
elements names are upper case
version is an attribute
params are self-closing
namespace is vcard-temp
=head1 Standard Protocols
Cal DAV? http://greenbytes.de/tech/webdav/draft-dusseault-caldav-01.html
iCalendar Transport-indendent Interoperability Protocol (iTIP)
static and dynamic event, to-do, journal and free/busy objects
either store and forward (imip) or real-time
CU calendar user to CU communication
CUA and CS
[iMIP] specifies an Internet email binding for [iTIP].
CAP Calendar Access Protocol
the CUA to CS communication
real-time analog of imip. maybe being superseded by CAP?
ICAP – defunct proposal (96), see http://www.clearblue.com/draft-oleary-icap-00.htm
Transport Protocol SWTP http://www.p2software.com/
Simple Scheduling Transport Protocol (SSTP) presented by On Technology
Calendaring and Scheduling Interoperability Protocol (CSIP) presented by On Time / FTP? Software
Internet Calendar Access Protocol (ICAP) presented by Clear Blue Network Systems and Lotus
=head1 Open Source Projects
Name Born Died URL
Free Association 2000 http://www.advogato.org/proj/Free%20Association/
Reefknot 2001 http://reefknot.sourceforge.net/
Hula 2005 http://www.hula-project.org/ Novell's old Net Mail? server
OSA/Chandler 2003 http://www.osafoundation.org/
=head1 Articles and Link Farms
Date Lens? http://www.cs.umd.edu/hcil/datelens/screenshots.shtml
Semantic Web Calendaring vocabularies and usecases
some interesting comments about the specs
discusses iCalendar, xCalendar, Ski Cap?
Calendaring and Scheduling with XML-RDF
Once more into the Breach: Calendars, Events and RSS 2003
rant about calendar support in evolution:
Scheduling Ourselves to Death
=head1 Desired Features
Some desired features:
indicate public and private when publishing
publishing of free busy
scheduling system (somehow)
handle recurring events
handle multi-day and all-day events
booking of rooms or other equipment
send email to server to pick up an event (or pull from your email)
pull in public holiday db (country-specific), and/or commemorative day db
search by string in summary, qbe, etc.
merging of desired set of calendars
control of sorting by: recur vs. recur, has start time and duration, has start time only, neither start time nor duration
=head1 Google Base
<g:location>1600 Amphitheatre Parkway, Mountain View, CA, 94043, USA</g:location>
See some discussion here:
=head1 Ji Cal?
Has its own XML format that includes expanded events.
=head1 iCalendar RFC2445
Synctactically, iCalendar/vCalendar/vCard are similar.
It is roughly field: value, though the field names can be parametrized.
Field values can contain 8-bit characters.
Lines can be LWS wrapped (lines SHOULD be no longer than 75 octets).
RFC 2445 grammar, in part:
contentline = name *(";" param ) :" value CRLF
name = x-name / iana-token
iana-token = 1*(ALPHA / DIGIT / -")
x-name = X-" [vendorid -"] 1*(ALPHA / DIGIT / -")
vendorid = 3*(ALPHA / DIGIT)
param = param-name "=" param-value *("," param-value)
param-name = iana-token / x-token
param-value = paramtext / quoted-string
paramtext = *SAFE-CHAR
value = *VALUE-CHAR
quoted-string = DQUOTE *QSAFE-CHAR DQUOTE
NON-US-ASCII = %x80-F8
QSAFE-CHAR = WSP / %x21 / %x23–7E / NON-US-ASCII
SAFE-CHAR = WSP / %x21 / %x23–2B / %x2D-39 / %x3C-7E / NON-US-ASCII
VALUE-CHAR = WSP / %x21–7E / NON-US-ASCII
Values can contain escapes: \, \" \n
cal-address type examples (for example for ORGANIZER property):
URL property examples:
"URL:http://host2.com/pub/busy/jpublic-01.ifb" (for a VFREEBUSY)
=head1 iCalendar Issues
Recurrence is complex, probably overly so.
The standard requires that timezones be defined inline, yet
there may be redefinitions of those timezones in the future
that even affect future dates in existing calendars.
This can mean conflicts with the conventional definition
of the same-named timezones. This could happen with distant
future events in old calendars,, as well as recurring events
beyond a change in the definition.
The properties such as UID, DTSTAMP, CREATED contrast
calendar store with object representation. This has unclear
meaning when objects might be reformatted, republished, and so on.
The semantics of references to other objects such as by RELATED-TO are similarly
DTEND is unclearly defined.
Many properties could be used with different semantics, and in
some cases you'd like to use more than one such meaning at once.
is URL the authoritative ics file? a web page? a brochure?
what about ATTACH? Note it can have a URI value also.
(cv. WHURL and PROMO in Ski Cal?
iCalendar is focused on business meetings (ATTENDEE property, SENT-BY parameter, etc.),
without a similar degree of support for public events.
no distinction between event title and summary (Ski Cal?
no way to indicate a set of multiple performers/speakers (Ski Cal?
no way to indicate type of location (radio, TV, indoors, outdoors) (Ski Cal?
no structured way to specify admission information (cost, tickets, reservations, etc.)
ACCESS PRICE PAYMETHOD BOOKINGS PROHIBITED
no way to indicate the languages spoken at the event (vs. language of text in description) (Ski Cal?
no easy way to indicate a schedule within the event (Ski Cal?
It has weak support for alternate DESCRIPTIONs (html vs. text; short vs. long).
There is the ALTREP parameter, but it makes little sense outside of a MIME context that can provide additional attributes.
There is the LANGUAGE parameter which apparently allows for multiple LOCATION and DESCRIPTION
and other text properties that otherwise can occur only once --
although the RFC is unclear on this, as 4.6.1 eventprop production says
that the following are optional, but MUST NOT occur more than once.
There is no certain way of distinguishing an unknown time, an unspecified time,
and an all-day event. Or of saying «some day between may 1 and may 8".
What distinguishes COMMENT from DESCRIPTION?
The LOCATION is free text, with no structured address support such as with
vCard (place name, address, phone), nor a distinct directions field
(like Ski Cal? DIRECTIONS, PLACENAME properties; TRAVELBY parameter).
ORGANIZER is too limited as cal-address, and CONTACT is too free.
What if the real organizer is an organization with a title, phone, etc.?
There is weak and unclear specification for charsets: Can UTF-16BE be used?
What to do once a VCALENDAR is detached from a MIME container?
There is no property for a VCALENDAR title (like X-WR-CALNAME) or the owning organization of a VCALENDAR.
Multi-user change tracking is weak (no distinction between submitted by,
posted by, posted when, etc. — each of which might differ from the organizer).
Ski Cal? has PUBLISHER and MANAGEMENT, but those still don't really cover
it all either.
There is no suggested manner for namespace control on values of
enumerated properties and parameters (CATEGORIES property, RESOURCES property,
ROLE parameter, etc.) (see Ski Cal? NSREF).
=head1 Example Event
Hear From a Courageous African Woman Who Stood Up
to the Vicious Ethnic Cleansing of the Black Community of
Tampa, Florida – and Won!
Is the San Francisco Bay Area for Whites Only? A Forum on Ethnic Cleansing
with housing community activist Connie Burton from Tampa, Florida
Tuesday, June 29th, 7 to 9:30pm
Fellowship Hall of Humanity, 390- 27th St., ( between Telegraph and Broadway), Oakland
African People's Solidarity Committee, (510) 295–7834
Call (510) 295–7834 for more info, leave a voicemail at 510–625-1106, or email firstname.lastname@example.org
On this coming Tuesday, June 29th from 7 to 9:30pm, the African
People's Solidarity Committee is holding Is the San Francisco Bay
Area for Whites Only? A Forum on Ethnic Cleansing at the Fellowship
Hall of Humanity at 390 – 27th St (between Broadway and Telegraph) in
Featured as the keynote speaker will be Connie Burton, leader in the
International People's Democratic Uhuru Movement out of Tampa,
Several months ago, Burton led an African community struggle against
the city of Tampa's plans to kick African people out of the Tampa Park
apartments in what the city considered prime real estate.
Utilizing the combination of her weekly Straight Talk radio program
she hosts in Tampa with massive leafleting, bullhorning, protests and
participation in weekly Tampa housing authority meetings, the Uhuru
Movement in Tampa under Connie's leadership was able to push out the
city's latest ethnic cleansing plan to remove black people from the
Join this discussion about the devastating situation that exists from
the Tampa Bay to the SF Bay as African people are forced from their
communities. Through policies of police containment and a U.S.-imposed
drug economy, young Africans in their communities in the Bay area face
prison, the military, or the grave while people people are able to
move into their neighborhoods.
Other speakers at the forum include:
Quetzaocelocuia of the Barrio Defense Committee in San Jose,
Maurice Campbell of the Community First Coalition of Bayview-Hunter's Point,
Bakari Olatunji of the International People's Democratic Uhuru Movement in Oakland,
Wendy Snyder of the African People's Solidarity Committee.
Let's take a stand from the white community to support genuine economic development and an end to the war on the African community!
=head1 Proposed Schema
Here is a proposed schema.
We attempt to indicate here the mapping of field(s) between our schema,
iCalendar, and Atom.
when_start DTSTART, @TZID
ISO8601 datetime with any precision (year down to second)
has a numerical tz offset, unless floating.
offset taken from @TZID param, which is a name
when_duration DTEND, DURATION
(we use duration instead of end to avoid extra rules about tz etc.)
if missing, then it is considered unknown (vs. 0 duration)
cannot have more precision than start
when_recur RRULE, EXRULE, RDATE, EXDATE
Where LOCATION (multi-line plain text)
whole location might be stored internally
where_name single line free text
where_addr_pobox the 7 vCard ADR fields; pobox and extended probably not used
where_url URL, home page for location
where_directions type=content (might be a link to directions)
where_geo GEO (two floats long/lat)
all content fields can have content-type and lang
in iCalendar, free plain text, typically single line.
used in isolation of rest of info. defaults to title, then to beginning of description
if a movie, etc. that has a distinct title. will be shown in quotes.
subtitle shown with the title, should not be set without it
in iCalendar, multiple lines of free plain text which
includes all people involved, and any schedule
link* ATTACH, URL
RFC2445 URL;VALUE=URI could be either the event or an ICS; it is vague
attributes: rel href type (like Atom and HTML. Atom defines rel to be a URI or one of several tokens. type is media type here, and Atom says content/@type is broader)
HTML says rel is CDATA, space-separated
rel="eventhome" flyer brochure registration
eventhome = a html home page specifically for the event (vs. typically pdf for flyer)
exactly the same as Atom: term (text) label (text) scheme (URI)
no restrictions on term: http://www.atomenabled.org/developers/syndication/atom-format-spec.php#rfc.section.4.2.2
(alternative designs: URIs, TOKENs, QNames, labels)
TBD: namespace declaration, and schema of choice labels (Ski Cal?
NSREF is unspecified what the URI points to)
one or more from various vocabularies
event_type: concert, movie, art (poetry, dance, painting), conference,
forum, educational/training,protest(march,vigil), group meeting,
fundraiser, social (celebration, etc.)
human rights,environment,homelessness,international economy,history,law,race,labor,drugs
geoname (which it is about, not held at, such as from Getty or usgov Metropolitan Statistical Area): Iraq,Africa
admission tickets, reservation, price, etc.
Who ORGANIZER, CONTACT
organizer_name organization name or individual name
contact_name specific individual to contact
organizer_url home page
Changes CREATED LAST-MODIFIED UID URL
source_url original ics
Some come from a fixed vocabulary of choices:
Some would be fkeys to a separate address table:
=head1 RDF Calendar
RDF model for iCal: http://web.resource.org/rss/1.0/modules/event/
notes that date precision is significant
more RDF and iCalendar: http://www.ninebynine.org/RDFNotes/Calendaring/iCal-proposal.html
RDFiCal: iCalendar in RDF
ical2rdf.pl now replaced by fromIcal.py
has tools to convert schema from rfc to rdf/owl
dulbin core Event type DCMI
=head1 Ski Cal?
iCalender/skical in DAML+oil
Structured Knowledge Initiative
better suited for public (non corporate events)
– an extension of iCalendar
OPTIMESET opening time set
TITLE (of the movie, etc.,, vs. SUMMARY)
PERSONS (performer, presenter, etc.)
WHURL url associated
=head1 Perl Modules
perl cpan support
Date Time?::Format::ICal http://search.cpan.org/dist/DateTime-Format-ICal/lib/DateTime/Format/ICal.pm
part of the latest datetime.perl.org project
adopted from Date::Ical
will parse recurrence (also uses Date Time?
Date Time?::Event::ICal http://search.cpan.org/dist/DateTime-Event-ICal/lib/DateTime/Event/ICal.pm
part of the latest datetime.perl.org project
Flavio Soibelmann (also author of Date::Set, which became Date Time?
does not expand RRULE. does not support nested structures.
same author as Net::vFile; no work since 2003.
by Rich Bowen and the Reefknot team
parses either ISO8601 or an ical duration
no work since 2001; never finished.
does not expand RRULE. does support nested structures. does not unescape \,
uses iCal::Parser::SAX uses iCal::Parser uses Text::vFile::asData and Date Time?
iCal::Parser uses Text::vFile::asData.
It does expand RRULE, using Date Time?
It also expands events spanning multiple days into individual events.
Artistic license. by Jesse Vincent, David Glasser, Simon Wistow
uses Text::vFile::asData to parse.
does its own writing.
=head1 Open Source Native Clients
Rainlendar http://www.rainlendar.net/ http://www.ipi.fi/~rainy/index.php?pn=projects&project=rainlendar
Mozilla Sunbird (win32, osx, linux)
Evolution http://www.novell.com/products/desktop/features/evolution.html (osx, linux)
KOrganizer http://korganizer.kde.org/ (win32, osx, linux)
no client-server, vcalendar, etc.
=head2 Commercial Calendar Clients
web-based ajax editing
supports ics export
Yahoo Calendar calendar.yahoo.com
shareware, now withdrawn
Corporate Time? http://www.cst.ca/ -> www.steltor.com -> Oracle
enterprise calendaring and resource scheduling
has linux support
spun out lexacom then brought it back in
had some of the original tech in Netscape CS?
on icalendar committee
Lexacom / Corporate?
Software and Technologies (CS&T)
=head1 Web-Based Clients
lists and reviews:
software: PHP iCalendar
example use at http://calendar.resist.ca/month.php
no editing, just presents a .ics file
demo at http://phpicalendar.net/phpicalendar/
parser is limited: doesn't even deal with escapes!
fork to support booking, at http://www.nanofab.ualberta.ca/iCalDemo
Monket Calendar http://www.monket.net/wiki/monket-calendar/
GPL/CC dual license
php + ajax
author taking a break
UW Calendar http://www.washington.edu/ucal/
works with phpicalendar, gets ics out of mysql
no updates since 2004
webcalendar.sf.net = http://www.k5n.us/webcalendar.php
php GPL. uses mysql.
has web editing
exports to iCalendar or vCalendar
Web Calendar? http://www.math.utexas.edu/users/mzou/WebCalendar.html
has translations to many languages
not that great looking ui by default
has a calendar server (its own http post mechanism)
drag and drop editing
supports vcs files (not ics?)
now commercial service (2003)
uses xCal XML and XSLT
nothing since 2003
integrated with thatware.org
no database. php
Cosmo is a calendar server (works with webdav/caldav client like Chandler, Apple iCal, Sunbird)
apache license. java. requires maven, tomcat, etc.
Scooby is a web-based client that will work with Cosmo (or any caldav server).
Chandler is a native calendar client
=head1 Perl Modules for Generating Calendar HTML
Plot Calendar? http://www.ajackson.org/software/plotcalendar/
perl module for generating html or ascii calendar display
will do Day or Month
little action since 1999
simplified module inspired by HTML::CalendarMonthSimple.
=head1 Calendar Repositories
City & State
Topic / Issue
Tube / Bus?
=head1 Commercial Hosting
no online authoring – in fact doesn't host at all, but pulls ics files from somewhere else