Spécifications pour un web sémantique

Intégrer du web sémantique pour enrichir l'information

Le web structurel et le web sémantique

Les limites du web structurel

Nous avons abordé jusqu’à présent le sujet du XHTML. Ce langage, dérivé du XML ne s’occupe que de la structure.

En effet, même si la balise p définit un paragraphe, il ne s’agit en définitive que de la structure et pas de contenu. Si deux paragraphes venaient à être intervertis, aucune machine ne pourrait s'en rendre compte. Seul un être humain, pour lequel le texte a un sens, pourrait trouver que le texte est curieusement formé.

Si dans un document, le nom d’un individu nommé "François Martin" apparaît, il paraît très difficile de déterminer s’il s’agit d’un individu ayant pour prénom "François" et pour nom de famille "Martin", ou l’inverse. Tout comme il serait difficile de déterminer si le prénom "Camille" correspond à un homme ou à une femme sans information supplémentaire. La différence est difficile pour un humain, mais encore plus pour une machine. Car, sans information complémentaire, "François Martin" n'est qu'une chaîne de caractère, au même titre que "il fait beau ce soir"...

Nous pourrions bien entendu ajouter des informations sur le sens de chaque mot, en étendant le XML.

Et c’est là que le web sémantique intervient.

Le web sémantique

Le web sémantique va permettre de donner un sens à chaque élément, indépendamment de la structure (car la structure XHTML est définie et relativement fixe).

