Monthly Archives: September 2003

Combining foaf, RDFical and geo, and maybe RSS 1.0…

The point of using RDFical (iCalendar in RDF) is to combine it with different namespaces, so you can say things about people, locations and documents and images, and their relation to events. Examples might include: pictures and weblogs of people attending this meeting, location of this meeting. See RDF calendar workshop report for more usecases. There are lots of usecases for this. We almost never want to talk about an event without talking about people, documents or places.

If you’re not going to combine different vocabularies together, then you might as well stick with icalendar, which is used by many applications including Mozilla calendar and Apple ical. This is why in the RDFiCal work we have simply translated iCalendar to RDF and not added or changed anything; and have focussed on being able to roundtrip between RDFical and iCalendar itself.

Here are a few examples of using RDFical with the FOAF and geo vocabularies, both with FOAF files and within RDFical files. These are preliminary, and may change (let me know if you think there are problems with these approaches).

RDFical and location, with a slightly dodgy interepretation of geo in iCalendar (see RFC 2445 4.8.1.6 Geographic Position). See also GeoInfo wiki page and Geo workspace.

Attendee in RDFical, pointing to FOAF files, and – basic icalendar files and RDFical files and templates for movable type.

Saying you are attending an event in a FOAF file. See also

Vinay Pawar’s suggestion
and thread, and discussion on #foaf
See also representing plans to attend which is more tricky.

One issue that keeps coming up is referencing events rather than calendars. Calendars often have urls in iCalendar; they are some arbitrary group of events. Events in iCalendar do not usually have urls (as generated by many applications) but they can do (see RFC 2445, section 4.8.4.6 Uniform Resource Locator, “This property may be used in a calendar component to convey a location where a more dynamic rendition of the calendar information associated with the calendar component can be found.“)

This is interesting because it implies authority. Who says this is the ‘real’ url of the event (or the ‘real’ uid for it for that matter)?. Some practical way around this is essential, or we won’t all be able to say – “I was at WWW2003″, and similar. Dan Brickley has suggested using foaf:homepage as an InverseFunctionalProperty for RDFical events. That’s ok if there is a page for the event, though there may not be (you can imagine nasty confusions with the homepage of a conference being regarded as the homepage of a talk at the conference, and the talk disappearing in a puff of owl logic).

There’s an associated problem which also bears on RSS and RDFical (chatting with Chris Heathcote last night about his excellent London art aggregator, following an interesting comment from Danny Ayres). My experiments with RDFical and RSS 1.0 use foaf:topic to separate the RSS 1.0 feed item (with its url) from the event itself (which might have a homepage, but is not itself a url). This issue is analogous to people and urls. People are not webpages though they may have homepages. Events are not webpages, though they may have homepages and other pages about them. If we ignore this distinction we get things like:

<item rdf:about="http://www2004.org">
<title>WWW2004</title>
<ical:dtstart rdf:parseType="Resource">
<ical:dateTime>2004-05-17</ical:dateTime>
</ical:dtstart>
<ical:dtend rdf:parseType="Resource">
<ical:dateTime>2004-05-22</ical:dateTime>
</ical:dtend>
</item>

– now the webpage of www2004 has a startdate and an enddate, not what we intended. We know that that isn’t what is meant by this, but the machines don’t know, and confusion will result.

Chris was arguing that the rss link did not have to be a url, but could be a non-url uri, and therefore not confusable with a webpage. Ok, that seems more reasonable, although I worry that people will in fact tend to use actual urls of webpages, especially because that’s what RSS is designed for. Comments very welcome – it would be nice to get some of these issues resolved.

Icalendar and RDF and movable type again

I’ve been trying to see if movable type can emit future events e.g. intention to attend; recording the existence of; in an interesting way.

To change the date of an event (e.g. to say when an event in the future was) I had to change the editing screen to make sure you can change the date on an edited event. Once the entry was saved, I could change the date. But it is ‘authored on’ date so it seems sort of wrong to abuse the semantics of it in this way. Plus for repeating events you would have to add it each time. Also you would have to do a new entry each time, not just change the old one. Anyway, I have an icalendar versionof my weblog, thanks to jos yule (I’ve made a couple of minor changes to his template), and an RDFical version too. Oh and what the hell, an RSS 1.0 and RDFical one, just for fun.

Here’s the icalendar template, again, not really my work, but worth reposting for the differences from jos yule’s version (line length, uid uniqueness and date rather than datetime, which has to have a timezone in the same file, which is tricky to do using the current mt tools):

