Les petites cases

Mes vacances aux standards d'hiver

Dans mon travail, j'ai toujours cherché à allier la théorie à la pratique, car, selon moi, l'un ne va pas sans l'autre. Quand vous avez compris les concepts, la mise en pratique devient plus facile et la pratique peut alors alimenter de nouvelles approches dans vos recherches. Cette position n'est pas toujours facile à tenir dans le monde de la recherche et j'ai souvent du mal à faire comprendre que je ne suis pas qu'un technicien, mais qu'en tant que chercheur, la technique fait partie intégrante de mes recherches.

Bref, tout ce bla-bla pas forcément intéressant pour dire que j'ai profité de mes vacances pour mettre en pratique tous ces concepts et tous ces standards que j'essaye d'expliquer sur ce blog depuis quelques semaines. En fait, vous vous souvenez peut-être que j'avais déjà commencé avec mon ontologie du monde d'Harry Potter et je suis reparti de ce travail. J'ai commencé en améliorant mon fichier RDF pour intégrer des vocabulaires existants comme foaf et tester ce que j'avais appris à la lecture du très bon livre de Shelley Powers : Pratical RDF.

Ensuite, un ami, Ghislain, m'avait fait remarquer que mon expérience était intéressante, mais que mes feuilles de style XSL qui permettent de transformer mon ontologie en OWL au format HTML ne convenait qu'à mon fichier. En effet, une des particularités de RDF, et aussi une de ces difficultés, réside dans le fait qu'un triplet peut s'écrire de différente façon. Par exemple, la description du personnage d'Harry dans mon ontologie peut s'écrire ainsi :

<harry:sorcier rdf:about="#harry">

<harry:membre_de rdf:resource="#gryffondor"/>

<harry:ami_de rdf:resource="#rom"/>

<foaf:gender>male</foaf:gender>

<foaf:name>Harry Potter</foaf:name>

</harry:sorcier>

comme ça :

<rdf:Description rdf:about="#harry">

<harry:ami_de rdf:resource="#ron"/>

<rdf:type rdf:resource="#sorcier"/>

<harry:membre_de rdf:resource="#gryffondor"/>

<foaf:gender>male</foaf:gender>

<foaf:name>Harry Potter</foaf:name>

</rdf:Description>

ou encore comme cela :

<rdf:Description rdf:about="#harry" harry:ami_de="#ron" rdf:type="sorcier" harry:membre_de="#gryffondor" foaf:gender="male" foaf:name="Harry Potter"/>

Si vous validez ces trois bouts de code dans le validateur RDF du W3C1, il vous affichera exactement les mêmes triplets. Il n'existe donc pas de façon standardisée d'écrire un triplet RDF en XML. De ce fait, mes feuilles de styles XSL ne conviennent effectivement qu'à ma façon d'exprimer mes triplets ou plutôt à la façon de Protégé, puisque j'avais utilisé ce logiciel.

Mais, il existe un moyen de contourner ce problème : le SPARQL. Actuellement au stade de Working Draft au W3C, SPARQL est un langage de requêtes qui permet d'interroger des fichiers RDF grâce à l'interrogation des triplets. Ce langage de requêtes est accompagné de deux autres recommandations actuellement en préparation : SPARQL protocol for RDF, qui normalise les Web services permettant de faire des requêtes à distance et SPARQL Query Results XML format qui permet de renvoyer les réponses de la requête structurées en XML. Je ne vais pas rentrer dans les détails, car cela serait trop long, je vous renvoie aux différents articles ou ces très bons tutoriels.

