@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rss: <http://purl.org/rss/1.0/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix wot: <http://xmlns.com/wot/0.1/> .
@prefix sy: <http://purl.org/rss/1.0/modules/syndication/> .
@prefix admin: <http://webns.net/mvcb/> .
@prefix content: <http://purl.org/rss/1.0/modules/content/> .
@prefix xfn: <http://gmpg.org/xfn/11#> .
@prefix h: <http://www.w3.org/1999/xhtml> .

<http://www.dajobe.org/foaf.rdf>
    a foaf:PersonalProfileDocument ;
    foaf:maker <http://www.dajobe.org/foaf.rdf#i> ;
    foaf:primaryTopic <http://www.dajobe.org/foaf.rdf#i> ;
    wot:assurance <http://www.dajobe.org/webwho.xrdf.asc> .

<http://www.dajobe.org/foaf.rdf#i>
    xfn:me <http://dajobe.jaiku.com/>, <http://del.icio.us/dajobe>, <http://digg.com/users/dajobe>, <http://disqus.com/people/dajobe/>, <http://friendfeed.com/dajobe>, <http://identi.ca/dajobe>, <http://pownce.com/dajobe/>, <http://twitter.com/dajobe>, <http://upcoming.yahoo.com/user/82459/>, <http://www.dopplr.com/traveller/dajobe>, <http://www.facebook.com/profile.php?id=701631236>, <http://www.linkedin.com/in/dajobe> ;
    a foaf:Person ;
    foaf:depiction <http://www.dajobe.org/face.png> ;
    foaf:family_name "Beckett" ;
    foaf:givenname "David" ;
    foaf:homepage <http://purl.org/net/dajobe/> ;
    foaf:img <http://www.dajobe.org/face.png> ;
    foaf:interest <http://dublincore.org/>, <http://purl.org/rss/>, <http://www.friendspace.com/groups/galway-foaf-2004>, <http://www.w3.org/2000/01/sw/>, <http://www.w3.org/Metadata/>, <http://www.w3.org/RDF/> ;
    foaf:knows [
        a foaf:Person ;
        foaf:mbox_sha1sum "1ba3bffdd13a136d38b77542f2e26fd1dc0042f2" ;
        foaf:name "Edd Dumbill"
    ], [
        a foaf:Person ;
        foaf:mbox_sha1sum "461179310021b2185ad7f67f14e5d4deb2107c47" ;
        foaf:name "Morten Frederiksen" ;
        foaf:nick "mortenf"
    ], [
        a foaf:Person ;
        foaf:mbox_sha1sum "4829af19130151de1c4def299d73d33f33dee0fb", "828414515d398b42268a6c2ed879dc505369223a" ;
        foaf:name "Jo Walsh" ;
        foaf:nick "zool"
    ], [
        a foaf:Person ;
        foaf:name "Damian Steer" ;
        foaf:nick "shellac"
    ], [
        a foaf:Person ;
        rdfs:seeAlso <http://www.w3.org/People/Connolly/home-smart.rdf> ;
        foaf:mbox_sha1sum "94b6eb0c835f928c5ed565dc3ed1a355ac1b41e5" ;
        foaf:name "Dan Connolly" ;
        foaf:nick "DanC" ;
        foaf:workplaceHomepage <http://www.w3.org/People/Connolly/>
    ], [
        a foaf:Person ;
        foaf:homepage <http://ioctl.org/jan/> ;
        foaf:mbox_sha1sum "867ac51a36819bbc36620c41edecdc1372fb75dc", "94df76ca20cae1675798195abcada6e52f9391c8" ;
        foaf:name "Jan Grant" ;
        foaf:nick "jang" ;
        foaf:workplaceHomepage <http://www.ilrt.bris.ac.uk/about/staff/web_staff?search=cmjg>
    ], [
        a foaf:Person ;
        foaf:homepage <http://purl.org/net/eric/> ;
        foaf:mbox_sha1sum "fd1c7fa497930b8b24e3998927fcebe63509ef20" ;
        foaf:name "Eric Miller" ;
        foaf:nick "em", "emiller" ;
        foaf:workplaceHomepage <http://www.w3.org/People/EM/>
    ], [
        a foaf:Person ;
        rdfs:seeAlso <http://chimpen.com/foaf.rdf> ;
        foaf:homepage <http://chimpen.com> ;
        foaf:mbox_sha1sum "ca9f1895e1aab74bea68585fd626ed248042f825" ;
        foaf:name "Phil McCarthy"
    ], [
        a foaf:Person ;
        rdfs:seeAlso <http://www.w3.org/People/Berners-Lee/card.rdf> ;
        foaf:homepage <http://www.w3.org/People/Berners-Lee/> ;
        foaf:mbox_sha1sum "965c47c5a70db7407210cef6e4e6f5374a525c5c" ;
        foaf:name "Tim Berners-Lee"
    ], [
        a foaf:Person ;
        rdfs:seeAlso <http://www.rdfweb.org/people/danbri/rdfweb/danbri-foaf.rdf> ;
        foaf:mbox_sha1sum "241021fb0e6289f92815fc210f9e9137262c252e", "362ce75324396f0aa2d3e5f1246f40bf3bb44401", "f46850eab07e26c850847d88390530afcfee0711" ;
        foaf:name "Dan Brickley" ;
        foaf:nick "danbri"
    ], [
        a foaf:Person ;
        rdfs:seeAlso <http://www.libbymiller.com/webwho.xrdf> ;
        foaf:mbox_sha1sum "289d4d44325d0b0218edc856c8c3904fa3fd2875" ;
        foaf:name "Libby Miller" ;
        foaf:nick "libby"
    ], [
        a foaf:Person ;
        foaf:mbox_sha1sum "600dd27ff619633eabea90206bf14a6a4a88d7db" ;
        foaf:name "Matt Biddulph"
    ], [
        a foaf:Person ;
        foaf:homepage <http://www.mindswap.org/~bparsia/> ;
        foaf:mbox_sha1sum "f49a6854842c5fa76dc0edb8e82f8fe04fd56bc9" ;
        foaf:name "Bijan Parsia"
    ], [
        a foaf:Person ;
        foaf:homepage <http://www.cs.umd.edu/~hendler/> ;
        foaf:mbox_sha1sum "8de055c01fb32148bd71121a55edfa91cfc61cfa" ;
        foaf:name "Jim Hendler"
    ], [
        a foaf:Person ;
        foaf:mbox_sha1sum "c66b1cf8ee172f06b7b41f9e6257623ba14eab5f" ;
        foaf:name "Sean B. Palmer" ;
        foaf:nick "sbp" ;
        foaf:weblog <http://miscoranda.com/>
    ], [
        a foaf:Person ;
        foaf:mbox_sha1sum "be972c7a602683f7cf3c7a1fd0949c565debe4d3" ;
        foaf:name "Norm Walsh" ;
        foaf:nick "ndw" ;
        foaf:weblog <http://norman.walsh.name/>
    ] ;
    foaf:made <http://journal.dajobe.org/journal/2003/07/semblogs/>, <http://planetrdf.com/guide/> ;
    foaf:mbox_sha1sum "970987f991961f2553a1bf2574166fa29befbccb" ;
    foaf:name "Dave Beckett" ;
    foaf:title "Mr" ;
    foaf:weblog <http://journal.dajobe.org/journal/> ;
    foaf:workplaceHomePage <http://www.yahoo.com/> .

