bannière alternative
dernière mise à jour : 07/01/11

WSIA

Le WSIA, Web Sémantique et Intelligence Artificielle, est un ensemble de technologies du W3C, qui, utilisées conjointement avec les techniques de l'Intelligence Artificielle, nous permettent de mieux faire comprendre le Web à nos machines.
Le but de cet ensemble est ainsi de nous fournir les outils nécessaires pour que nos machines soient capables de mieux analyser et retranscrire le Web, fidèlement à notre volonté, et non pas de "donner un sens au Web", comme on peut souvent le lire.
Dans cette partie, vous allez pouvoir retrouver les différents TP réalisés en WSIA au cours de ma seconde année d'ingénieur, avec leurs comptes-rendus.

Liste des TP :

Présentation :


TP1 : XHTML/CSS, XML, DTD

Exercice 1 : XHTML/CSS

Cet exercice nous demandait de créer plusieurs styles (première phrase de chaque paragraphe en gras, dernier mot en italique...) pour un même texte, en ne changeant que les feuilles de style (et donc en gardant le contenu de la balise body identique).
C'est un excellent moyen de mettre en valeur la puissance et l'utilité de la séparation entre le contenu et la mise en forme assurés respectivement par HTML et CSS.
Ainsi, on a créé quatre fichiers CSS (feuille de style) : une de mise en forme générale, et les trois autres pour chaque effet de style souhaité et neuf fichiers HTML, pour les neuf combinaisons de style possibles. Dans chaque fichier HTML, on utilise une combinaison de une à quatre feuille de style, selon l'effet recherché.
On a utilisé les balises génériques inline span afin de définir des classes personnalisées et de sélectionner les éléments désirés dans chaque paragraphe.

icone zip WSIA-TP1-1.zip

Exercice 2 : XHTML/CSS

Dans cet exercice, nous nous lancions dans la création du patron d'un site Web, patron qui a d'ailleurs servi de base au présent portfolio.
Nous avons encore une fois utilisé des balises génériques, mais cette fois de type bloc pour organiser et structurer notre page (les balises div). On a ensuite travaillé le CSS afin de réaliser certaines opérations de mises en valeur (changement de puce au passage de la souris, colorisation du texte et des liens...).
La combinaison des connaissances acquises au cours de ces deux premiers exercices nous donnait les bases nécessaires pour réaliser notre premier site de manière efficace. Nous avons bien fait attention à toujours produire des fichiers XHTML et CSS valides au regard des recommandations du W3C.

icone zip WSIA-TP1-2.zip

Exercice 3 : XML

Cet exercice introduit les fichiers XML. On a travaillé sur quatre fichiers XML mal formés, que nous devions rendre bien formés.
Il pouvait notamment s'agir de s'assurer de l'unicité de la racine, de l'existence de la déclaration XML, ou encore de vérifier la bonne formation des balises (paires ou unaires) et leur imbrication.
Pour vérifier qu'un fichier XML soit bien formé, on s'est servi de xmllint, selon la commande :
~$xmllint file.xml --noout
l'option noout permettant de n'afficher que les erreurs.

icone zip WSIA-TP1-3.zip

Exercice 4 : DTD

Cet exercice nous proposait d'écrire une DTD pour nos fichiers XML afin qu'ils ne soient plus seulement bien formés, mais aussi et surtout valides. Cette DTD est la grammaire de nos fichiers XML, que l'on a pu insérer de manière interne (en tant que fichier local).
Il a fallu étudier nos quatre fichiers XML pour en déduire les règles associées. La racine de nos fichiers XML est donc une balise forêt, qui contient au moins un arbre. Chaque arbre contient un tronc, contenant lui une ou plusieurs branches. Enfin, chaque branche peut éventuellement contenir d'autres branches portant ou non des feuilles ; les balises feuilles n'ont pas de fils.
Pour vérifier qu'un fichier XML soit valide, on a rajouté l'option valid à la précédente commande :
~$xmllint file.xml --noout -valid

icone zip WSIA-TP1-4.zip

Exercice 5 : DTD

En partant de la grammaire suivante :

G = ( VT, VN, S, P)
VT = { le chat, la souris, le fromage, le lait}
VN = { S, GN1, GVC, GM, GB, GN1, GN2, GN3}
Axiome = S
P =
{
S ::= GN1 GVC
GN1 ::= le chat | la souris
GVC ::= GM | GB
GM ::= mange GN2
GB ::= boit GN3
GN2 ::= la souris | le fromage | le chat
GN3 ::= le lait
}