BEGIN:VCALENDAR
VERSION
:2.0
PRODID
:-//iCalendar experiment in Movable Type//EN
<MTEntries lastn="15">
BEGIN:VEVENT
UID
:<$MTEntryID pad="1"$>@planb.nicecupoftea.org
SUMMARY
:<$MTEntryTitle$>
DESCRIPTION
:<$MTEntryBody words="5"$>...
URL
:<$MTEntryPermalink$>
STATUS
:CONFIRMED
CLASS
:PUBLIC
DTSTART
:<$MTEntryDate format="%Y%m%d"$>
DTEND
:<$MTEntryDate format="%Y%m%d"$>
DTSTAMP
:<$MTEntryDate format="%Y%m%dT%H%M%SZ"$>
END:VEVENT
</MTEntries>
END:VCALENDAR

and the RDFical template:

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://www.w3.org/2002/12/cal/ical#">
<Vcalendar>
<prodid>-//RDFiCal experiment in Movable Type//</prodid>
<version>2.0</version>
<MTEntries lastn="15">
<component>
<Vevent>
<uid><$MTEntryID pad="1"$>@planb.nicecupoftea.org</uid>
<summary><$MTEntryTitle$></summary>
<description><$MTEntryBody words="5"$>...</description>
<url rdf:resource="<$MTEntryPermalink$>"/>
<status>CONFIRMED</status>
<class>PUBLIC</class>
<dtstart rdf:parseType="Resource">
<date><$MTEntryDate format="%Y-%m-%d"$></dateTime>
</dtstart>
<dtend rdf:parseType="Resource">
<date><$MTEntryDate format="%Y-%m-%d"$></dateTime>
</dtend>
<dtstamp rdf:parseType="Resource">
<dateTime><$MTEntryDate format="%Y-%m-%dT%H:%M:%SZ"$></dateTime>
</dtstamp>
</Vevent>
</component>
</MTEntries>
</Vcalendar>
</rdf:RDF>

This would be much much better if you could add some stuff about whether you were planning to go, the homepage of the event etc. I’ve not thought through how to do this yet. It’d be a hack. I’m really not sure there’s much point in having an ical or RDFical feed for a blog unless it actually talks about events in the sense or meetings, conferences etc. You could have a blog that was just events maybe. Here’s an example of mixing foaf and RDFical to talk about attendence and to give the event a homepage.

RDF icalendar work

Ray Ozzie has been asking some interesting questions about XML, RSS and iCalendar, and I think we have some answers, from work we have been doing for about a year on RDF and iCalendar. There has been an informal W3C taskforce on calendaring and RDF for some time, but this work got a kick-start at a workshop in Bristol, and has continued as software to convert iCalendar to RDF, testcases, chats on IRC, and email discussion. At this stage we have done about as much as we want to, and I am starting to pull together some documentation. the workshop report contains many usecases explaining why we wanted to use RDF (instead of some vanilla XML format like xCal) – most notably because we wanted to make it easy to mix together information from different namespaces with calendar information; for example foaf information about people, and geographical information, and RDF makes this easier. The result is an RDF schema and tests.
Below I’ve tried to answer some of Ray’s questions.
“Has a method to embed iCal into XML ever been approved or agreed upon? If so, let me refer to it as xCal.”
Yes – there’s something called xCal, a DTD Internet Draft, which I can’t find right now (coverpages article about it). I’m pretty sure that work has stopped on it.
“Has a method to embed xCal events/etc ever been suggested as a viable item type for RSS?”
Yes, there are at least two related activities: RSS 1.0 events module, and some attempts to embed RDFical in RSS 1.0 (try view source). The former is a draft, and one or two people are using it, but is very under-specified, making it difficult to write applications which use it. The latter is just a demo, but I think is roughly the right way to go from a modelling point of view.
“Has anyone built websites that publish venues’ event calendars in such a format for subscription/aggregation?”
Yes, LTSN economics have a site using RSS+events module; as does the SWAD-Europe project (which I work on). A related project called Skical has published Swedish events in RSS+events+ some extensions.
“Has anyone built an Outlook or Notes adapter that publishes personal or team calendars to such a feed, OR”
Sort of, see the Retsina project, which uses an older version of an RDF calendar schema and can import into outlook.
“Has anyone built an RSS aggregator that can aggregate multiple calendar RSS feeds into a desktop or web calendar UI?”
yes, I have, although it’s only a demonstrator. It’s simple to do though.
“Has anyone built an RSS aggregator that can aggregate multiple calendar RSS feeds into your Outlook or Notes personal calendar?”
Not that I have heard of….
I hope that helps. I really think that some simple way of propagating events data as RDF would be a very interesting application indeed, and I’m anxious to help it happen.

RDF’s goldfish memory and documentation of vocabularies

a goldfish
After a rather interesting day of discussion at HP Labs on Friday it occured to me that RDF has a memory like a goldfish. Everything asserted in RDF is asserted now, there’s no future, no past to RDF, only the present. I’m not explaining this very well. I mean that if I was an RDF datasource, I wouldn’t know anything about the past or the future. hmm, ‘if I were an RDF datasource’…maybe I’ve been doing this a bit too long ;)

Continue reading