<http://journal.dajobe.org/journal/>
    dc:title "Dave Beckett -- Journalblog" ;
    a foaf:Document ;
    rdfs:seeAlso <http://journal.dajobe.org/journal/comments.rdf> .

<http://journal.dajobe.org/journal/comments.rdf>
    rss:title "Dave Beckett -- Journablog" ;
    a rss:channel .

<http://www.dajobe.org/face.png>
    dc:description "Picture of Dave in 2005" ;
    dc:format "image/png" ;
    dc:title "Dave Beckett" ;
    a foaf:Image .

<http://miscoranda.com/>
    dc:title "Miscoranda" ;
    a foaf:Document .

<http://norman.walsh.name/>
    dc:title "norman.walsh.name" ;
    a foaf:Document .

<http://planetrdf.com/guide/>
    rss:title "RDF Resource Guide" ;
    a rss:channel ;
    rdfs:seeAlso <http://planetrdf.com/guide/rss.rdf> .

<http://journal.dajobe.org/journal/2003/07/semblogs/>
    dc:title "Semantic Weblogs" ;
    a foaf:Document ;
    rdfs:seeAlso <http://journal.dajobe.org/journal/2003/07/semblogs/bloggers.rdf> .

<http://journal.dajobe.org/journal/2003/07/semblogs/bloggers.rdf>
    rss:title "Semantic Weblogs" ;
    a rss:channel .

<http://dublincore.org/>
    dc:title "Dublin Core Metadata Initiative" .

<http://www.w3.org/RDF/>
    dc:title "Resource Description Framework (RDF)" .

<http://purl.org/rss/>
    dc:title "RDF Site Summary (RSS 1.0)" .

<http://www.w3.org/Metadata/>
    dc:title "Metadata" .

<http://www.w3.org/2000/01/sw/>
    dc:title "Semantic Web" .

<http://journal.dajobe.org/journal>
    dc:date "2008-07-06T19:51:25Z" ;
    rss:description "RDF and free software hacking" ;
    rss:items [
        rdf:_1 <http://journal.dajobe.org/journal/posts/2008/07/06/redland-rdf-libraries-108-released/> ;
        rdf:_10 <http://journal.dajobe.org/journal/posts/2007/03/17/semantic-web-is-webby-data/> ;
        rdf:_2 <http://journal.dajobe.org/journal/posts/2008/06/28/the-flickcurl-story/> ;
        rdf:_3 <http://journal.dajobe.org/journal/posts/2008/04/05/raptor-web-library-1417/> ;
        rdf:_4 <http://journal.dajobe.org/journal/posts/2008/03/13/yahoo-search-reading-the-semantic-web/> ;
        rdf:_5 <http://journal.dajobe.org/journal/posts/2008/02/10/birthdays-xml-is-10-and-rdfxml-is-9/> ;
        rdf:_6 <http://journal.dajobe.org/journal/posts/2007/08/13/semantic-web-yahoo-part-deux/> ;
        rdf:_7 <http://journal.dajobe.org/journal/posts/2007/08/03/flickcurl-c-api-to-flickr/> ;
        rdf:_8 <http://journal.dajobe.org/journal/posts/2007/07/20/heading-to-oscon/> ;
        rdf:_9 <http://journal.dajobe.org/journal/posts/2007/03/25/triplr-stuff-in-triples-out/> ;
        a rdf:Seq
    ] ;
    rss:link "http://journal.dajobe.org/journal" ;
    sy:updateBase "2000-01-01T12:00+00:00" ;
    sy:updateFrequency "1" ;
    sy:updatePeriod "hourly" ;
    rss:title "Dave Beckett - Journalblog » comment" ;
    admin:generatorAgent <http://wordpress.org/?v=2.8-bleeding-edge> ;
    a rss:channel .