Le web sémantique est fondé sur une structure simple : {sujet, prédicat, objet}. Ce triplet a une structure définie qui peut être décrite par du XML (puisque le XML ne décrit qu'une structure). Mais il existe bien entendu des tas d’autres moyens de décrire ce triplet.

Ce triplet est suffisant pour décrire le sens de chaque élément, pour peu que toutes les classes soient définies correctement.

Ainsi, dans notre exemple, nous pourrons indiquer :

  • François Martin est une personne {"François Martin", est, (une) personne}.

  • François Martin a pour prénom François {"François Martin", a pour prénom, "François"}.

  • François Martin a pour nom de famille Martin {"François", a pour nom, "Martin"}.

Nous venons de définir une sémantique qui peut être comprise par des machines et, le cas échéant, faire des vérifications. Ainsi, les triplets {"Pupuce", est, (une) personne} et {"Pupuce", est, (un) animal} provoquerait une erreur.

En ajoutant des triplets (des propriétés), la machine sait donc non seulement que la chaîne de caractères "François Martin" correspond à une personne, mais peut déterminer son nom, son prénom, et tout autre information qui sera précisée (courriel, site web, âge, etc.). Et ces informations pourront être liées à d’autres, recoupées avec d’autres afin de former un univers cohérent.

Comme le XHTML est extensible, on peut y inclure des informations parallèles sur la sémantique. Ces informations ne seront pas affichées (sauf traitement particulier) mais seront accessibles par des programmes.

Ces informations sémantiques complémentaires sont apportées par le RDF.

Les référentiels

Si un être humain est capable de faire la différence entre "François Martin", qui sera interprété très probablement comme une personne, et "Pupuce" comme un animal, c'est que, implicitement, nous faisons appel à un référentiel stocké dans notre mémoire. Et ce référentiel est commun à toutes les personnes parlant la même langue. Le partage d'un référentiel sémantique commun est le fondement même d'une langue, car pour communiquer, il faut partager ce référentiel avec au moins une autre personne.

Pour les machines, c'est la même chose. Pour qu'elles soient capables de comprendre et d'interpréter, il faut que chaque partie (programme) soit capable de comprendre ce que l'émetteur a voulu signifier. Il faut donc que "François Martin" soit reconnu comme étant une "personne" par toutes les parties. Il faut donc créer un référentiel "personne" et ensuite l'utiliser.

Le RDF repose sur l'usage de référentiels. Chaque élément est qualifié par un référentiel. Ainsi {"François Martin", a pour prénom, "François"} est un simple appel à un référentiel "prénom" qui définit ce qu'est un prénom, alors que {"François Martin", est, (une) personne} est un appel à un référentiel "personne". Ainsi, une autre façon de le comprendre est de considérer que {"François Martin" appartient à la classe "personne"}, {"François Martin" a pour prénom "François"}, {"François" appartient à la classe "prénom"}...

Mise en oeuvre

En notation RDF/XML, le triplet RDF est décrit de la façon suivante :

<rdf:Description about="http://www.mon-site/moi">
<s:Créateur>moi</s:Créateur>
</rdf:Description>

Le triplet est désigné par rdf:Description où le sujet (about) est http://www.mon-site/moi et la propriété Créateur de type défini par l'espace de nom s.

Afin d'éviter une description trop verbeuse, il est possible de regrouper plusieurs propriétés d'un même objet sous une seule description :

<rdf:Description about="http://www.mon-site/moi">
<s:Créateur> moi</s:Créateur>
<s:Nom>nom</s:Nom>
<s:Nom>prénom</s:Nom>
</rdf:Description>

Ou encore, si l'on veut faire pointer la propriété sur une ressource externe :

<rdf:Description about="http://www.mon-site/moi">
<s:Créateur rdf:resource="http://www.lien/vers/la_ressource_externe"/>
</rdf:Description>

RDF/XML et RDFa

Comme depuis le début nous nous sommes orientés vers le XML et qu'il existe une notation XML pour le RDF, nous utiliserons les dérivés XML appliqués au RDF, soit RDF/XML et RDFa.

Le RDF/XML correspond au RDF strict au format XML, tandis que le RDFa est une variante adaptée au (X)HTML, afin d'ajouter des informations sémantiques dans une page web.

Performance

Information pertinente

Ajouter de la sémantique à une page web conduit à alourdir son code et donc la quantité d’informations à charger lors de la consultation du document. Toute la difficulté du web sémantique consiste en un dosage précis de l'information à inclure.

Il convient donc de bien choisir les informations à qualifier, sans trop exagérer.

Information redondante

Imaginons que nous ayons ajouté dans chaque page web le courriel de François Martin. Que se passerait-il si François Martin changeait brusquement de courriel ? Faudrait-il modifier toutes les pages web ?

Usage

Pour ces deux raisons, plutôt que d’insérer toutes les informations liées à François Martin directement dans la page web il suffit juste de lui appliquer un lien (RDFa) que le programme pourra suivre si nécessaire. Ainsi, nous indiquons juste dans la page web que l'élément est qualifié et nous ajoutons le lien vers un fichier externe qui contient toutes les informations relatives à cette qualification au format RDF/XML.

Bien entendu, il n'est pas utile d'utiliser systématiquement toutes les définitions sémantiques disponibles. Par exemple, pour un article, pouvoir contacter l'auteur peut être intéressant, mais connaître son lieu de travail, son numéro de téléphone, etc., peut éventuellement s'avérer inutile, sauf dans quelques rares cas.

Code RDF/XML dans un fichier séparé

Les informations complémentaires sont stockées dans un fichier séparé lorsqu'elles ne sont pas essentielles au document principal, ou bien lorsqu'elles doivent apparaître dans plusieurs documents et qu'elles sont susceptibles d'être modifiées sans modifier tous les documents principaux (par exemple, les informations liées à l'auteur).

<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">

<rdf:Description rdf:about="http://media.example.com/audio/guide.ra">

<dc:creator>Rose Bush</dc:creator>
<dc:title>A Guide to Growing Roses</dc:title>
<dc:description>Describes process for planting and nurturing different kinds of rose bushes.</dc:description>
<dc:date>2001-01-20</dc:date>

</rdf:Description>
</rdf:RDF>

Fichier qui sera appelé de la façon suivante :

<link rel="meta" type="application/rdf+xml" title="FOAF" href="http://astro.example.org/foaf.rdf"/>

Insertion de code RDF/XML dans une page XHTML

Cette notation sera réservée pour les informations complètes correspondant au document lui-même : la page XHTML en question, les informations à propos de l'auteur, etc.

<html>
<head>
<title>Exemple de page HTML</title>
<meta>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<rdf:Description rdf:about="http:/www.mon-site.com/doc.xml">
<dc:description>Exemple de document avec du RDF embarqué.</dc:description>
<dc:title>Exemple de page HTML</dc:title>
<dc:creator>moi</dc:creator>
<dc:format>html</dc:format>
</rdf:Description>
</rdf:RDF>
</meta>
</head>
<body>
<p>Exemple de document avec du RDF embarqué dans la balise <tt>meta</tt>.</p>
</body>
</html>

Note

Cette notation, bien que valide, ne peut pas encore être validée par un outil existant. Il convient donc d'utiliser soit un code RDF/XML pur, soit une notation RDFa.

Insertion de code RDFa dans une page XHTML

Par défaut, le (X)HTML5 inclut déjà la version RDFa 1.1. Il n'y a donc rien à ajouter.

Cette notation sera réservée pour les informations non redondantes, pour enrichir les informations déjà présentes dans la page, comme par exemple définir le titre d'un livre (lors d'une citation), etc.

Le RDFa utilise pour partie la syntaxe HTML existante :

  • l'attribut class : permettant de spécifier le type de l'objet;

  • l'attribut id : indirectement, servant à définir l'URI d'un objet dans la page;

  • les attributs rel, rev et href : spécifiant une relation avec une autre ressource.

RDFa ajoute ses propres éléments, les attributs :

  • about : la ressource désignée par about (URI) est décrite par les propriétés suivantes...

    <figure about="http://www.domain.ltd/img/mon_image.jpeg">
    ...
    </figure>

    La ressource http://www.domain.ltd/img/mon_image.jpeg a pour définition les propriétés locales suivantes (incluses dans figure).

    En l'absence de about , il s'agit du document en cours.

    Il peut s'agir aussi d'une référence à un objet défini localement grâce à id.

    <head>
    <meta about="#mon_image">
    <meta property="dc:title">mon titre</meta>
    <meta property="dc:description">ma description</meta>
    ...
    </meta>
    </head>
    ...
    <figure id="mon_image">
    ...
    </figure>
  • resource : une URI spécifiant une ressource de destination, c'est-à-dire une signification externe associée à la ressource locale.

    Il est souvent utilisé avec rel.

    <span typeof="ctag:Tag" rel="ctag:means" resource="http://rdf.freebase.com/ns/en.u2"/>

    Ainsi, http://rdf.freebase.com/ns/en.u2 a pour relation ctag:means avec span, qui est lui-même de type ctag:Tag.

    Ce qui se lit plus facilement : Span est un ctag:Tag ayant pour signification (ctag:means) - ou qui est défini par - le contenu de la ressource distante http://rdf.freebase.com/ns/en.u2.

  • property : spécifiant une propriété pour le contenu d'un élément.

    Il est donc utilisé avec l'élément content et permet le typage de la donnée.

    <span typeof="ctag:Tag" rel="ctag:means" resource="http://rdf.freebase.com/ns/en.u2" property="ctag:taggingDate" content="2009-06-01"/>

    Ainsi, la propriété ctag:taggingDate de ctag:Tag a pour valeur 2009-06-01.

  • content : attribut optionnel qui remplace le contenu d'un élément quand on utilise l'attribut de propriété;

    <meta name="author" content="moi"/>

    est équivalent à :

    <meta name="author">moi</meta>
  • datatype : attribut optionnel qui spécifie le type de donnée du contenu.

    <span property="dc:date" content="2007-09-16T16:00:00-05:00" datatype="xsd:dateTime">

    avec l'espace de nom xmlns:xsd="http://www.w3.org/2001/XMLSchema".

  • typeof : attribut optionnel qui déclare une nouvelle donnée d'un certain type (afin d'englober un ensemble d'informations).

    <div typeof="foaf:Person" xmlns:foaf="http://xmlns.com/foaf/0.1/">
    <p property="foaf:name">>Moi</p>
    <p>Courriel : <a rel="foaf:mbox" href="mailto:moi@example.com">moi@example.com</a></p>
    <p>Téléphone : <a rel="foaf:phone" href="tel:+1-617-555-7332">+1 617.555.7332</a></p>
    </div>

Dans l'en-tête :

<head>
<title property="dc:title">A Simple HTML5 RDFa Example</title>
<meta property="dc:date dc:created" content="2012-11-11T13:00:00Z"/>
<meta rel="dc:creator" href="http://www.monsite/foaf.rdf#me"/>
<meta rel="dc:subject" href="http://dbpedia.org/resource/Semantic_Web"/>
<meta rel="dc:subject" href="http://dbpedia.org/resource/RDFa"/>
</head>

Ou dans le corps de page :

<p xmlns:dc="http://purl.org/dc/elements/1.1/" about="http://www.example.com/books/unlivre">
Dans son dernier livre
<em property="dc:title">Titre</em>,
<span property="dc:creator">Auteur</span>
explique les profonds changements technologiques, démographiques et économiques. Ce livre a été publié en
<span property="dc:date" content="2006-10-01">octobre 2006</span>.
</p>

Convention de format

Comme nous venons de le voir, les possibilités offertes sont nombreuses et les notations à la hauteur de la souplesse de la structure. Ce qui ne facilite pas les traitements automatisés. Il faut donc fixer une convention (arbitraire) de notation et d'usage, sachant que toute autre forme valide est autorisée mais nécessitera une adaptation des transformations ultérieures.

Le RDF/XML sera utilisé pour des fichiers RDF/XML pur séparés.

Dans une page HTML, la notation RDFa sera employée à la fois parce qu'elle est plus condensée, mais aussi parce qu'elle est plus facile à valider. Il n'existe pas encore d'outil standard capable de valider une page contenant un mélange de balises HTML et RDF, à l'exception de blocs RDF/XML indépendants inclus dans la page. Quitte à avoir des blocs indépendants, autant créer des fichiers séparés qui pourront eux aussi être validés en tant que fichier RDF/XML valides.

Quand utiliser la sémantique ?

La sémantique sera employée dans un document web pour qualifier :

  • une date : date de naissance, de décès, événement, ...

  • une personne : personnage célèbre, connaissance, ami, ...

  • une citation.

  • une oeuvre : photographie, audio, vidéo (licence, auteur, droits, etc.), ...

  • une abbréviation.

Espaces de nom

  • Base (rdf)

    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  • Documents : dc (dublin core)

    xmlns:dc="http://purl.org/dc/elements/1.1/"
  • Documents : dc étendu (au-delà des 15 termes de base)

    xmlns:dcx="http://purl.org/dc/terms/"
  • Personnes et web social: FOAF (Friend Of a Friend)

    xmlns:foaf="http://xmlns.com/foaf/0.1/"
  • Informations professionnelles: vcard

    xmlns:vcard="http://www.w3.org/2006/vcard/ns#"
  • Cryptographie : wot (Web Of Trust)

    xmlns:wot="http://xmlns.com/wot/0.1/"
  • Forums, sites, espaces de travail... : sioc (Semantically-Interlinked Online Communities)

    xmlns:sioc="http://rdfs.org/sioc/ns#"
    xmlns:sioct="http://rdfs.org/sioc/types#"
    xmlns:sioca="http://rdfs.org/sioc/access#"
    xmlns:siocs="http://rdfs.org/sioc/services#"
    xmlns:siocarg="http://rdfs.org/sioc/argument#"

    Voir des exemples...

  • un curriculum vitae : resume-RDF

    xmlns:cv="http://purl.org/captsolo/resume-rdf/0.2/cv"
  • Bibliographie avancée : bibo

    xmlns:bibo="http://purl.org/ontology/bibo/"
  • Lexique (WordNet)

    xmlns:wn="http://purl.org/vocabularies/princeton/wn30/"
    xmlns:wns="http://purl.org/vocabularies/princeton/wordnet/schema#"
  • Les tags : CommonTag

    xmlns:ctag="http://commontag.org/ns#"

    Ou avec NiceTag :

    xmlns:ntag="http://ns.inria.fr/nicetag/2009/09/25/voc#"