Cet exercice nous proposait dans un premier temps d'écrire un fichier XML contenant tous les mots qu'il était possible d'obtenir à partir d'elle, et dans un second, d'écrire la DTD correspondante afin de valider notre fichier XML.
On a ainsi déterminé que notre élément racine serait un texte, constitué de une ou plusieurs phrases. Chaque phrase est constitué d'un sujet et d'un groupe verbal.
Le sujet n'a pas de balises filles mais un attribut "nom", au choix : le chat ou la souris.
Le groupe verbal est constitué d'un verbe, lui même constitué d'un groupe "boire" (GB) ou "manger" (GM). L'un comme l'autre possède un attribut action fixé (boire ou manger) et d'un groupe nominal, respectivement le lait ou, au choix, la souris, le fromage ou le chat.
On a pu valider notre fichier XML contenant toutes les phrases possibles de la même manière que précédemment !

icone zip WSIA-TP1-5.zip

Exercice 6 : Chatbox Alice, AIML et DTD

Cet exercice nous proposait de tester et de manipuler la chatbox Alice et d'analyser le langage AIML et la DTD associée.

AIML signifie Artificial Intelligence Markup Language.
Il s'agit d'un langage conforme aux spécifications du XML qui a été développé pour la réalisation de l'A.L.I.C.E (Artificial Linguistic Internet Computer Entity),
une chatbox permettant à un être humain de "converser" avec la machine de manière la plus complexe et réaliste possible.
Il a été voulu suffisamment simple pour permettre une utilisation et une customisation aisée.