<http://journal.dajobe.org/journal/posts/2008/07/06/redland-rdf-libraries-108-released/>
    dc:creator "Dave Beckett" ;
    dc:date "2008-07-06T19:51:25Z" ;
    dc:subject "comment", "raptor", "rasqal", "rdf", "redland" ;
    rss:description """Yesterday I released updates for three of the four Redland packages:

	Rasqal RDF Query Library (rasqal) 0.9.16
	Redland RDF API Library (redland) 1.0.8
	Redland RDF Language bindings (redland-bindings) 1.0.8.1


This is a major release due to an ABI/API change in Rasqal that is needed for the future.  It only makes sense to upgrade ...""" ;
    rss:link "http://journal.dajobe.org/journal/posts/2008/07/06/redland-rdf-libraries-108-released/" ;
    content:encoded """<p>Yesterday I released updates for three of the four Redland packages:</p>
<ul>
<li><a href=\"http://librdf.org/rasqal/\">Rasqal RDF Query Library</a> (rasqal) 0.9.16</li>
<li><a href=\"http://librdf.org/\">Redland RDF API Library</a> (redland) 1.0.8</li>
<li><a href=\"http://librdf.org/bindings/\">Redland RDF Language bindings</a> (redland-bindings) 1.0.8.1</li>
</ul>
<p>This is a major release due to an ABI/API change in Rasqal that is needed for the future.  It only makes sense to upgrade all of these at the same time since they form a dependency chain.  So rather than three announcements, I made one and shipped <a href=\"http://download.librdf.org/binaries/redhat/fc7/\">Fedora Cora 7 RPMs</a> and <a href=\"http://download.librdf.org/binaries/debian/unstable/\">Debian deb</a> binaries too.</p>
<p>I also released a new version of the fourth package: <a href=\"http://librdf.org/raptor/\">Raptor RDF Parser and Serializer Library</a> (raptor) 1.4.18 a few weeks ago with new RDFa parser and atom-triples serializer, but that&#8217;s independent (details below).  Yesterday I added FC7 RPMs.</p>
<p>The individual package release notes are as follows:</p>
<dl>
<dt><b>Rasqal RDF Query Library 0.9.16</b></dt>
<dd>
<p><b>WARNING: ABI AND API CHANGED in this release.  Rasqal 0.9.16
is incompatible with 0.9.15.</b></p>
<ul>
<li>Added a rasqal_world object used for all constructor functions</ll>
<li>Removed deprecated functions and macros</li>
<li>Fixed some memory leaks and made some low-memory resilience fixes</li>
<li>Query result sets can be read/written from sparql XML results format</li>
<li>Improved error syntax error reporting</li>
</ul>
<p>See the <a href=\"http://librdf.org/rasqal.RELEASE.html#rel0_9_16\">Rasqal 0.9.16 Release Notes</a> for the full details of the changes.</p>
</dd>
<dt><b>Redland RDF Library 1.0.8</b></dt>
<dd>
<ul>
<li>Updated to use <a href=\"http://librdf.org/rasqal/\">Rasqal</a> 0.9.16 (from 0.9.15)</li>
<li>Updated to use <a href=\"http://librdf.org/raptor/\">Raptor</a> 1.4.18 (from 1.4.16)</li>
<li>Added a &#8216;trees&#8217; indexed in-memory storage</li>
<li>Improvements to low-memory and other failures of resource allocation</li>
<li>API additions and changes to concepts, parser and serializer classes.</li>
<li>Fixed Issue
<a href=\"http://bugs.librdf.org/mantis/view.php?id=0000256\">0000256</a></li>
</ul>
<p><strong>NOTE:</strong> The next release of redland will NOT
include raptor and rasqal in the tarball, they will be separate
download dependencies.</p>
<p>See the <a href=\"http://librdf.org/RELEASE.html#rel1_0_8\">Redland 1.0.8 Release Notes</a>
for the full details of the changes.</p>
</dd>
<dt><b>Redland RDF Language Bindings Version 1.0.8.1</b></dt>
<dd>
<ul>
<li>Synchronise with <a href=\"http://librdf.org/\">Redland</a> 1.0.8</li>
<li>Configuration now prefers pkg-config which helps OSX linking</li>
<li>Minor fixes to perl, python and ruby bindings.</li>
</ul>
<p>See the <a href=\"http://librdf.org/bindings/RELEASE.html#rel1_0_8_1\">Redland Bindings 1.0.8.1 Release Notes</a>
for the full details of the changes.</p>
</dd>
<dt><b>Raptor RDF Parser and Serializer Library 1.4.18</b></dt>
<dd>
<ul>
<li>Added an <a href=\"http://www.w3.org/TR/2008/CR-rdfa-syntax-20080620/\">RDFa</a> parser using an embedded version of <a href=\"http://rdfa.digitalbazaar.com/librdfa/\">librdfa</a> by Manu Sporny of <a href=\"http://www.digitalbazaar.com/\">Digital Bazaar</a>.</li>
<li>Added an Atom 1.0 (<a href=\"http://www.ietf.org/rfc/rfc4287.txt\">RFC 4287</a>) serializer with several output parameters.</li>
<li>Improved RSS 1.0 serializer functionality and resilience.</li>
<li>Added new API methods for qname, serializer, sequence and XML writer classes.
<li>Many other fixes and resilience improvements.</li>
<li>Fixed reported <a href=\"http://bugs.librdf.org/\">issues</a>: <a href=\"http://bugs.librdf.org/mantis/view.php?id=186\">0000186</a> and <a href=\"http://bugs.librdf.org/mantis/view.php?id=255\">0000255</a>.</li>
</ul>
<p>See the <a href=\"http://librdf.org/raptor/RELEASE.html#rel1_4_18\">Raptor 1.4.18 Release Notes</a>
for the full details of the changes.</p>
</dd>
</dl>
""" ;
    rss:title "Redland RDF Libraries 1.0.8 released" ;
    a rss:item .

