<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet href="/style/browser.xsl" type="text/xsl"?>
<essay xmlns="http://docbook.org/ns/docbook"
       xmlns:xlink="http://www.w3.org/1999/xlink"
       xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
         xmlns:dc='http://purl.org/dc/elements/1.1/'
         xmlns:gal='http://norman.walsh.name/rdf/gallery#'>
<info>
<title>Practical RDF</title>
<volumenum>6</volumenum>
<issuenum>128</issuenum>
<pubdate>2003-12-11</pubdate>
<date>$Date$</date>
<author><personname>
<firstname>Norman</firstname><surname>Walsh</surname>
</personname></author>
<copyright><year>2003</year><holder>Norman Walsh</holder></copyright>
<abstract>
<para>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.</para>
</abstract>
<dc:coverage rdf:resource="http://norman.walsh.name/knows/where/us-pa-philadelphia"/>
</info>

<para xml:id='p1'>I pitched a
<link xlink:href="http://www.xmlconference.org/xmlusa/2003/thursday.asp#38">Practical
RDF</link><footnote><para xml:id='p2'>This is also the name of
<personname><firstname>Shelly</firstname><surname>Powers</surname></personname>
excellent <link xlink:href="http://rdf.burningbird.net/">RDF book</link>.
Apologies for any confusion I’ve caused.</para></footnote> Town Hall for
<link xlink:href="http://www.xmlconference.org/xmlusa/2003/">XML 2003</link><indexterm>
<primary>XML 2003</primary></indexterm>
in <link xlink:href="/knows/where/us-pa-philadelphia">Philadelphia</link>
in the hopes that I could get a handful of folks up in front of an audience
to talk about <emphasis>practical</emphasis> things that you can do
<emphasis>today</emphasis> with RDF.</para>

<para xml:id='p3'>I succeeded better than I could have hoped. I talked
<link xlink:href="/knows/who#dan-brickley"><personname>
<firstname>Dan</firstname><surname>Brickley</surname></personname></link>,
<link xlink:href="/knows/who#dan-connolly"><personname>
<firstname>Dan</firstname><surname>Connolly</surname></personname></link>,
<link xlink:href="/knows/who#edd-dumbill"><personname>
<firstname>Edd</firstname><surname>Dumbill</surname></personname></link>, and
<link xlink:href="/knows/who#eric-miller"><personname>
<firstname>Eric</firstname><surname>Miller</surname></personname></link>
into the exercise. Unfortunately, Eric was unable to come to the conference.</para>

<gal:photo rdf:resource="images/20031211-202418"/>

<para xml:id='p4'>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.</para>

<para xml:id='p5'>There are two features of RDF that I find particularly practical:</para>

<itemizedlist>
<listitem><para xml:id='p6'><emphasis role="bold">Aggregation</emphasis>. 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.
</para></listitem>
<listitem><para xml:id='p7'><emphasis role="bold">Inference</emphasis>. I hate duplication
of information. For example, the fact that
<personname><firstname>Dan</firstname><surname role="suppress">Connolly</surname>
</personname> 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:</para>

<screen># 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 } .</screen>

<para xml:id='p8'>(Yes, I admit, this is a trivial, anal-retentive example. But the
principal applies none-the-less.)</para>
</listitem>
</itemizedlist>

<para xml:id='p9'>My list of practical tools includes the following:</para>

<variablelist>
<varlistentry><term><link xlink:href="http://www.w3.org/2000/10/swap/doc/cwm.html">cwm</link></term>
<listitem><para xml:id='p10'>I use <application>cwm</application> (“closed world machine” ) to
aggregate and apply inference rules to my data.
</para></listitem>
</varlistentry>
<varlistentry><term><link xlink:href="http://nwalsh.com/java/jpegrdf">jpegrdf</link></term>
<listitem><para xml:id='p11'>I use <application>jpegrdf</application> to store metadata about
photographs <emphasis>inside</emphasis> the photographs.
</para></listitem>
</varlistentry>
<varlistentry><term><link xlink:href="http://jena.sourceforge.net/">Jena</link></term>
<listitem><para xml:id='p12'><application>Jena</application> is a Java library for accessing
RDF graphis.
</para></listitem>
</varlistentry>
<varlistentry><term><link xlink:href="http://rdftwig.sf.net/">XSLT/RDFTwig</link></term>
<listitem><para xml:id='p13'>I use <application>RDFTwig</application>, a set of extension XSLT
extension functions, to make it easier to style RDF data for presentation.
</para></listitem>
</varlistentry>
<varlistentry><term>My own Palm stuff</term>
<listitem><para xml:id='p14'>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.
</para></listitem>
</varlistentry>
</variablelist>

</essay>