Tout fichier est encadré par les balises <aiml> et </aiml>
Le fonctionnement de la chatbox va s'articuler autour de catégories (balise catégorie) aussi appelées "unités de connaissance".
Chacune contient les balises pattern, template, et think.
La balise pattern contient une suite de caractères qui, si elle correspond de manière exacte (tout du moins est inclus dans) la question de l'utilisateur,
renverra le contenu de la balise template (la réponse de l'utilisateur).
Afin d'affiner la pertinence des réponses, certaines catégories disposent en plus d'une balise think.
Celle-ci va par exemple changer la valeur d'un attribut topic (sujet) pour lui faire prendre comme valeur le sujet couramment discuté.
La valeur de cette attribut est sauvegardé et, lors de la prochaine question de l'utilisateur, si plusieurs catégories sont disponibles,
celles ayant comme sujet celui défini précédemment seront plus â même d'être choisies pour exprimer la réponse de la chatbox.
Ce système permet donc de garantir des réponses pertinentes aux questions de l'utilisateur.

Par exemple :
<category>
    <pattern>WHAT ARE YOU</pattern>
    <template>
        <think><set name="topic">Me</set></think>
        <I am the latest result in artificial intelligence,
        <which can reproduce the capabilities of the human brain
        <with greater speed and accuracy.
    </template>
</category>

A la question "what are you ?", la chatbox répondra par le texte présent dans la balise template, en dessous de la balise think.

Remonter

TP2 : SVG, XSD

Exercice 1 : SVG

Dans ce premier exercice, nous avons créé un faire part de mariage en utilisant SVG. Ce langage issu de la XML-family est un langage permettant de décrire des objets graphiques en 2D (images, texte ou formes vectorielles). Il a été développé dans un soucis d'économie de bande passante et pour avoir la possibilité d'avoir des images facilement retaillables. Pour réaliser ce faire part, nous avons étudier différents aspects de SVG, tels que l'insertion de texte, d'images et leurs placements relatifs.

icone zip WSIA-TP2-1.zip

Exercice 2 : SVG

Ce second exercice nous proposait de pousser plus en avant nos connaissances sur le SVG. Nous devions utiliser une image SVG, le tigre suivant et la travailler pour l'intégrer de manière réaliste au sein d'une autre image ; le rendu final, lui, se devait de rester une image SVG.
On a donc utilisé une image de jungle dans la brume, et on lui a superposé l'image du tigre retaillée pour la rendre plus petite et sur laquelle on a apposé un effet de flou. Cet effet a été réalisé en utilisant le logiciel inkscape.
Sur le rendu final le tigre semble donc intégré à l'image, à l'affut et prêt à sauter sur le conducteur !

icone zip WSIA-TP2-2.zip

Exercice 3 : XSD

Dans ce dernier exercice, nous allions pouvoir créer notre premier fichier XSD. Ce type de fichier permet de décrire la structure et la grammaire d'un fichier XML, nous faisant ainsi immédiatement penser aux DTD vues précédemment. Ce type de fichier est-il une simple copie ? Et bien non, il est en réalité beaucoup plus puissant, et ce pour plusieurs raisons :

Toutes ces raisons rendent les fichiers XSD plus riches et puissants que les DTD actuelles, et beaucoup considèrent qu'ils seront rapidement amenés à les remplacer.

Cette exercice nous faisait travailler sur La Compagnie des glaces, l'oeuvre de G.-J. Arnaud.
Dans un premier temps, nous avons recherché et consignés les informations à propos de cette oeuvre dans un fichier XML : romans, BD, titre, ISBN, collection...
Puis nous avons créé un fichier XSD contenant suffisamment de restrictions pour représenter de la manière la plus fidèle possible notre fichier XML, notamment :

Si une seule de ces règles n'est pas respectée, le fichier XML ne sera plus considéré comme valide ! Pour vérifier la validité de notre nouveau fichier XML, on utilise encore une fois la commande xmllint avec l'option -schema :
~$xmllint --noout fil.xml --schema file.xsd

Toutes les sources sur La compagnie des glaces ont été trouvées sur sa page Wikipedia.

icone zip WSIA-TP2-3.zip
Remonter

TP3

Exercice : XSLT

Le CSS est utilisé pour représenter des feuilles de style pour documents XHTML. Pour le XML, utilise le langage de feuille de style XSL.
Celui-ci se décline en trois autres langages :

C'est ce dernier que l'on a utilisé dans cet exercice. Le but était, en repartant du fichier XML bon4.xml de l'exercice 4 du TP1, d'écrire un fichier XSLT permettant de le transformer en un document HTML conforme à du HTML strict représentant les balises sous forme d'image. Une forêt devait ainsi contenir plusieurs arbres, chaque arbre un tronc, des branches et éventuellement des feuilles. Le code <xsl:template match="/"> permet d'analyser le document XML depuis sa racine. Puis, chaque noeud est recherché de la manière suivante :

<xsl:template match="arbre">
   <div class="arbre">
      <xsl:apply-templates/>
   </div>
</xsl:template>

L'instruction <xsl:apply-templates> permet de réappliquer les règles adéquates de manière récursive sur les noeuds fils. Chaque élément est représenté sous la forme d'une classe, afin de pouvoir lui associer le bon formatage.

Pour appliquer la transformation en un fichier XHTML, on utilise la commande xsltproc de la manière suivante :
~$xsltproc -o sortie.html fichier.xsl fichier.xml

icone zip WSIA-TP3-1.zip
Remonter

TP4

Exercice : XSL/FO

Dans ce nouvel exercice, nous allions pouvoir mettre à profit nos connaissances en XSL pour réaliser la transformation d'un document XML en un fichier au format pdf, en utilisant XSL/FO, un langage de formatage de document XML. Le document XML sur lequel on a travaillé représentait une arborescence de familles de dinosaures organisée en ordre, sous ordre, famille... Le document obtenu en sortie devait respecter les contraintes suivantes :

On a commencé par travailler avec le "compilateur" fop afin de créer des documents .fo et générer des pdf simples, en suivant ce tutoriel XSL/FO. Il nous a permis de mieux comprendre la structure des documents .fo sans utiliser directement de fichier XML.
La balise <fo:layout-master-set> permet de "déclarer" les pages de notre document. Dans notre cas, on a quatre types de pages différentes : la page de garde, la page suivante (blanche), la table des matière et les pages sur les dinosaures ; chaque page peut être subdivisée en trois régions (corps, en tête et pied de page). Dans chaque région, on défini des paragraphes avec une balise manière similaire à la balise <p> du XHTLM : la balise <block>.
XSL/FO offre une balise simple pour la numérotation automatique des pages : <fo:page-number> ; pour la réalisation d'une table des matières il est nécessaire de donner l'id de la page concernée.

Une fois fini tout le "contour" du document, on s'est alors concentré sur le document XML. On a créé un document XSL dans lequel on a inséré notre code XSL/FO, afin de pouvoir parser et transformer le fichier XML en un document pdf (un peu comme on avait fait dans l'exercice précédent pour créer une page HTML). Encore une fois, on commence l'analyse du document XML depuis sa racine (<xsl:template match="/">), mais on allait cette fois avoir besoin de rechercher les éléments nous intéressant en parcourant ce fichier, à la manière d'un arbre. Pour ce faire on a utilisé XPath !