<http://journal.dajobe.org/journal/posts/2008/06/28/the-flickcurl-story/>
    dc:creator "Dave Beckett" ;
    dc:date "2008-06-28T23:54:31Z" ;
    dc:subject "comment", "flickr", "raptor", "rdf", "redland" ;
    rss:description "In January 2007 I started playing with the Flickr API - the HTTP-based web service that lets you manipulate Flickr. At that point I was using it to play with machine tags and to see how the most popular Web Service API worked, especially in the area of authentication.  ..." ;
    rss:link "http://journal.dajobe.org/journal/posts/2008/06/28/the-flickcurl-story/" ;
    content:encoded """<p>In January 2007 I started playing with the <a href=\"http://www.flickr.com/services/api/\">Flickr API</a> &#8211; the HTTP-based web service that lets you manipulate Flickr. At that point I was using it to play with machine tags and to see how the most popular Web Service API worked, especially in the area of authentication.  This was in the days before <a href=\"http://oauth.net/\">OAuth</a> if you can remember that far back.</p>
<p>I started with a test program in C that called <a href=\"http://curl.haxx.se/libcurl/\">libcurl</a> and did some of the signing and parameter marshaling of the
<a href=\"http://www.flickr.com/services/api/flickr.photos.getInfo.html\">flickr.photos.getInfo</a>
call which is where all the juicy metadata about photos is.  I started thinking about ways to map photo  metadata into RDF for manipulating and querying; there is an existing Perl Flickr RDF mapping but it didn&#8217;t contain everything.  This state of sources was useful; it contained a small library with the one API method plus a command-line utility to call it.  Since I was using libCurl to call Flickr, I named it <strong>Flickcurl</strong>.  Also <a href=\"http://chris.m0nk3y.net/projects/CFlickr/\">CFlickr</a> was taken!  (Flickcurl also uses libxml but flickcurlibxml is just nuts).</p>
<p>Apart from playing with photo metadata I also had some personal reasons to make something new. I wanted a lighter weight and less formal project than the way I had been building the <a href=\"http://librdf.org/\">Redland RDF Libraries</a>.  More of <em>it compiles, ship it</em> model and less of the unit tests, test cases and continual <code>make check</code>, worrying about portability approach.  Maybe <em>more fun</em> would be a way to put it.  I&#8217;m happiest as a free software / open source software tool-builder and at this point in 2007 I was spending a lot of time at work doing non-coding things such as designing specifications and doing technical leadership and the chance to work on some different code now and then was appealing to counterpoint the work stuff.</p>
<p>Redland is a set of libraries that have been growing since mid-2000 with more and more features as the semantic web technology stack grows so at any point in time there is no clear end state.  For this project I wanted a clear goal to reach so I could be clearly <strong>done</strong> at some point.  This is possible with the Flickr API since there are at any time a finite number of API calls (something like 100) so progress can be measured&#8230; although Flickr did add API calls while I was working on it.  The result was I made a <a href=\"http://librdf.org/flickcurl/coverage.html\">Flickcurl API coverage</a> page with embedded API  changelog (automatically generated from source code comments).</p>
<p>Flickcurl 0.1 was &#8220;released&#8221; 2007-01-21 although I didn&#8217;t announce it to anyone at that point.  It was more of a tarball than an actual release.</p>
<p>One more thing I wanted to do was to experiment with different ways to tell people about software, compared to the ways I as using with Redland which was mostly email based but also via SourceForge and Freshmeat.  So for Flickcurl I tried a bunch of different ways:</p>
<ul>
<li>Mentioned 0.2 on <a href=\"http://twitter.com/\">Twitter</a> 24 Jan 2007. (3% of API)</li>
<li><a href=\"http://tech.groups.yahoo.com/group/yws-flickr/message/2776\">Announced 0.5</a> (and all later versions) on the <a href=\"http://tech.groups.yahoo.com/group/yws-flickr/\">yws-flickr Flickr API mailing list</a> in a single paragraph email on 4 Feb 2007. (3% of API)</li>
<li>Announced 0.6 on the <a href=\"http://chatlogs.planetrdf.com/swig/2007-02-11.html#T23-05-20\">#swig IRC channel</a> 11 Feb 2007. (6% of API)</li>
<li>Announced 0.7 (and all later versions) via Freshmeat releases of the <a href=\"http://freshmeat.net/projects/flickcurl/\">Flickcurl on freshmeat project</a> 18 Feb 2007. (10% of API)</li>
<li>Announced 0.11 in a blog post <a href=\"http://journal.dajobe.org/journal/posts/2007/08/03/flickcurl-c-api-to-flickr/\">Flickcurl &#8211; C API to Flickr</a> on 3 August 2007. (50% of API)</li>
<li>Announced 0.12 to the <a href=\"http://www.flickr.com/groups/api/discuss/\">Flickr API group</a> on 11 August 2007. (72% of API)</li>
</ul>
<p>That was kind of fun, and I also followed a similar light weight process with <a href=\"http://triplr.org/\">Triplr</a> but that&#8217;s another story.  I think caring less worked out fine; people did use it and submit patches.  Right now I still use the Flickr mailing list, API group, and freshmeat project.</p>
<p>As the library headed towards 100% of the API and beyond it did get a bit more formal and I imported what I think are the best practices from the Redland libraries:</p>
<ul>
<li>objects in C design</li>
<li>always refactoring the source code: refactoring is not just for dynamic languages</li>
<li>source code docu-comments generating an HTML <a href=\"http://librdf.org/flickcurl/api/\">API reference</a> via gtk-doc</li>
<li>folding in portability fixes</li>
<li>make it work with optional libraries for extra functionality (Raptor in this case, to allow serialising to other RDF syntaxes)</li>
<li>built in portable ANSI C</li>
<li>taking care about memory leaks with valgrind</li>
<li>comes with a utility program able to exercise the entire API (called <code>flickcurl</code>)</li>
<li>Debian packages (created by somebody else, yay!)</li>
<li>manual pages for the command line utilities</li>
</ul>
<p>The general aim was to get 100% of the Flickr API done by the end of 2007 and I actually reached it for Flickcurl 1.0 on 2008-01-12 which was pretty close.</p>
<p>So right now the library has gone beyond 1.0; the latest release is Flickcurl 1.4 which was released last Tuesday 24th June (see <a href=\"http://librdf.org/flickcurl/NEWS.html#D2008-06-2\">release notes</a>) which primarily added <strong>video</strong> support but I also updated the photo metadata mapping to RDF by adding a serializer class for abstracting the photo-to-triples process.</p>
<p>The RDF triple mappings is something that has always been there but not part of the core library.  It could be optionally used inside Raptor to automatically read Flickr photo URIs as RDF data sources.  I doubt it&#8217;ll ever be presented inside a public web service like <a href=\"http://triplr.org/\">Triplr</a> since it would require passing in Flickr API authentication tokens and user credentials.</p>
<p>The RDF triples mapping I&#8217;ve made for the Flickr photo metadata has mixture of vocabularies which are in 3 buckets:</p>
<ol>
<li><strong>Existing Vocabularies</strong>: well known RDF schemas (class and properties) that have been developed over many years by multiple people and organisations, sometimes with a lot of formality.</li>
<li><strong>Flickr-specific Vocabularies</strong>: vocabularies I made up mostly for Flickr video and places API terms.</li>
<li><strong>Machine Tag Vocabularies</strong>: I made them up using machinetags.org/ns URIs as a root for the namespaces associated with the vocabularies.  The terms in the vocabularies come from how people used machine tags on Flickr and are not always defined.</li>
</ol>
<p>This is a range of what might be called semantic web heavy to light although there is absolutely nothing wrong with mixing things up if you are not worried about inference.  This is OK!  I should probably put some html/schema documents at the vocabularies and get the redirects and all that # and / business sorted so that the linked data works out properly but what I have now is just a start and I&#8217;d be interested to see what people think.  There are more details of the vocabularies and terms I&#8217;m using in the <a href=\"http://librdf.org/flickcurl/NEWS.html#D2008-06-2\">Flickcurl 1.4 release notes</a> although I should probably add vocabulary information to the documentation too.</p>
<p>That&#8217;s all for now but I&#8217;ll expand some more in another post about the Flickr API itself and my experience with it and impressions of it as a both a software developer and HTTP Web Service designer.</p>
""" ;
    rss:title "The Flickcurl Story" ;
    a rss:item .

