Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.Les listes de discussions XMLfr sont à votre disposition pour réagir sur nos articles ou simplement poser une question.Si vous ètes passionnée(e) par XML, pourquoi ne pas en faire votre métier ?XMLfr n'est heureusement pas le seul site où l'on parle de XML. Découvrez les autres grâce à XMLfr et à l'ODP.Les partenaires grâce auxquels XMLfr peut se développer.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.
 Si vous vous posez une question, vous n'êtes peut-être pas le premier...Les traductions en français des bibles XML.Ces articles sont des références dans leur domaine.Tout ce qu'il faut savoir pour démarrer sur un sujet XML...


Créer un site web sémantique

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 &#224; jour 4Suite.</title>
 <link>http://xmlfr.org/actualites/tech/010222-0001</link>
 <dc:description>Uche Ogbuji a annonc&#233; 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.


 

Mots clés.



L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.


Les documents publiés sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot  

Conception, réalisation et hébergement
Questions ou commentaires
  redacteurs@xmlfr.org