Depuis un certain temps, je regarde très régulièrement des films et voulais maintenir une liste des films vus. J’ai donc demandé conseil à la communauté Web Sémantique :

Je souhaite mettre en ligne une liste des films que j’ai récemment visionnés. Il existe sûrement des services 2.0 pour ce genre de chose, mais c’est terriblement plus drôle de faire cela soit-même, surtout quand cela devient un prétexte à l’utilisation de RDF.

Avec l’aide de Karl, je suis arrivé à ceci :

@prefix : <#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix imdb: <http://www.csd.abdn.ac.uk/~ggrimnes/dev/imdb/IMDB#> .
@prefix rev: <http://www.purl.org/stuff/rev#> .

:me a foaf:Person;
  foaf:name "Simon Rozet" .

<http://www.imdb.com/title/tt0105236/> a imdb:Movie ;
    dc:title "Reservoir Dogs";
    imdb:year "1992";
    rev:hasReview :rd-1 .

:rd-1 a rev:Review ;
    dc:date "2006-08-25";
    rev:reviewer :me;
    rev:subject <http://www.imdb.com/title/tt0105236/>;
    rev:rating "10"^^xsd:integer .

Pour le moment, j’utilise les informations d’IMDb même si le service est, comme le signalait Karl, loin d’être parfait (au niveau de l’internationalisation par exemple), c’est le plus complet. En attendant d’implémenter l’idée de Karl ?

Pour la collecte des données, je fais tout à la main :-) Pour moi, le but de la syntaxe Notation3, à savoir être plus lisible que du RDF/XML, est atteint.

Avec la sortie de la nouvelle version de rdflib qui intègre un parser SPARQL, je peux désormais écrire une requête pour récupérer toutes ces informations :

#!/usr/bin/env python
from rdflib.Graph import Graph

g = Graph()
g.load('movies.n3', format='n3')
result = g.query("""PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX imdb: <http://www.csd.abdn.ac.uk/~ggrimnes/dev/imdb/IMDB#>
PREFIX rev: <http://www.purl.org/stuff/rev#>
SELECT ?title ?year ?date ?rating ?reviewer
WHERE { 
  ?movie rdf:type imdb:Movie .
  ?movie dc:title ?title .
  ?movie imdb:year ?year .
  OPTIONAL {
    ?movie rev:hasReview ?review .
    ?review dc:date ?date .
    ?review rev:rating ?rating .
    ?review rev:reviewer ?person .
    ?person foaf:name ?reviewer
  }
}""")
print result.serialize('python')
print result.serialize(json')
print result.serialize('xml')