<http://journal.dajobe.org/journal/posts/2008/04/05/raptor-web-library-1417/>
    dc:creator "Dave Beckett" ;
    dc:date "2008-04-06T03:24:54Z" ;
    dc:subject "comment", "raptor", "rdf", "xml" ;
    rss:description """Last week I released version 1.4.17 of my Raptor C library (release notes) but in the 38 releases over the 7 years or so since I started building it, there's more to see than just triples.


I/O stream API
Abstracts from specifics of I/O so that you can read/from write to any ...""" ;
    rss:link "http://journal.dajobe.org/journal/posts/2008/04/05/raptor-web-library-1417/" ;
    content:encoded """<p>Last week I released version 1.4.17 of my <a href=\"http://librdf.org/raptor/\">Raptor</a> C library (<a href=\"http://librdf.org/raptor/RELEASE.html#rel1_4_17\">release notes</a>) but in the 38 releases over the 7 years or so since I started building it, there&#8217;s more to see than just triples.</p>
<dl>
<dt><a href=\"http://librdf.org/raptor/api/raptor-section-iostream.html\"><b>I/O stream API</b></a></dt>
<dd>Abstracts from specifics of I/O so that you can read/from write to any of a string/memory buffer, a file, a C <code>FILE*</code> or any custom user data structure.  Similar to C++ idea of stream.  This allows lazy evaluation of I/O and using language-specific I/O routines such as PerlIO (potentially, not yet!).  The read abstraction is new in 1.4.17.</dd>
<dt><a href=\"http://librdf.org/raptor/api/raptor-section-sequence.html\"><b>Sequence API</b></a></dt>
<dd>For small lists of data items that can grow at either end.  This allow small lists, stacks and queues to be made when needed, and iterated over.  Do not use for large lists!  (Something else is coming along to handle this soon.)</dd>
<dt><a href=\"http://librdf.org/raptor/api/raptor-section-stringbuffer.html\"><b>Stringbuffer API</b></a></dt>
<dd>Provides a growing string class, similar to Java&#8217;s StringBuffer, which can be added to many times and then the result obtained (with no further changes allowed).  This is handy for constructing formatted output, queries using parameters and values which is hard in C without entering the world of <code>char buf[<em>big enough</em>]</code>.  The stringbuffer API tries hard to minimise copying.</dd>
<dt><a href=\"http://librdf.org/raptor/api/raptor-section-unicode.html\"><b>Unicode API</b></a></dt>
<dd>For a small part of Unicode that is used near XML; UTF-8 encoding and decoding and Normal Form C validation.  Nearby it provides XML 1.0 and 1.1 name-checking/validation functions.</dd>
<dt><a href=\"http://librdf.org/raptor/api/raptor-section-uri.html\"><b>URI API</b></a></dt>
<dd>Construction of URIs, resolving of relative URIs and turning absolute URIs into relative.  It handles the <a href=\"http://www.ietf.org/rfc/rfc3986.txt\">RFC3986 URI spec</a> updates.</dd>
<dt><a href=\"http://librdf.org/raptor/api/raptor-section-www.html\"><b>Web fetch API</b></a></dt>
<dd>Retrieving of content from a URI in chunks of bytes.  It works by calling curl, libxml or BSD libfetch underneath.  It also handles redirections and adjusting any base URIs for 30x responses, returning content type headers early so that content negotiation can be done and customisation of the requests to send appropriate <code>User-Agent</code> and <code>Cache-Control</code> headers (latter, new in 1.4.17)</dd>
<dt><a href=\"http://librdf.org/raptor/api/raptor-section-sax2.html\"><b>XML with Namespaces Streaming (SAX2) Reader API</b></a> (newly public in 1.4.17).</dt>
<dd>Streaming reading of large XML documents over either libxml2 or expat (build time choice with <code>configure</code>).  Expat out of the box does not support namespaces and XML QNames, so Raptor adds those and hides various library differences and some bugs.  The XML API also provides full XML Base (<code>xml:base</code>) support.
</dd>
<dt><a href=\"http://librdf.org/raptor/api/raptor-section-xml.html\"><b>XML Writer API</b></a></dt>
<dd>Write XML elements as Canonical XML output.</dd>
</dl>
<p>Some of the above are large pieces of work and some are small, but they are all solid and many have been used for multiple years in production.  These turned out to be handy datatype classes for web programming and I needed them since RDF is built with web technology.</p>
<p>The bonus is that all of the above is used to provide the signature features of Raptor: <a href=\"http://librdf.org/raptor/api/raptor-section-parser.html\"><b>RDF Parsing</b></a> &#8211; turning syntax into triples and <a href=\"http://librdf.org/raptor/api/raptor-section-serializer.html\"><b>RDF Serializing</b></a> &#8211; turning triples into syntax.  Raptor now parses 7 syntaxes (GRDDL, N-Triples, RDF/XML, RSSes, Atom, TRiG, Turtle) and serializes to 10 (Atom 1.0, GraphViz DOT, JSON * 2, N-Triples, RDF-XML * 3, RSS 1.0, Turtle).  The JSON outputs are new for 1.4.17</p>
<p>So although <a href=\"http://librdf.org/raptor/\">Raptor</a> deals with all the RDF syntax details, it does a lot more.  But I&#8217;m not changing the name!</p>
""" ;
    rss:title "Raptor Web Library 1.4.17" ;
    a rss:item .