On commence par rechercher tous les noeuds "dinosaures" et on les classes par ordre alphabétique selon leurs noms avant de leur appliquer les règles pour le création d'une page de présentation. Ainsi, pour chaque noeud dinosaure, une page de présentation dédiée est ajoutée au document pdf. Cette page commence par un titre, puis une image du dinosaure (tirée du second attribut de la balise dinosaure) et se poursuit par une liste à puces détaillant sa classification. Pour l'obtenir, on recherche avec XPATH la valeur de l'attribut "nom" de chaque parent et de proche en proche on a ainsi reconstitué les informations nécessaires.
On a donné à chaque page un id ayant pour valeur le nom du dinosaure considéré, ce qui nous a permis de créer la table des matières correspondante.

Pour appliquer la transformation en un fichier pdf, on utilise la commande fop de la manière suivante :
~$fop -xml fichier.xml -xsl fichier.xsl -pdf fichier.pdf

icone zip WSIA-TP4-1.zip
Remonter

TP5

Tutoriel Corese ; RDf, RDFS

Le présent document est un tutoriel personnel sur CORESE. Afin de pouvoir le suivre, il vous faudra maitriser certaines normes et concepts que nous allons présenter.

Corese est un logiciel développé par une l'équipe de recherche Edelweiss de l'INRIA. Il va permettre à l'utilisateur, après avoir chargé en mémoire des fichiers RDF et RDFS, de soumettre ses requêtes et d'observer leurs résultats.

Dans un premier temps, il vous faut télécharger Corese. Il est disponible sur le site de l'INRIA. Puis, rendez-vous dans le répertoire où vous l'avez téléchargé et tapez la commande suivante (remplacez le nom du fichier si une mise à jour a été faite depuis !) :
:~$java-jar corese-2.4.2.5.jar
La fenêtre de Corese devrait alors normalement s'ouvrir !

