As promised, I now provide an
RSS feed for this 'blog: if you have a news aggregator
that works (so you are luckier than I am), you can tune it to http://www.eleves.ens.fr:8080/home/madore/weblog/weblog.rss
to receive the headlines from this 'blog as I write them.
RSS is all nice and good in theory: what an elegant
idea, providing news headlines in a unified format so that other
sites, or aggregating tools, or user agents, can collect them in an
automated way. In practice, of course, things are rather bleak.
First, there exist as many different dialects of RSS as
there are of HTML, and that's none too few; several
incompatible specifications exist, with version numbers bearing no
logic at all, 0.90 through 0.94, 1.0 and 2.0: if I believe this
article, there is a battle between UserLand, which is responsible for
versions 0.91 through 0.94 and 2.0 of RSS, and the RSS-dev
Working Group, which issued version 1.0. What a mess! Even the
name is not agreed upon: RSS version 2.0 means
“Really Simple Syndication” whereas RSS
version 1.0 means “RDF Site Summary”. Well,
I opted for version 1.0, for several reasons: first, it does not make
the massively stupid mistake (that I already mentioned) of refusing to allocate an XML
namespace for itself; second, it constitutes valid
RDF, which is definitely a Good Thing (so RSS 1.0 is
much more extensible than the other versions); and thirdly, it is not
developped by a commercial interest group whose motivations seem to me
murky at best. But even then, there were difficulties: for example,
the RSS 1.0
specification tells us to use the resource
attribute
on rdf:li
tags, in direct conflict with the latest RDF
specification, which says that it's namespaced, so it's
rdf:resource
. Also, what is the MIME
type for RSS? Some people say it is
application/rdf+xml
, but I checked in the IANA's MIME
types registry and that doesn't exist: should I use
text/xml
instead, or hope that someone will eventually
register the application/rdf+xml
MIME
type and jump ahead? There was an Internet Draft proposal to register
it, but apparently the author was foolish enough to let it expire,
last April. What a mess!
Chaos in incompatible versions of the format means also chaos in programs that read it. I expected that, seeing how popular RSS is, it would be extremely easy to find some tools to parse it. But apparently not: there are no Mozilla extensions which aggregate RSS feeds except for a few ridiculous projects that have just released version 0.0.0.0.1alpha which crashes the browser whenever you try to do anything. (Much similar was my disappointment with Web annotations.) There is a Python-based RSS aggregator which is Open-Source, but I tried it and wasn't able to convince it to accept my RSS feed as a valid source (even though I validated it against two different RSS validators and an RDF validator). Maybe it expects another RSS dialect? Who knows? Other RSS aggregators exist in .NET (I don't run Windows, so I can't use .NET), in Java (I don't really have a working Java implementation, though it is certainly better than .NET), in SmallTalk (hello?) and various other strange languages. But nothing that I could really use.
Now what about FOAF? I think the idea is brilliant, but some things are still lacking. I considerably enriched my RDF description of myself, which can now be viewed (at least partially) through the FOAF explorer, but it remains very primitive. I had to define the “birth date” and “gender” properties myself because FOAF did not even include such primitive concepts in its vocabulary.
A note for those who use the simple FOAF-a-Matic
tool to create a FOAF file for themselves: please add an
rdf:ID
attribute on the foaf:Person
tag that
it will have created. If you don't understand what I'm talking about,
replace the outer (first) <foaf:Person>
by
<foaf:Person rdf:ID="me">
(you can use something
other than “me
”, but it has to be a valid
XML identifier). This is so you become a real
RDF resource, with a genuine URI (something
like http://www.mysite.tld/foaf.rdf#me
if
http://www.mysite.tld/foaf.rdf
is the URI of
your FOAF file), not an anonymous node.
If you wish to say in a FOAF file that you (Joe Smith, say) know me, the RDF code would look like this:
<?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <foaf:Person rdf:ID="joesmith"> <foaf:name>Joe Smith</foaf:name> <foaf:knows> <foaf:Person rdf:about="http://www.eleves.ens.fr:8080/home/madore/meta.rdf#dmadore"> <foaf:name>David Alexander Madore</foaf:name> <foaf:mbox_sha1sum>5ace347d185810f8ab750914058786ffd5cf0094</foaf:mbox_sha1sum> <rdfs:seeAlso rdf:about="http://www.eleves.ens.fr:8080/home/madore/meta.rdf" /> </foaf:Person> </foaf:knows> </foaf:Person> </rdf:RDF>
—note the rdf:ID
attribute on the
foaf:Person
that refers to Joe Smith, and the
rdf:about
attribute on the foaf:Person
that
refers to me, whose value is the concatenation of my RDF
file, a sharp sign (#
) and the rdf:ID
name
from my own FOAF file. This is the correct way to refer
to external objects in RDF, and it seems to have
temporarily escaped the conceptors of FOAF.
But enough of technicalities! I will write some more layman-understandable thoughts some other day.