Friday, May 20, 2011

Feature of the Week: Improved Content-Negotiation Capabilities

Today I describe a rather technical feature of BibSonomy that is important for programmers and in particular for Semantic Web enthusiasts.
As I already mentioned in my post from EKAW 2010, we are constantly trying to improve BibSonomy's integration into the Linked Data Cloud. In the 2.0.14 release of BibSonomy a new content negotiation mechanism was implemented that augments our first implementation from 2007.

Instead of using the special /uri/ prefix, we now perform content negotiation on all URLs BibSonomy serves. Depending on the HTTP Accept header of your client, you are redirected (with the HTTP status code 303 See Other) to a view representing the requested resource(s) in a corresponding format. The following media types are currently supported:
application/rdf+xml
RDF output according to the BuRST specification. This is basically a combination of the RSS and SWRC schema to describe publication references. Hence, currently only the publication posts are returned.
application/json
All posts (bookmarks and publications) in JSON format. This is a lightweight JavaScript data structure.
text/csv
All posts (bookmarks and publications) as comma separated values (CSV).
text/x-bibtex
Publications in BibTeX format.

In particular the application/rdf+xml media type is important for BibSonomy's integration in the Linked Data Cloud. There are still some issues we have to fix, e.g., proper representation of author order or the vocabulary to represent tagging information (e.g., using commontag.org in favour of/addition to the RSS taxonomy module). Therefore, many thanks to Sebastian Tramp and Pascal Hitzler for there helpful comments.


Finally: Please note that content negotiation works for all URLs, even when it currently does not really make sense. E.g., when you request the /login page in application/rdf+xml, you get a redirect to /burst/login. Since this page does not exist, you get a 404 Not Found error.