L’article sur FRAD interrogeait la question des relations entre auteurs d’un point de vue conceptuel et pour tout dire un peu théorique. Il est temps de voir en pratique les sources qui peuvent être interrogées pour accéder à des relations d’influence ou de collaboration entre créateurs.
Observations
A terme, il sera possible de faire les requêtes qui suivent sur le chapitre français. Aujourd’hui les seules relations qui existent concernent la philosophie. Nous allons donc exploiter le chapitre US qui est plus complet.
Comme dans notre premier article sur DBpedia , nous allons d’abord observer une fiche Wikipedia. Prenons Franz Kafka. Il y a bien dans l’infobox (la zone à droite de tous les articles wikipédia) les propriétés « influenced by » et « influenced ». Allons voir ensuite la page DBPedia associée.
Dans cette page, on trouve les propriétés suivantes:
- dbpedia-owl:influenced
- dbpprop:influenced
- is dbpedia-owl:influenced of
- is dbpedia-owl:influencedBy of
- is dbpprop:influenced of
- is dbpprop:influences of
Pourquoi autant de propriétés pour désigner les mêmes choses?
Parce que les propriétés commençant par dbpedia:owl sont normalisés grâce à un mapping propre à chaque classe (ici writer) dans le cadre d’une ontologie structurant les données de dbpedia.
Et l’intérêt des classes? L’héritage bien sûr. Aussi la classe writer hérite-t-elle des propriétés de la classe artist héritant elle-même de la classe Person.
Les propriétés influenced et influencedBy sont ainsi définies dans la classe Artist. Les musiciens, les acteurs ou les créateurs de mode pourront donc proposer la même propriétés. Idem pour les philosophes mais dans ce cas, la propriété leur est propre.
A l’inverse, les propriétés commençant par dbprop sont extraites de manière non normalisée et donc plusieurs propriétés peuvent désigner la même chose selon la notice que vous consultez.
Les requêtes? Enfin
Il est temps de passer aux travaux pratiques. D’abord la requête :
SELECT DISTINCT ?nomInfluences WHERE { {?auteur rdfs:label "Franz Kafka"@fr} UNION {?auteur foaf:name "Franz Kafka"@fr}. { {?auteur dbpedia-owl:influenced ?influence} UNION {?auteur dbpprop:influenced ?influence} UNION {?influence dbpedia-owl:influencedBy ?auteur} UNION {?influence dbpprop:influences ?auteur} } {?influence rdfs:label ?nomInfluences}. FILTER (LANG(?nomInfluences) = "fr") }
Cette requête permet de récupérer les personnes ayant été influencés par Franz Kafka. Vous remarquerez que c’est énorme (121 personnes). Bien plus que dans l’infobox de droite.
Pourquoi ? Parce qu’il ne faut pas concevoir la notice dbpedia comme une notice de catalogue. Toutes les données sont explosées. On peut donc récupérer dans une seule et même requête toutes les personnes définies dans la notice de l’artiste étudié ainsi que tous les artistes ayant dans leur infobox la propriété influencé par Franz Kafka. Vous apprécierez aussi la vitesse du traitement.
Pour compléter, on peut y associer la date de naissance et ne prendre en compte que les entité de type dbo:person en ajoutant à la clause WHERE :
?influence rdf:type dbpedia-owl:Person. ?influence dbpedia-owl:birthDate ?influenceDateBirth.
La petite soeur?
Vous l’aurez deviné et sûrement trouvé tout seul, la requête des personnes ayant influencé Kafka :
SELECT DISTINCT ?NameInfluences,?influenceDateBirth WHERE { {?auteur rdfs:label "Franz Kafka"@fr} UNION {?auteur foaf:name "Franz Kafka"@fr}. { {?auteur dbpedia-owl:influencedBy ?influence} UNION {?auteur dbpprop:influences ?influence} UNION {?influence dbpedia-owl:influenced ?auteur} UNION {?influence dbpprop:influenced ?auteur.} } . ?influence rdf:type dbpedia-owl:Person. ?influence dbpedia-owl:birthDate ?influenceDateBirth. {?influence rdfs:label ?NameInfluences }.FILTER (LANG(?NameInfluences ) = "fr") }
Application
Ce qui est plutôt sympa, c’est que ça fonctionne aussi pour le cinéma (grâce à dbpedia:owl et à l’héritage… ). Pour s’en convaincre, vous pouvez consulter la notice d’Apocalypse Now
réalisé par Francis Ford Coppola. Le fait d’utiliser le chapitre US fait que les artistes français seront sous-représentés. Vivement le mapping et la prochaine extraction. J’en profite pour remercier Julien Cojan de l’INRIA pour ses explications sur le mapping et les ontologies.