<http://journal.dajobe.org/journal/posts/2008/03/13/yahoo-search-reading-the-semantic-web/>
    dc:creator "Dave Beckett" ;
    dc:date "2008-03-14T02:43:36Z" ;
    dc:subject "comment" ;
    rss:description "Yahoo! Search announced today in their blog post that they will soon support in the Search Monkey project the use of semantic web technologies such as RDFa with standard vocabularies such as FOAF and Dublin Core.  It also will do a lot of other cool stuff that you can ..." ;
    rss:link "http://journal.dajobe.org/journal/posts/2008/03/13/yahoo-search-reading-the-semantic-web/" ;
    content:encoded """<p><a href=\"http://search.yahoo.com/\">Yahoo! Search</a> <a href=\"http://www.ysearchblog.com/archives/000527.html\">announced</a> today in their blog post that they will soon support in the <em>Search Monkey</em> project the use of semantic web technologies such as RDFa with standard vocabularies such as FOAF and Dublin Core.  It also will do a lot of other cool stuff that you can read about above.</p>
<p>It was nice to see that
<a href=\"http://www.readwriteweb.com/archives/yahoo_supports_semantic_web.php\">several</a>
 <a href=\"http://www.techcrunch.com/2008/03/13/yahoo-embraces-the-semantic-web-expect-the-web-to-organize-itself-in-a-hurry/\">other</a> 
<a href=\"http://searchengineland.com/080226-000100.php\">people</a>
<a href=\"http://blogs.zdnet.com/semantic-web/?p=114\">noticed</a> 
<a href=\"http://novaspivack.typepad.com/nova_spivacks_weblog/2008/03/twine-perspecti.html\">this</a>.
(<a href=\"http://www.techmeme.com/080313/h2225\">Techmeme frozen page &#8211; #1 story</a>)
</p>
<p>I didn&#8217;t work on this project and don&#8217;t work in the search division,
but continue to build with Semantic Web technologies in another more internal-facing part of Yahoo!  But it is exciting to see that there are more public applications getting out, such as this and research projects like <a href=\"http://tripletalk.wordpress.com/2008/02/20/microsearch/\">microsearch by Peter Mika</a>.</p>
""" ;
    rss:title "Yahoo! Search reading the semantic web" ;
    a rss:item .

<http://journal.dajobe.org/journal/posts/2008/02/10/birthdays-xml-is-10-and-rdfxml-is-9/>
    dc:creator "Dave Beckett" ;
    dc:date "2008-02-11T05:30:22Z" ;
    dc:subject "comment" ;
    rss:description """Happy 10th Birthday XML.

It's clear you are going to be around for some time.  People know your good points and bad and have got the kinks worked out using you in production, in diversity and at scale.

Take care not to be distracted in the next 10 years by sexy ...""" ;
    rss:link "http://journal.dajobe.org/journal/posts/2008/02/10/birthdays-xml-is-10-and-rdfxml-is-9/" ;
    content:encoded """<p>Happy 10th Birthday XML.</p>
<p>It&#8217;s clear you are going to be around for some time.  People know your good points and bad and have got the kinks worked out using you in production, in diversity and at scale.</p>
<p>Take care not to be distracted in the next 10 years by sexy new text formats that overlap in some features, but don&#8217;t replace you for many uses.  I&#8217;m talking about you, <a href=\"http://www.json.org/\">JSON</a>.</p>
<p>In the RDF world, RDF/XML is the syntax people love to hate, or just love/hate. It is 1 year younger than you, so maybe in February 2009 we&#8217;ll have something to celebrate about <a href=\"http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/\">that</a>.  Yeah, it might happen :)</p>
<p>I recently made a new textual RDF syntax sibling Turtle with <a href=\"http://www.w3.org/People/Berners-Lee/\">TimBL</a> whose <a href=\"http://www.w3.org/TeamSubmission/2008/SUBM-turtle-20080114/\">official birthday</a> was last month, although it&#8217;s actual birth was <a href=\"http://www.dajobe.org/2004/01/turtle/\">January 2004 in Bristol</a>, or earlier if you look into it&#8217;s ancestry.  In 6 (10?) more years it&#8217;ll be something we can properly rely on, like XML is today.
</p>
<p>Dave</p>
<p>P.S. For more memories, check out <a href=\"http://www.tbray.org/ongoing/When/200x/2008/02/10/XML-People\">Tim</a>, <a href=\"http://www.xmlgrrl.com/blog/archives/2008/02/10/xml-at-x-film-at-xi/\">Eve</a> and <a href=\"http://norman.walsh.name/2008/02/10/xml10\">Norm</a> who were involved in XML from very early on when I was just an observer.</p>
""" ;
    rss:title "Birthdays – XML is 10 and RDF/XML is 9" ;
    a rss:item .