Contrairement à mes appréhensions quand j'ai regardé rapidement la syntaxe, ce langage de requête s'avère assez facile à comprendre et à utiliser. Pour pouvoir le tester, il existe une interface en ligne : le couteau suisse XML qui offre une interface en ligne pour effectuer une requête en SPARQL2 sur un fichier RDF dont vous donnez l'URL. J'ai commencé par faire quelques essais avec mon foaf (le nom des personnes que je connais et que j'ai indiqué dans mon FOAF ou mes centres d'intérêts), avec mon sitemap (le nom, l'URL et la date de toutes les ressources qui sont dans la carte de structure TEI) ou encore avec mon RSS (le titre et l'URL des items qui ont le mot-clé « Web sémantique »). Je suis ensuite passé à l'interrogation de l'ontologie d'Harry Potter, avec d'abord des choses simples comme le nom des amis de Harry pour ensuite chercher toutes les propriétés d'un personnage.

A partir de ce point, mon but a été de récupérer ces résultats en XML pour ensuite leur appliquer ma propre feuille de style. Mais, pris d'une boulimie de standard, je me suis demandé s'il ne serait pas intéressant de générer les filiations sous forme d'arbre généalogique grâce à SVG. SVG est un format d'image vectoriel en XML et Firefox le supporte en natif depuis la version 1.5. Depuis un certain temps déjà, j'avais envie de tester ce format. Aussitôt dit, aussitôt fait, enfin après avoir regardé quelques tutoriels sur SVG et sur son intégration dans Firefox, j'ai abouti à cet arbre généalogique de la famille Weasley ou de James Potter3.

Je récapitule :

  1. Une ontologie OWL, donc exprimée en RDF/XML ;

  2. un service en ligne pour faire des requêtes en SPARQL ;

  3. avec à un fichier PHP4, je récupère le résultat de la requête en XML grâce au protocole HTTP ;

  4. avec le même fichier, je le transforme en XHTML et en SVG grâce à une feuille de style XSL.

Qui a dit que les standards du W3C ne servaient à rien, qu'ils étaient difficiles à mettre en œuvre, que personne ne les utilise et qu'aucun logiciel ne les implémente correctement ? Vous avez maintenant la preuve que ça fonctionne et que les standards du Web ne se limitent pas à HTML et CSS. Je précise que je suis un horrible programmeur et que mon fichier PHP fait 27 lignes, c'est à dire presque rien. Évidemment, il faut utiliser Firefox, car il n'est pas arrivé le jour où celui dont nous tairons le nom implémentera SVG.

Alors, vous allez me dire :

  1. « Tu aurais pu faire une bonne image sous Gimp », mais, dans mon exemple, l'image se génère automatiquement en fonction de la requête et le contenu textuel est indexable par les moteurs de recherche.

  2. « Tu aurais pu utiliser une base de données », mais je n'aurai pas pu utiliser les possibilités de RDF et j'ai déjà expliqué les avantages de ce choix.

  3. « Tu aurais aussi pu générer ton graphique SVG directement à partir de ton fichier RDF », mais j'exprime les triplets de différente façon dans la nouvelle version de mon ontologie.

Bref, c'est bien l'alliance de ces différentes technologies et standards qui permettent d'optimiser le résultat. CQFD ;-)

Quelques notes en passant

1 Désolé, je ne peux pas vous mettre les liens directs, le validateur RDF prend les arguments d'un formulaire en POST... Si vous le faites, pensez à déclarer les namespaces, pour harry, vous pouvez indiquer xmlns:harry="http://www.lespetitescases.net/harryonto/harry2.rdf#"

2 Il existe d'autres interfaces en ligne qui marchent plus ou moins bien dont SPARQLer qui marche aussi bien que le couteau suisse.

3 Je ne donne pas les liens directs vers les autres arbres généalogiques, on va encore m'accuser de spoiler et certains de mes lecteurs n'ont pas encore lu le sixième tome (Blaise, dépêche-toi ;-) ). Mais, vous avez compris le principe, il suffit de changer le nom dans l'URL. Si vous avez lu le sixième, vous pouvez aussi essayer celui-ci.

4 Je vous préviens, ce fichier est horrible, je ne sais pas faire du PHP ;-)

RDF Sparql OWL XSLT Geekeries —