Practical RDF

Volume 6, Issue 128; 11 Dec 2003

I pitched a Town Hall for XML 2003 in the hopes that I could get a handful of folks up in front of an audience to talk about practical things that you can do today with RDF. I think I succeeded.

I pitched a Practical RDFThis is also the name of Shelly Powers excellent RDF book. Apologies for any confusion I’ve caused. Town Hall for XML 2003 in Philadelphia in the hopes that I could get a handful of folks up in front of an audience to talk about practical things that you can do today with RDF.

I succeeded better than I could have hoped. I talked Dan Brickley , Dan Connolly , Edd Dumbill , and Eric Miller into the exercise. Unfortunately, Eric was unable to come to the conference.

Practical RDF Panel
Practical RDF Panel

My motivation for this town hall was to encourage people to think about RDF as a tool for solving problems outside the “semantic web” vision. I don’t know if I believe in the semantic web vision or not, but I don’t have to believe to use the tools.

There are two features of RDF that I find particularly practical:

  • Aggregation. Metadata comes from essays, photographs, my Palm, and other files. Expressing the metadata in RDF lets me pull it all together and address it uniformly.

  • Inference. I hate duplication of information. For example, the fact that Dan was born and has not yet died, implies that he has a birthday. Last tuesday, most recently, in fact. Recording Dan’s birthday in one place and the repeating appointment to remind me of his birthday in another place is wrong. Instead, I use rules:

    # Handle birthdays and births and deaths
    { :p a palm:Contact .
      :p p:birthday :o }
     log:implies { :o a palm:Appointment ;
                        palm:category xdb:_10 ;
                        palm:description "Birthday";
                        palm:datebk4 [
                           rdf:type palm:DateBk4 ;
                           palm:category "10" ;
                           palm:icon "10" ];
                        palm:repeat [
                           rdf:type palm:Repeat ;
                           palm:frequency "1";
                           palm:type "Yearly" ] } .
    { :p a palm:Contact .
      :p p:birthday :r .
      :p p:born :o }
     log:implies { :r palm:begin-date :o } .
    { :p a palm:Contact .
      :p p:birthday :r .
      :r palm:repeat :t .
      :p p:died :o }
     log:implies { :t palm:end :o } .

    (Yes, I admit, this is a trivial, anal-retentive example. But the principal applies none-the-less.)

My list of practical tools includes the following:


I use cwm (“closed world machine” ) to aggregate and apply inference rules to my data.


I use jpegrdf to store metadata about photographs inside the photographs.


Jena is a Java library for accessing RDF graphis.


I use RDFTwig, a set of extension XSLT extension functions, to make it easier to style RDF data for presentation.

My own Palm stuff

As I’ve said before, my Palm Pilot is my “personal information appliance”. I store as much data in there as I can. I have some tools for syncing that data with my computer and building RDF from it. I’ll get around to republishing the conduits eventually.