Maintenant que le logiciel est lancé, cliquez sur File, choisissez Load&Run Rule et sélectionnez les fichiers que vous souhaitez charger (normalement un fichier au format RDF et un fichier au format RDFS). Si tout s'est bien déroulé, vous devriez voir s'afficher dans la partie Logs le texte suivant :
Loading file from path...
{...}
done.
rules applied...
Process Rules
{...}
done.
Nous avons mis à votre disposition un fichier RDF et un fichier RDFS afin que vous puissiez suivre le tutorial sans tarder ! Ces fichiers contiennent des classes et relations suffisamment simples pour vous permettre de mieux appréhender les concepts de RDF mais suffisamment complexes pour vous en faire ressentir les subtilités (c'est du moins le résultat auquel nous souhaiterions parvenir !)

Une fois les fichiers chargés, cliquez sur la croix à côté de l'onglet System, afin d'ouvrir un onglet Query. (l'opération est répétable à souhait, vous permettant de gérer vos onglets comme vous le voulez ; pour fermer un onglet, cliquez simplement sur la croix associée à cet onglet)

Nous allons maintenant fournir quelques exemples de requêtes :

icone zip WSIA-TP5-1.zip

Amélioration de l'indexation sémantique : RDFa

Le but du WEB sémantique est de pouvoir faire mieux comprendre aux machines le contenu du WEB. Prenons un exemple précis. Sur ce portfolio, dans la partie Liens, vous pouvez trouver une série de noms d'élèves de ma promotion avec les adresses de leur portfolio , par exemple :
"Yves Manuvelpillai : http://yves-manuvelpillai.perso.sfr.fr/index.html"

L'adresse est celle du portfolio de Yves. Si vous avez fait cette association intuitivement, en la déduisant de son contexte, un ordinateur,lui, n'y verra qu'une suite de mots puis une url menant à une autre page WEB.
Et si nous pouvions déclarer Yves comme étant une personne et l'url comme étant celle de sa page personnelle ?
Autre exemple, vous avez normalement pu trouver sur ce portfolio plusieurs rapports de différents projets que j'ai réalisé. Serait-il possible d'expliciter quels sont les titres de ces documents, ainsi que leurs auteurs ou principaux contributeurs ?

Pour cela, nous allons utiliser le RDFa, qui repose sur deux spécifications : DC, utilisée pour les annotations bibliographiques et FOAF, qui va permettre de décrirer des personnes, leurs caractéristiques mais aussi et surtout les liens les unissant !
Dans tous les cas, les informations ajoutées ne seront qu'à destination des machines et ne modifieront pas la perception de la page par l'observateur humain.

La Spécification DC a été utilisée pour caractériser les différents rapports et documents présents sur le portfolio, en tant qu'entités bibliographiques. Par exemple, au moment où ce compte-rendu est réalisé, on peut trouver le rapport sur un Business Plan. Nous avons pu lui définir les propriétés suivantes:

La Spécification FOAF a été utilisée sur la page d'acceuil, pour décrire un ensemble de données me concernant, telles que mes noms et mail, l'adresse de ma page personnelle et celle de mon école. Cette spécification a également servi à établir un lien entre moi et mes camarades de promotion ayant suivi le cours de WSIA. Leurs portfolios leur ont également été reliés en tant que page personelle. On a ainsi utilisé :

On a ainsi pu donner la capacité à un ordinateur, grâce à ces définitions, de mieux connaitre les données qu'il manipule. La représentation sous forme d'arbres avec des noeuds interconnectés lui offre de plus la possibilité de comprendre les relations existantes entre différentes objets.

Plus d'informations sur la spécification DC.
Plus d'informations sur la spécification FOAF.

Remonter

Moteurs de recherche sémantiques

I - Présentation générale

La très grande majorité des moteurs de recherche actuel sont des moteurs de recherche dont le requetage fonctionne par mots clefs. Des robots ou bots parcourent le Web d'hyperliens en hyperliens collectant ainsi les pages leur semblant suffisamment significatives. Ces pages sont alors indexées : on en extrait dans une base de donnée un certain nombre de mots significatifs auquel on attribue un poids, en fonction de leur pertinence. Lorsqu'un utilisateur forme une requête, lui sont présentées des propositions de réponses classées par pertinence selon ses mots clefs. La recherche de correspondance maximale se fait au moyen d'algorithmes, gardés secret et changeant assez régulièrement. Ces changements se font dans un soucis d'adaptation aux évolutions du Web et afin de contrer d'éventuelles tentatives de retro-engineering.

Néanmoins ces moteurs de recherche montrent assez rapidement leurs limites. En effet, ils ne sont pas capable d'analyser sémantiquement les requêtes de leurs utilisateurs. Par exemple, un arbre et un arbuste renvoient à la même idée, chose qui ne peux pas être interprétée par un moteur de recherche classique. Le même problème se pose avec les homographes, ces mots qui s'écrivent de la même manière mais ont des sens différents, par exemple fils ou couvent. Le moteur de recherche ne saura pas à quel sens du mot l'utilisateur souhaite faire allusion et lui renverra donc des réponses traitant de tous les sens de manière indifférenciée et donc non pertinente.

Les moteurs de recherche sémantique, eux, vont permettre d'associer du sens aux pages qu'ils indexent et d'être en mesure de comprendre la requête d'un utilisateur afin de la désambiguïser. De même, certains de ces moteurs de recherche proposent de formuler des requêtes directement sous forme de questions. Cela permet deux choses importantes. Dans un premier temps, cela donne un sens aux prépositions (de, à...) fréquemment utilisées par le grand public dans leur requête. Ces prépositions sont souvent utilisées pour changer le sens sémantique d'une requête mais elles ne sont la plupart du temps pas interprétées par le moteur, introduisant une certaine confusion. Dans un second temps on peut remarquer qu'il est beaucoup plus intuitif pour un utilisateur de formuler une question dans sa recherche que de fonctionner par mot clef. Hors, le plus souvent, le WEB contient des réponses et non des questions, donc la correspondance peut parfois mal se faire. Ici, l'on est plus confronté à ce genre de problèmes ! .

Ces nouveaux types de navigateurs semblent donc vouloir rendre le WEB plus simple, plus intuitif et plus pertinent pour les utilisateurs, ce dont on ne peut que se féliciter.

II - Principe technique

L'idée de base est d'indexer les page référencées en utilisant un ensemble de tags qui, plus que des mots clefs ou des descriptions pourront décrire du contenu et des relations. La description des ressources est réalisée à l'aide de RDF : c'est la pierre angulaire du Web sémantique, qui va permettre de créer des associations de sens et de relations entre différentes idées et le tout dans un langage compréhensible par une machine. Les documents WEB ne sont plus considérés comme de simples pages mais comme des graphes de relations RDF. L'action consistant à filtrer les réponses en fonction de leur pertinence sera maintenant réalisée en amont au lieu de la laisser à la charge de l'utilisateur.

III - Utilisations

A - Comparaisons entre moteurs de recherche

Pour montrer les différences entre un moteur de recherche classique et un moteur de recherche sémantique, nous utiliserons dans un premier temps Google et Wolfram Alpha (respectivement classique et sémantique). Nos recherches vont porter sur différents termes tels que nutrition, cinéma, BD, astronomie et dinosaures.

Avec le terme nutrition, le moteur de recherche Google donne environ 89 400 000 résultats et renvoie vers des liens (entre autres Wikipedia), permettant de connaître sa définition. Avec le moteur de recherche sémantique, la recherche tient sur une seule page, elle nous donne des informations sur la nourriture et sur les références diététiques, ainsi qu'un lien sur la définition de wikipedia. Le moteur de recherche sémantique nous répond donc de manière plus exhaustive et pertinente.

Avec une recherche sur l'astronomie, le moteur de recherche classique donne environ 18 900 000 résultats liés au mot astronomie avec sa définition, des magazines, de son actualité. Avec une recherche sémantique sur le site Wolfram Alpha, il regroupe des informations tel que la définition, les synonymes ou même le score en scrabble lié au mots astronomie. Avec une recherche sur le cinéma, Wolfram Alpha donne une liste de films et différents films recompensés. Avec le moteur de recherche sémantique Hakia , il propose des news, des blogs, des images et des vidéos en rapport avec l'astronomie. Le moteur de recherche tente de proposer du contenu en rapport avec la requête de l'utilisateur.

Le moteur de recherche Powerset met à la disposition du public un outil permettant de faire des recherches sur Wikipédia en utilisant une phrase plutôt que des mots clés pour formuler la requête. Nous pouvons lui poser des questions. De plus, le moteur de recherche sélectionne le passage répondant à la requête pour faciliter la recherche.

Le moteur de recherche true knowledge sélectionne les informations correspondant à la requête. Avec une recherche sur les dinosaures, nous obtenons la définition ,le nom scientifique, une liste de sites internet correspondant, les classes parents associées ( reptiles, vertébrés) et les différents types associés ( Tyrannosaurus, Velociraptor). Le moteur de recherche fait également apparaître les questions récemment posées par les internautes avec leurs fréquences et leurs réponses.

B - Exemple

A travers cet exemple, nous avons voulu illustrer l'analyse contextuelle réalisée par un moteur de recherche sémantique et donc la pertinence qu'il apporte par rapport à une recherche classique.
Par exemple, un moteur de recherche sémantique tel que Wolfram Alpha donnera sur la Question " who was the president of France in 1914?" une réponse simple et claire contenant non seulement son nom Raymond Poincaré, mais aussi le mandat correspondant et les informations sur les presidents précedents et suivants. Avec le moteur de recherche Google, on obtient différentes informations sur la France à l'époque. L'utilisateur est alors contraint d'effectuer un tri dans les liens afin de trouver des informations sur le nom du président. Le résultat est vaste et il faut alors chercher en profondeur pour obtenir des informations.

Remonter

TEI : Text Encoding Initiative

Cette norme a été créée par le TEI Consortium dans le but de normaliser le balisage de documents sous forme numérique afin d'en faciliter le partage, l'échange et aussi et surtout le traitement par ordinateur. Elle a la particularité de ne pas proposer une unique grammaire, mais un ensemble de DTD combinables à souhait et permettant de générer des DTD personnalisées.
Elle est notamment utilisée dans le cadre du projet Cyberthèses.

icone pdf TEI_presentation.pdf
Remonter
Valid XHTML + RDFa
Copyright © 2010 DEVILLIERSE Vincent Tous droits réservés