David Madore's WebLog: RSS and FOAF

Index of all entries / Index de toutes les entréesXML (RSS 1.0) • Recent comments / Commentaires récents

Entry #0151 [older|newer] / Entrée #0151 [précédente|suivante]:

(Saturday)

RSS and FOAF

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.

↑Entry #0151 [older|newer] / ↑Entrée #0151 [précédente|suivante]

Recent entries / Entrées récentesIndex of all entries / Index de toutes les entrées