<http://journal.dajobe.org/journal/posts/2007/08/13/semantic-web-yahoo-part-deux/>
    dc:creator "Dave Beckett" ;
    dc:date "2007-08-14T02:05:37Z" ;
    dc:subject "comment", "rdf", "yahoo" ;
    rss:description """It's been nearly 2 years since I joined Yahoo! and the
the semantic web-based technology I helped develop has
been deployed in production for some time.  It has been
encouraging to see the ideas get more accepted since
today I noticed that in a
hotjobs
search for
rdf yahoo near Sunnyvale
there 5 jobs open - not ...""" ;
    rss:link "http://journal.dajobe.org/journal/posts/2007/08/13/semantic-web-yahoo-part-deux/" ;
    content:encoded """<p>It&#8217;s been nearly 2 years since I joined Yahoo! and the
the semantic web-based technology I helped develop has
been deployed in production for some time.  It has been
encouraging to see the ideas get more accepted since
today I noticed that in a
<a href=\"http://hotjobs.yahoo.com/\">hotjobs</a>
search for
<a href=\"http://hotjobs.yahoo.com/jobseeker/jobsearch/search_results.html?type=main&amp;metro_area=1&amp;country1=USA&amp;page_number=1&amp;order_by=relevancy&amp;reverse_order=0&amp;banded_display=1&amp;search_type_form=quick&amp;updated_since=sixtydays&amp;related_titles=4&amp;detailed_display=0&amp;pref_display=0&amp;intl=us&amp;save_recent=1&amp;query_city1=Sunnyvale&amp;keywords_all=rdf+yahoo&amp;ulm_input1=Sunnyvale%2C+CA&amp;industry1=\">rdf yahoo near Sunnyvale</a>
there 5 jobs open &#8211; not in my group, but in
<a href=\"http://local.yahoo.com/\">Yahoo! Local</a>.
</p>
<p>Our group in Sunnyvale <b>is</b> continuing to look for
HTTP and web caching experts, designers and coders for building
REST-based web services.  Right here and now we have interesting,
large scale, rich data problems and are applying semweb
techniques to them.  <a href=\"http://www.dajobe.org\">Contact me</a> if any of this sounds exciting to you.
</p>
<p>
<a href=\"http://journal.dajobe.org/journal/posts/2005/09/05/semantic-web-yahoo/\">Semantic Web Yahoo &#8211; Part one</a></p>
""" ;
    rss:title "Semantic Web Yahoo – Part Deux" ;
    a rss:item .

<http://journal.dajobe.org/journal/posts/2007/08/03/flickcurl-c-api-to-flickr/>
    dc:creator "Dave Beckett" ;
    dc:date "2007-08-04T06:59:25Z" ;
    dc:subject "comment" ;
    rss:description """In January 2007 just for fun I started writing a C API to Flickr using
the Flickr web services
called Flickcurl.  The name
was because it was originally built using Flickr via
libCurl to do the HTTP
work ... although right now it contains more use of
libxml than of libcurl.


I started this for a ...""" ;
    rss:link "http://journal.dajobe.org/journal/posts/2007/08/03/flickcurl-c-api-to-flickr/" ;
    content:encoded """<p>In January 2007 just for fun I started writing a C API to Flickr using
the <a href=\"http://www.flickr.com/services/\">Flickr web services</a>
called <a href=\"http://librdf.org/flickcurl/\">Flickcurl</a>.  The name
was because it was originally built using Flickr via
<a href=\"http://curl.haxx.se/libcurl/\">libCurl</a> to do the HTTP
work &#8230; although right now it contains more use of
<a href=\"http://xmlsoft.org/\">libxml</a> than of libcurl.
</p>
<p>I started this for a bunch of reasons, including to learn more about
&#8220;web 2.0&#8243; web APIs, see how RESTy the Flickr API really is (Answer: not much,
it&#8217;s very much an RPC model) and the issues with developing a Web API.
It&#8217;s clear this is an evolved and evolving one since now and then I discover
undocumented returned attributes in the XML and cases where it is not
clear why attributes were used instead of elements.  It&#8217;s very suited towards
dynamic scripting languages where it is easy to pass around dictionaries / 
hashes / associative arrays of parameters that can grow.  So in some sense,
making something feel like a natural API in a static language like C is rather
going against the grain and rather slow work.</p>
<p>There are, however, things available to help.  There are
method
<a href=\"http://www.flickr.com/services/api/flickr.reflection.getMethodInfo.html\">reflection APIs</a>
so I wrote a code generating program that can nicely
automate writing many of the simpler calls that return no value or just a
single one. I also used a lot of similar patterns so that parsing tags xml is
quite similar to parsing comments xml.  The XML is primarily read
via XPath and a little DOM.</p>
<p>One other nice thing about this is that this a piece of work with a fixed
size, albeit growing slowly.  The Flickr API currently has 104 calls &#8211; depending
on how you measure them &#8211; so it&#8217;s easy to check progress, and that&#8217;s
how I&#8217;ve been doing it.  I built tools to read the docu-comments (javadoc, gnome-doc, kernel-doc style) and mark the
<a href=\"http://librdf.org/flickcurl/coverage.html\">Flickcurl coverage</a>
release by release.</p>
<p>The news today is that I have reached the
<em>half way point: 50%</em> of the APi
with the release of
<a href=\"http://librdf.org/flickcurl/NEWS.html\">Flickcurl 0.11</a>
at least until they add something more!  I have also done most of what I
think are the trickier parts &#8211; the uploading, searching and getting info about
photos.  The remaining API parts are more regular, so I feel like I&#8217;m coding
downhill now.
</p>
<p>Now there&#8217;s something else it does &#8211; and this won&#8217;t be a surprise to
most given my interests.  Flickcurl generates RDF descriptions from Flickr
photos with a <code>flickrdf</code> utility, including reading
<a href=\"http://machinetags.org/\">Machine Tags</a>.  The
namespaces are either well known ones, or invented by me,
pointing at the machinetags.org wiki &#8211; you can create your own
definition.</p>
<p>flickrdf uses
<a href=\"http://librdf.org/raptor/\">Raptor</a> to do nicer serializing
when it is available.
So this means I can <strong>turn jellyfish into
<a href=\"http://www.dajobe.org/2004/01/turtle/\">Turtles</a></strong>. W00t! <small>(*)</small></p>
<pre>
$ ./flickrdf -o turtle http://www.flickr.com/photos/dajobe/196308964/
@prefix rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt; .
@prefix dc: &lt;http://purl.org/dc/elements/1.1/&gt; .
@prefix foaf: &lt;http://xmlns.com/foaf/0.1/#&gt; .
@prefix geo: &lt;http://www.w3.org/2003/01/geo/wgs84_pos#&gt; .
@prefix xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt; .

&lt;http://www.flickr.com/photos/dajobe/196308964/&gt;
    dc:creator [
        a foaf:Person;
        foaf:maker &lt;http://www.flickr.com/photos/dajobe/196308964/&gt;;
        foaf:name \"Dave Beckett\";
        foaf:nick \"dajobe\"
    ];
    dc:dateSubmitted \"2006-07-23T18:16:13Z\"^^xsd:dateTime;
    dc:rights &lt;http://creativecommons.org/licenses/by-nc-sa/2.0/&gt;;
    dc:modified \"2007-02-25T07:45:46Z\"^^xsd:dateTime;
    dc:issued \"2006-07-23T18:16:13Z\"^^xsd:dateTime;
    dc:created \"2006-07-23T05:28:50Z\"^^xsd:dateTime;
    geo:lat \"36.620487\";
    geo:long \"-121.904468\";
    dc:title \"Jellyfish at Monterey Aquarium\";
    dc:subject \"jellyfish\" .
</pre>
<p>After that bad joke (and it could have been worse if I had a picture
of a Turtle) here&#8217;s what you need to know. Get it at
<a href=\"http://download.dajobe.org/flickcurl/flickcurl-0.11.tar.gz\">flickcurl-0.11.tar.gz</a>
(md5sum eea351e4d35e8d1c63b124cd8ee257ba,
sha1sum d220f6371c0c5334c824a51ba848d9358d73e533)
or the latest in the
<a href=\"http://svn.dajobe.org/view/\">Flickcurl Subversion</a>
It&#8217;s licensed under the GPL2 / LGPL2 / Apache 2.0 or any newer
versions of any of them.
</p>
<p>Note: I work for Yahoo! and although Flickr is part of
Yahoo! this project is my own personal work.
</p>
<p><small>(*) Actually I&#8217;m slightly cheating with this example, there&#8217;s
a couple of bug fixes in SVN after the release which are needed
to get this output.
</small></p>
""" ;
    rss:title "Flickcurl – C API to Flickr" ;
    a rss:item .

