Même si le Web Sémantique peut sembler un rêve lointain, les outils qui ont
d'ores et déjà été développés pour le construire peuvent être utilisés pour
faire un petit pas en avant en construisant des sites web sémantiques dans
lesquels il est plus facile de naviguer.
Eric van der Vlist,
Dyomedea (vdv@dyomedea.com).
lundi 12 mars 2001
Cet article explique, en s'appuyant sur l'exemple de XMLfr, comment utiliser RSS
1.0 et son module taxonomie comme format pivot entre les articles publiés en XMLNews-Story et des bases de données RDF ou relationnelle et une Topic Map au format XTM 1.0.
Contenu
Introduction/Conclusion

Les articles de XMLfr sont publiés au format XMLNews-Story et transformées en XHTML de manière dynamique pour être présentées à ses
visiteurs.
La structure du site est décrite par une série de documents RSS 1.O dont les informations de classification
taxonomique sont extraites des balises sémantiques présentes dans les articles
et décrites au moyen du module taxonomie RSS
1.0.
Ces canaux RSS peuvent être chargés dans une
base RDF ce qui permet de faire des recherches
sur l'ensemble des informations présentes.
Ils alimentent une base de données relationnelle qui permet de bâtir un
index dynamique du site et de rajouter des informations de navigation au niveau
des articles.
Ils peuvent, enfin, être transformés en Topic Maps
et être visualisés en utilisant les outils de visualisation Topic Map et être enrichis d'informations statistiques
permettant de déduire les relations entre sujets.
RSS
RSS signifie RDF
(ou Rich) Site Summary.
RSS 0.9, l'un des premiers vocabulaires RDF, a été
introduit par Netscape comme un langage générique de
description de contenu de sites et utilisé pour syndiquer les titres des
informations publiées sur le portail "my.netscape".
RSS 0.9 a rapidement été suivi par RSS 0.91 qui a ajouté de nouvelles fonctionnalités de
syndication d'informations mais a abandonné la syntaxe RDF.
Bien que ces deux versions soient toujours très utilisées par de nombreux
portails tels que Userland, Moreover, Meerkat, NewIsFree, ce vocabulaire semblait être engagé dans
une impasse.
Après les nombreuses additions de RSS 0.91,
le langage manquait de cohérence. De nouvelles demandes d'extensions avaient
été formulées sans qu'il n'y ait de structure ni de critères pour les gérer et
ces demandes parfois contradictoires risquaient de faire éclater le
vocabulaire.
Et, plus important pour les utilisations que nous envisagions, il n'y
avait aucun projet ou moyen d'y ajouter des méta données.
Un Groupe de Travail RSS 1.0 (Gabe Beged-Dov, Dan Brickley, Rael Dornfest, Ian Davis, Leigh Dodds, Jonathan Eisenzopf, David Galbraith, R.V. Guha, Ken MacLeod, Eric Miller, Aaron Swartz et Eric van der Vlist)
a donc été créé dans le but de définir une spécification extensible basée sur
un noyau central RDF très succinct intégrant un
mécanisme facilitant la création de modules spécifiques.
Cette spécification (http://purl.org/rss/1.0/)
a été publiée en décembre 2000 accompagnée d'un module Dublin Core et un jeu d'outils en facilitant l'utilisation.
Un module "taxonomie" vient d'être approuvé par le groupe de
travail et c'est ce format qui est utilisé par XMLfr.
De XMLNews-Story à RSS 1.0
Les canaux RSS 1.0 sont générés par une
transformation XSLT qui travaille sur trois
sources d'informations:
- Un modèle de canal ne
contenant aucun "item" et référençant:
- Le contenu d'un répertoire exprimé sous la forme d'un
document XML pointant sur:
- Les documents XMLNews-Story.
Cette transformation utilise le principe décrit dans mon article
"feuilles de styles sans style" et le modèle de canal contient toutes
les informations spécifiques au canal, y compris sa description, l'emplacement
de son répertoire et le nombre d'articles à indexer.
L'élément XMLNews-Story
"/nitf/body/body.head" contient plus d'informations qu'il n'en faut
pour décrire un item RSS avec ses éléments Dublin Core tels que dc:creator, dc:date,
dc:description, ...
Il est également intéressant d'utiliser les balises sémantiques de XMLNews-Story pour générer les informations
sémantiques des canaux RSS.
XMLfr utilise pour cela les trois éléments
qui sont pertinents pour le domaine couvert par le site: org, person et
object.title.
L'utilisation de ces éléments permet de générer les éléments dc:subject
fournissant les listes de mots clés pour chaque item.
Ces mots clés sont cependant insuffisants pour identifier sans ambiguïté un
sujet (ainsi par exemple, nous devrons distinguer l'organisation Apache du serveur Web qui porte son nom).
Le module "taxonomie" de RSS 1.0 a
été créé pour résoudre ce problème en remplaçant les mots clés par des URIs utilisées
pour identifier sans ambiguïté les sujets mentionnés dans un article.
Dans le cas de XMLfr, j'ai choisi de
construire ces URIs en concaténant une valeur de base, le nom de l'élément
XMLNews-Story et la valeur de cet élément.
Exemple de description d'un item en utilisant RSS
1.0 et les modules DC (Dublin Core) et
taxonomie:
<item rdf:about="http://xmlfr.org/actualites/tech/010222-0001">
<title>Mises à jour 4Suite.</title>
<link>http://xmlfr.org/actualites/tech/010222-0001</link>
<dc:description>Uche Ogbuji a annoncé une
.../...</dc:description>
<dc:creator>Par Michael Smith, xmlhack -
traduit par Eric van der Vlist,
Dyomedea (vdv@dyomedea.com).</dc:creator>
<dc:date>2001-02-22</dc:date>
<dc:subject>4Suite Server, 4Suite, Uche Ogbuji,
.../... </dc:subject>
<taxo:topics>
<rdf:Bag>
<rdf:li
resource="http://xmlfr.org/index/object.title/4suite+server/"/>
<rdf:li
resource="http://xmlfr.org/index/object.title/4suite/"/>
<rdf:li
resource="http://xmlfr.org/index/person/uche+ogbuji/"/>
<rdf:li
resource="http://xmlfr.org/index/object.title/python/"/>
.../...
</rdf:Bag>
</taxo:topics>
<dc:publisher>XMLfr</dc:publisher>
<dc:type>text</dc:type>
<dc:language>fr</dc:language>
</item>
Tout
cela est intéressant, mais à quoi peut bien servir un de ces canaux ?
L'utilisation
la plus répandue de ces canaux est l'échange et l'affichage des titres sur des
sites tels que Meerkat (O'Reilly)
(http://www.oreillynet.com/meerkat/):

XMLfr utilise également ces canaux de manière interne
pour afficher les listes d'articles par catégorie, justifiant pleinement le nom
original de "RDF Site Summary":

Bases RDF
Les
sites pratiquant l'agrégation RSS n'utilisent
pas encore les informations taxonomiques et un simple canal RSS serait
suffisant pour produire les affichages que nous venons de voir.
RSS 1.0 étant conforme à RDF
1.0, les canaux RSS peuvent être directement
chargés dans des bases de données RDF telles que
rdfDB ou Squish
qui vous permettent ensuite de manipuler l'ensemble des triplets RDF en utilisant des langages de requêtes similaires à
SQL.
Ces
langages qui ne sont malheureusement pas normalisés donnent accès à toutes les
informations sémantiques de RSS et sont extrêmement pratiques pour parcourir
l'ensemble des prédicats RDF en réalisant des
jointures entre objets.
Exemple
(utilisant rdfDB):
load
RDF file http://xmlfr.org/actualites/general.rss10 into newrss</>
0
0
</>
select
?item from newrss where
(http://purl.org/rss/1.0/modules/taxonomy/#topics ?item ?bag),
(http://www.w3.org/1999/02/22-rdf-syntax-ns##li ?bag
http://xmlfr.org/index/person/uche+ogbuji/)
</>
?item
http://xmlfr.org/actualites/tech/010222-0001
0
</>
select
?topic from newrss where
(http://www.w3.org/1999/02/22-rdf-syntax-ns##li ?bag
http://xmlfr.org/index/person/uche+ogbuji/)
(http://www.w3.org/1999/02/22-rdf-syntax-ns##li ?bag ?topic)
</>
?topic
http://xmlfr.org/index/org/fourthought/
.../...
http://xmlfr.org/index/object.title/python/
http://xmlfr.org/index/person/uche+ogbuji/
http://xmlfr.org/index/object.title/4suite/
http://xmlfr.org/index/object.title/4suite+server/
0
</>
XMLfr a utilisé pendant plusieurs mois une base rdfDB pour son système d'index dynamique en utilisant JrdfDB, une interface Java
utilisable directement par une transformation XSLT
utilisant le processeur XT.
Bien
que rdfDB se soit montré rapide et relativement
stable, plusieurs fonctionnalités nécessaires pour permettre une montée en
charge et le développement d'applications nouvelles ont néanmoins fait
cruellement défaut:
- Tris (pour afficher des
articles triés par date).
- Filtrage des valeurs
dupliquées.
- Nombre maximum de valeurs
renvoyées.
- Groupage.
- Agrégats et statistiques.
- Fonctions d'administration.
SGBDR
Lorsqu'il
s'agit uniquement de requêtes simples et prédéterminées sur le sujet des
articles, une base RDF n'est heureusement pas
indispensable et un SGBDR (Système de Gestion de
Bases de Données Relationnelles) gérant quelques tables simples peut tout aussi
bien être employé.
XMLfr a donc migré son système d'index dynamique qui
repose maintenant sur deux tables PostgreSQL:
test=> \d topics
Table = topics
+------------------------------+------------------------------+-------+
| Field | Type | Length|
+------------------------------+------------------------------+-------+
|channel |varchar() | 255 |
|item |varchar() | 255 |
|topic |varchar() | 255 |
+------------------------------+------------------------------+-------+
test=> \d items
Table = items
+------------------------------+------------------------------+-------+
| Field | Type | Length|
+------------------------------+------------------------------+-------+
|item |varchar() | 255 |
|dcdate |date | 4 |
|title |varchar() | 255 |
|description |varchar() | 255 |
+------------------------------+------------------------------+-------+
Ces
tables sont chargées à partir de fichiers texte générés par des transformations
XSLT effectuées sur les canaux RSS, ce qui préserve et souligne le caractère pivot de
ce format.
Cet
index dynamique est ensuite lié à une liste de mots clés affichés avec les
articles:
Qui
sont liés à des pages dynamiques affichant la liste des articles relatifs à un
sujet:

N'est
ce pas là une des fonctions de Topic Maps ?
Topic Maps
Un
canal RSS 1.0 et son module taxonomie contient
toutes les informations nécessaires pour être transformé en une Topic Map au format XTM
1.0:
<topic id="person-uche+ogbuji">
<instanceOf>
<topicRef xlink:href="#person"/>
</instanceOf>
<baseName>
<baseNameString>uche ogbuji (person)</baseNameString>
</baseName>
<occurrence id="person-uche+ogbuji-1">
<instanceOf>
<topicRef xlink:href="#story"/>
</instanceOf>
<resourceRef
xlink:href="http://xmlfr.org/actualites/tech/010222-0001"/>
</occurrence>
</topic>
Pour
tester et visualiser cette Topic Map, elle peut
être chargée dans le "Knowledge Server"
empolis
k42™:

Cette
transformation n'ajoute néanmoins pas beaucoup de valeur à notre canal RSS et démontre plutôt l'équivalence des formats RDF et Topic Map. En
tirant partie des fonctionnalités de notre base de données, nous pouvons faire
mieux et agréger les données pour en tirer de nouvelles informations.
Topic Map et photos aériennes
Cette
Topic Map reproduit, sous une syntaxe
différente, les tables utilisées par le système d'index dynamique. Elle est donc
dérivée, au travers des canaux RSS, des éléments
sémantiques "org", "object.title" et "person"
présents dans les articles et l'ajout d'un de ses éléments crée automatiquement
un nouveau sujet.
De
façon évidente, il manque à cette Topic Map les
associations entre sujets.
Si
la nature de ses associations ne peut pas être inventée par une transformation XSLT, il est néanmoins possible de déduire la présence
probable d'une association entre sujets des associations observées dans les
articles.
Ainsi
XMLfr présente la liste des quinze sujets les
plus fréquemment associés avec le sujet courant dans les articles:

La
pertinence de ces associations est généralement surprenante.
Tim Berners-Lee, par exemple est associé avec XML, W3C, RDF, SVG, URI, XLink, DOM, HTML, HTTP, Java, SGML, Web Sémantique
, XPath et ISO ce qui
constitue une bonne description, surtout si l'on tient compte de la simplicité
de l'algorithme utilisé.
Cet
algorithme peut également être utilisé pour générer des associations entre
sujets dans notre Topic Map:
<association id="assoc-person-uche+ogbuji-2">
<instanceOf>
<topicRef xlink:href="#related"/>
</instanceOf>
<member>
<roleSpec>
<topicRef xlink:href="#from"/>
</roleSpec>
<topicRef xlink:href="#person-uche+ogbuji"/>
</member>
<member>
<roleSpec>
<topicRef xlink:href="#to"/>
</roleSpec>
<topicRef xlink:href="#object.title-4suite"/>
</member>
</association>
Ces
associations font penser aux courbes que l'on observe sur des photos aériennes.
Déterminer la nature de ces courbes demande un travail d'interprétation, mais
ces clichés constituent une aide inappréciable pour le travail des
cartographes.
De
la même manière, l'utilisation des associations ainsi détectées et interprétées
manuellement doit constituer une aide précieuse pour la constitution de Topic Maps.
Tout se transforme
"Rien
ne se perd, rien ne se crée, tout se transforme" (Antoine-Laurent
de Lavoisier) .
La
technologie qui permet de transformer les différents formats de stockage utilisés
sur XMLfr est bien entendu XSLT avec lequel "tout se transforme".
Bien
que, contrairement à la chimie de Lavoisier, une transformation XSLT permette de perdre du contenu, XSLT rend applicable au système d'information les deux
autres assertions de Lavoisier: "rien ne se crée, tout se transforme".
Rien
ne se crée et il faut noter l'importance d'inclure les informations sémantiques
le plus tôt possible dans la chaîne de production, la Topic Map produite ici n'étant que l'extraction et l'agrégation des balises
sémantiques contenues dans les articles.
Remerciements
Tous
mes remerciements:
·
Au groupe de travail RSS
1.0.
- Bénédicte
Le Grand pour sa présentation à XML 2000 (Conceptual Exploration of Topic Maps)
montrant comment calculer la distance entre deux sujets.
-
empolis
(connu auparavant comme Step UK) pour le prêt d'une
licence du moteur Topic Map
k42 et leurs réponses à mes questions.
- Les logiciels open source utilisés
par XMLfr (Linux,
Apache, Jserv,
XT, PostgreSQL,
...).
Références
Copyright 2001,
Eric van der Vlist.
|