SIOC reader (universal) widget

On yesterday’s SIOC brainstorming, Knud Möller mentioned the use of widgets to browse SIOC data.

I take a look today at the Universal Widget API from Netvibes and wrote a simple widget, that will query any SPARQL endpoint of your choice (need to support JSON output for SELECT queries) for fresh SIOC data. There’s certainly a lof of funniest things we can do with SIOC and widgets (eg: find similar posts in all the sioc-o-sphere when browsing a blog, related pictures, people …), but that’s a starting point. Here’s what it looks like in iGoogle

siocwidget.png

You can setup the number of items you want to retrieve, as well as the type (default sioc:Post) and the property used to match the date (since I noticed that some SIOC data use dct:modified while others juste use dct:created - it’s time for a SIOC-best practices guide !). Just go to the widget editing interface to change the values. By default, the widget uses one of the Talis platform endpoint URL, thanks a lot to Keith Alexander for quickly setting a JSON-enabled endpoint so that I debugged the widget !

The widget constructs the following query according your parameters:

SELECT ?post ?title
WHERE {
  ?post rdf:type $type ;
    ?post dc:title ?title ;
    ?post $date ?date .
}
ORDER BY DESC (?date) LIMIT $limit

This is the kind of widget that would be cool to plug to a SPARQLPress endpoint to get a quick overview of the activity of your social network, i.e. what are the last thing your friends twit, post, or listened to.

To use it, just go there and you’ll be able to add it to iGoogle or netvibes. If you want to use a standalone version or put it on your blog, you may need additonal resources. I can’t make it work on Dashboard yet, but I hope it will be ok soon.

MOAT module for Drupal 5

A first release of the MOAT module for Drupal 5 is available on drupal.org (get from cvs for latest features).

It features a simple interface that will query a server for the tags you used and show the available URIs that have been defined by yourself or by other users of the same server. At the moment, it makes no distinction between both, neither between your friends’URIs and other people ones.

You can also add a new URI, which will be automatically sent to the server so that anyone can re-use it later.

It outputs the node with the SIOC module and a sioc:topic link (output example), a next release will feature “moat-augmented” RetrictedTagging objects from the Tag ontology.

And so, if your application pings PTSW or someone browe the page with Semantic Radar, its content will be available almost instantaneously for semweb applications.

Introducing MOAT

I’m happy to announce the MOAT project:

MOAT (Meaning Of A Tag) provides a Semantic Web framework to publish semantically-annotated content from free-tagging.

While tags are widely used in Web 2.0 services, their lack of machine-understandable meaning can be a problem for information retrieval, especially when people use tags that can have different meanings depending on the context.

MOAT aims to solve this by providing a way for users to define meaning(s) of their tag(s) using URIs of Semantic Web resources (such as URIs from dbpedia, geonames … or any knowledge base), and then annotate content with those URIs rather than free-text tags, leveraging content into Semantic Web, by linking data together. Moreover, tag meanings can be shared between people, providing an architecture of participation to define and exchange potential meanings of tags within a community of users.

To achieve this goal, MOAT relies on an architecture that can be deployed for any organisation or community and that involves a lightweight ontology, a MOAT server, and some third-party clients .

More details about the framework and its implementation are described on the project website. A demo server is available here, and updates should be done soon (code and documentation).

One FOAF fits all

A few years ago, I created my FOAF profile with FOAF-O-Matic. But actually, I almost never updated it and its foaf:knows list.

So, now, I’ll let external websites manage those informations.
I have exports in RDF of my flickr, twitter and facebook accounts, as well as this weblog (in progress), and in most of them, I define those relationships to the people I know. Since all those files define a URI for myself, I can use my main (I mean hosted by my own) FOAF file as a reference profile that will link myself to my other URIs using owl:sameAs, and also add rdfs:seeAlso links to the related files (as described here), eg:

<owl:sameAs
  rdf:resource="http://apassant.net/home/2007/12/flickrdf/people/33669349@N00"
  rdfs:seeAlso="http://apassant.net/home/2007/12/flickrdf/data/people/33669349@N00"/>

<owl:sameAs
  rdf:resource="http://twitter.com/terraces"
  rdfs:seeAlso="http://tools.opiumfield.com/twitter/terraces/rdf"/>

And I’ll get a decentralized foaf:knows network, as shown on this graph:

onefoaf.png

Then, I can grab all these profiles in a local RDF store, or even better, use a dedicated Semantic Web “social graph manager” as Knowee or Beatnik to get all my contacts locally, get their e-mail, query profiles, or as David said, integrates in other desktop apps and sync with my iphone (ok, I don’t have one yet :) ) …

And if services as linked-in or bibliography repositories export FOAF URIs for anyone, as the FOAF/DBLP service already offers, I could even link to people I worked with. In case all those services exports data with only foaf:knows and I want to be more precice, I can refine relationships in my profile using the RELATIONSHIP vocabulary, or maybe even include rules in my profile that could then be taken into consideration by agents that will query it ? Something like:

( GRAPH <http://linkedin/foafexport/mygraph> { #me foaf:knows ?x } )
=>
( #me rel:collaboratesWith ?x )

that will be in my profile itself.

Finally, since I can create a link to this FOAF profile from my OpenID, I can reuse this graph in many applications. And when login to a new service, ask him “is there anyone here that I know from flickr ?”.

More than social network, I can also link from the same profile (or, actually, from the profiles that have been linked to the reference one) to various things I wrote or done on the Web, as data from last-fm, revyu or flickr, thanks to SIOC, as explained here.

So: One reference profile. Lots of distributed information. One Giant Global Graph.

NB: Also check some of Dan Brickley’s experiments about related topics.

NB2: I did not take trust issues in consideration in that post, i.e. how can we be sure that the owl:sameAs relationship is linked to an URI which is really *me*. I think one solution would be to authenticate on those websites using OpenID so that it can find my FOAF file, then my URI, and add an owl:sameAs link in the other direction. Both files should also be signed, and I think that will be ok (?).

Wordpress, FOAF, OpenID - updated

Here’s an update of my previous experiments on retrieving FOAF profiles when users authenticate a wordpress blog with OpenID.

The openid plug-in for Wordpress is now stable (I made the experiments on svn versions), so here’s the piece of code that retrieves profiles when creating user account - tested with v2.1.2 of wp-openid.

Unpack the tgz in your the wp-openid folder, and check readme-foaf.txt for instructions. This version also features a function you can add in your templates to show the FOAF icon and a link to the profile in comments, and a way to cron the autodiscovery feature for profiles updates (Edit: The cron now tries to find FOAF files from user homepages, see comments).

I’ll maintain this hack for next updates of wp-openid (unless it’s in the plug-in itself). Nexts steps will be to retrieve people URI (more than just the profile, which should be easy if people use the foaf:openid property in their profile) and use these data in the SIOC and FOAF exports for Wordpress. It will be one more way to provide a RDF-ized social graph, with reference to existing profiles and URIs.