<http://journal.dajobe.org/journal/posts/2007/07/20/heading-to-oscon/>
    dc:creator "Dave Beckett" ;
    dc:date "2007-07-21T03:39:04Z" ;
    dc:subject "comment" ;
    rss:description """I am heading to Portland next week for the
O'Reilly Open Source Conference 2007
which I've been to only once before.
This year's conference has around 15 parallel tracks, which makes it pretty huge to follow.
I'm hoping to get learn lots of new things, be inspired with ideas, meet some great people, and ...""" ;
    rss:link "http://journal.dajobe.org/journal/posts/2007/07/20/heading-to-oscon/" ;
    content:encoded """<p>I am heading to Portland next week for the
<a href=\"http://conferences.oreillynet.com/os2007/\">O&#8217;Reilly Open Source Conference 2007</a>
which I&#8217;ve been to only once before.
This year&#8217;s conference has around 15 parallel tracks, which makes it pretty huge to follow.
I&#8217;m hoping to get learn lots of new things, be inspired with ideas, meet some great people, and who knows, maybe hire some to
<a href=\"http://careers.yahoo.com/\">work with me</a> ;)</p>
""" ;
    rss:title "Heading to OSCON" ;
    a rss:item .

<http://journal.dajobe.org/journal/posts/2007/03/25/triplr-stuff-in-triples-out/>
    dc:creator "Dave Beckett" ;
    dc:date "2007-03-25T23:49:09Z" ;
    dc:subject "comment" ;
    rss:description """I've made a new thing: Triplr
for GETting semwebby data.  Go check it out.


It's unrelated to the other older new thing not previously
mentioned in a blog post:
Flickcurl
which is the C library I made for the
Flickr API
(about 25% complete) although I did steal the cute name from the utility
which turns a ...""" ;
    rss:link "http://journal.dajobe.org/journal/posts/2007/03/25/triplr-stuff-in-triples-out/" ;
    content:encoded """<p>I&#8217;ve made a new thing: <a href=\"http://triplr.org/\">Triplr</a>
for <code>GET</code>ting semwebby data.  Go check it out.
</p>
<p>It&#8217;s unrelated to the other older new thing not previously
mentioned in a blog post:
<a href=\"http://librdf.org/flickcurl/\">Flickcurl</a>
which is the C library I made for the
<a href=\"http://www.flickr.com/services/api/\">Flickr API</a>
(about 25% complete) although I did steal the cute name from the utility
which turns a Flickr photo&#8217;s description into triples, with the help
of the new machine tags support.  My conversion could be improved,
I had to invent some namespaces.</p>
""" ;
    rss:title "Triplr – stuff in, triples out" ;
    a rss:item .

<http://journal.dajobe.org/journal/posts/2007/03/17/semantic-web-is-webby-data/>
    dc:creator "Dave Beckett" ;
    dc:date "2007-03-18T03:30:28Z" ;
    dc:subject "comment" ;
    rss:description "I often been puzzled why people write \"The Semantic Web is AI\" and \"The Semantic Web is a top-down design\" and \"The Semantic Web is Ontologies\".  As far as I'm concerned, all of those are bogus.  I think I've worked out why they write this - they aren't ..." ;
    rss:link "http://journal.dajobe.org/journal/posts/2007/03/17/semantic-web-is-webby-data/" ;
    content:encoded """<p>I often been puzzled why people write &#8220;The Semantic Web is AI&#8221; and &#8220;The Semantic Web is a top-down design&#8221; and &#8220;The Semantic Web is Ontologies&#8221;.  As far as I&#8217;m concerned, all of those are bogus.  I think I&#8217;ve worked out why they write this &#8211; they aren&#8217;t talking to anyone actually working directly on the technologies.</p>
<p>The semantic web is: a webby way to link data.  That is all.</p>
<p>Everything beyond that is entirely optional fluff: data vs metadata, syntaxes, ontologies, query languages, rules, logic, &#8230;</p>
<p>This is my &#8220;<em>lowercase</em>&#8221; semantic web and the basis of what I have in running
production code right now.</p>
<p>I&#8217;ll probably use that as my theme when I speak about
<em> A Little Semantics Can Go a Long Way</em> on the panel at the
<a href=\"http://www.semantic-conference.com/\">Semantic Technology Conference</a>
in San Jose in May.  ( I&#8217;ll  also be at <a href=\"http://www2007.org/\">WWW2007</a> in Banff, Canada and <a href=\"http://2007.xtech.org/\">XTech 2007</a> in Paris. )</p>
""" ;
    rss:title "semantic web is webby data" ;
    a rss:item .


