Introduction au Web Semantique

Idées principales

RDF décrit les ressources

Grâce aux URIs

RDF consists of "triples" of Information Subject:

Quelque chose

Predicate:

a telle
relation
avec

Object:

une autre chose

les declarations se mélangent

label "créateur" "creador" xml:lang "es" label même chose que primary Author contributor sousClasse

Par exemple

Quelque chose de type "œuvre"

Se représente comme

the previous slide in pictures

pour arriver au Web comme il a été pensé

Information Management: A Proposal,

--Tim Berners-Lee, CERN, Marzo 1989

Resources linked to each other in useful ways

En Action

Foafnaut montre l'information comme des éléments (nodes) liés...

Una herramienta grafica para tratar RDF de tipo determinado

Pas de structure ?!

Mais c'est XML, non ?

<rdf:RDF 
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:foaf="http://xmlns.com/foaf/0.1/" >
   <foaf:Person>

      <foaf:mbox rdf:resource="mailto:charles@w3.org"/> 
      <foaf:givenname xml:lang="en">Charles</foaf:givenname>
   </foaf:Person>
</rdf:RDF>

Qu'est-ce que cela veut dire... ?

Un outil utile - le validateur RDF

les "triples" (les déclarations):

sujet prédicat objet
1 genid:ARP14847 http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://xmlns.com/foaf/0.1/Person
2 genid:ARP14847 http://xmlns.com/foaf/0.1/mbox mailto:charles@w3.org
3 genid:ARP14847 http://xmlns.com/foaf/0.1/givenname "Charles"@en

genid:Quoi ?!

Quelque chose sans identification, qui n'a qu'une description (nœud anonyme)

something has the rdf type Person, the foaf mbox property charles@w3.org and the foaf given_name (in english) Charles

Créons du RDF

Utilisons :

foaf-a-matic
Génère des informations FOAF, sur des gens
Par Leigh Dodds, traduit en français
Hera
Génère des information EARL sur l'accessibilité d'une page web
Par Emmanuelle Gutiérrez et Carlos Benvidez

Regardez un exemple de foaf, ou un exemple d'EARL, si vous ne voulez pas en créer

Regardons les resultats

Mélanger l'information

Je présente "cwm"

python cwm.py --rdf rdf-ejem.rdf rdf2-ejem.rdf

résultat : les deux fichiers melangés

D'où a-t-il sorti "rdf:Description" ?

Cwm, n3 et les règles

En utilisant une autre forme de RDF, appelée n3, cwm peut

N3 utilise une syntaxe consistante pour tout, mais ce n'est pas XML

C'est comment n3 ?

python cwm.py --rdf rdf-ejem.rdf rdf2-ejem.rdf --n3

(il est pratique de créer une instruction cwm au lieu de répéter python cwm.py...)

donne :

      [      a <http://xmlns.com/foaf/0.1/Person>;
             <http://xmlns.com/foaf/0.1/givenname> "Charles"@en;
             <http://xmlns.com/foaf/0.1/mbox> <mailto:charles@w3.org> ].
    
      [      a <http://xmlns.com/foaf/0.1/Person>;
             <http://xmlns.com/foaf/0.1/mbox> <mailto:charles@w3.org>;
             <http://xmlns.com/foaf/0.1/name> "Charles McCathieNevile"@fr ].

[ < a ; . @ ?!

l'idée de n3 était de créer une syntaxe facile pour écrire et lire.

(mais en tout cas je préfère utiliser un logiciel)

La syntaxe de base : <url1> <url2> <url3> .

pour deux déclarations :

<url1> <url2> <url3> . 
<url4> <url5> <url6> .

Raccourcis dans la syntaxe N3

[ <prédicat> <objet> ]
nœud anonyme - le sujet n'est pas identifié
<x> a <y> .
<x> est un membre de la classe <y> - c'est à dire
<x> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <y> .
<x> <pred1> <obj1> ; <pred2> <obj2> .
abréviation de
<x> <pred1> <obj1> .

<x> <pred2> <obj2> .
"texto"@es
le texte a une langue spécifiée

Règles --think, --filter, ...

Cwm comprend des options dans les instructions

nom de fichier
à lire et à inclure
--n3
utilise n3 (pour lire les fichiers ou présenter les resultats)
--rdf
utilise RDF/XML (on peut changer plusieurs fois dans une commande)
--think
applique les règles pour tirer des conclusions
--purge
"Sortir la poubelle" (tout de type "http://www.w3.org/2000/10/swap/log#Chaff")
--filter
filtrer les résultats

Une règle simple...

{ ?x a <http://xmlns.com/foaf/0.1/Person> ;
       <http://xmlns.com/foaf/0.1/mbox> ?adresse ;
       <http://xmlns.com/foaf/0.1/name> ?nom  .

  ?y a  <http://xmlns.com/foaf/0.1/Person> ; 
       <http://xmlns.com/foaf/0.1/mbox> ?adresse ;
       <http://xmlns.com/foaf/0.1/givenname> ?prénom  .
} =>

{ ?x a <http://xmlns.com/foaf/0.1/Person> ;
       <http://xmlns.com/foaf/0.1/mbox> ?addresse ;
       <http://xmlns.com/foaf/0.1/givenname> ?prénom ;
       <http://xmlns.com/foaf/0.1/name> ?nom } .

...explication

Si ?x est une Person, avec une mbox determiné et un name,

y ?y est une Person avec la même mbox et un givenname,

?x a aussi ce givenname

=>
abréviation pour <http://www.w3.org/2000/10/swap/log#implies>
?qqChose
utilise "qqChose" comme nom de variable (en n3 - ça n'existe pas en RDF actuel)
{ <x> <y> <z> }
une expression que l'on évalue pour appliquer règles (qu'en N3)

pour l'appliquer

cwm --rdf rdf-ejem.rdf rdf2-ejem.rdf --n3 regla-ejem.n3 --think

Le résultat inclut toute l'information donnée.

@prefix log: <http://www.w3.org/2000/10/swap/log#> .
comment déclarer un espace de nommage en n3
Note il paraît que les espaces de nommage qui ne se terminent pas avec # ne fonctionnent pas dans les règles :-( @@
<x> <pred> <objUno> , <objDos> .
abréviation pour
<x> <pred> <objUno> .
<x> <pred> <objDos> .

Filtrer les résultats

pour n'inclure que les résultats intéressants, on peut utiliser

cwm --rdf rdf-ejem.rdf rdf2-ejem.rdf --n3 regla-ejem.n3 --think --filter=regla-ejem.n3

Ainsi, on n'a que les déclarations correspondant à une implication de regla-ejem.n3

Note Si on veut des autres declarations, il faut les inclure :

{  ?z a ical:Vcalendar } =>
{  ?z a ical:Vcalendar } .

Utiliser le pouvoir...

les règles dans le fichier evaluador.n3 incluent un nœud anonyme

{ [ a <http://xmlns.com/foaf/0.1/Person> ;
    <http://xmlns.com/foaf/0.1/mbox> ?adresse ;
    ?relation ?objet ] .

     ?y a earl:Assertor ; 
        earl:email ?adresse } 

=> { ?y ?relation ?objet } .

... pour savoir plus

On peut utiliser le fichier FOAF, et celui d'EARL.

cwm --rdf earl-ejem.rdf foaf-ejem2.rdf --n3 > cwm-ejem.n3
cwm cwm-ejem.n3 evaluador.n3 --think --filter=evaluador.n3

pour chercher toutes les déclarations avec l'évaluateur comme sujet

Règles plus complexes

{ ?ev a act:ActionItem ; dc:title ?titre ;
    log:racine ?desde . ?desde dc:date ?laDate} =>

{ ?ev a ical:Vtodo ; ical:summary ?titre ;
    ical:dtstart [ ical:dateTime ?laDate ]; 
     is ical:component of <foo> } .

Note: <objet> is <relation> of <sujet>

pour continuer avec cwm?

Plus d'information sur cwm (en anglais)

C'est de l'open source, mais en anglais seulement, à ma connaissance (mais Tim parle français).

Il possède des fonctions arithmétiques, entre autres posibilités intéressantes

RDF et vocabulaires

Rappel

Etc...

Definir des vocabulaires

RDF de base :

Sujet - Prédicat - Objet

<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
            xmlns:exterms="http://www.example.org/terms/">

  <rdf:Description rdf:about="http://www.example.org/index.html">
      <exterms:creation-date>August 16, 1999</exterms:creation-date>

  </rdf:Description>

</rdf:RDF>

about, ID, nodeID

trois attributs similaires pour identifier ce qui est décrit

ID
comme ID de XML. Peut apparaître une fois dans un document, et être utilisé dans une référence au document externe à celui-ci,

par ex. <rdf:Description rdf:ID="ici"> se réfère à #ici dans le document

about
décrit l'URIRef (peut être relative) dont on parle.
peut apparaître plusieurs fois.

p.ex. <rdf:Description rdf:about="http://www.example.com/#ici">

nodeID
Identifie un nœud dans un document.
Peut apparaître souvent.
On ne peut pas y reférer en dehors du document.

Proprietés...

Les proprietés sont les relations

Elles ont une URI - donc se décrivent en RDF

<rdf:Description rdf:about="http://www.w3.org/1999/02/22-rdf-syntax-ns#Property">
  <rdfs:comment xml:lang="es">Une relation entre 2 choses identifiées (normalement) par une URIs</rdf:label>
</rdf:Description>

... et classes

Une classe est un type de ressource.

Par exemple, chaque classe RDF est de type

http://www.w3.org/1999/02/22-rdf-syntax-ns#Class

(et elle peut être de plusieurs types à la fois)

type et datatype (et xml:lang)

Deux choses distinctes, avec un but similaire

type
S'utilise pour dire qu'une ressource appartient à une classe.
(Quelquechose peut appartenir à plusieurs classes à la fois)
datatype
pour donner plus d'information sur comment interpréter quelquechose
Par exemple un texte de datatype gDate est une date dans le calendrier grégorien
xml:lang
pour identifier le type de donnée d'un texte (objets littéraux)

Literals, XMLLiteral, listes, etc

Literal
L'objet d'une déclaration peut être du texte.
<foaf:Person><foaf:name>Charles</foaf:name></foaf:Person>
ou <quelquechose:anonyme><dc:title rdf:value="Un titre"/></quelquechose:anonyme>
XMLLiteral
Une méthode pour inclure du XML sans essayer de l'interpréter
Listes
Et l'objet peut être une liste d'objets, definis comme en LISP Par first, rest, nil, ...

subClass - hiérarchie en RDFS

Une classe peut être une sous-classe d'autres classes

Par exemple, on peut dire que "maClasse" est une sous-classe de Class

cela implique que toute chose de type myclass est de type Class (mais la réciproque est fausse)

Il y a aussi subProperty pour les proprietés

RDFS ! Qu'y a-t-il d'autre ?

Il y a 6 spécifications pour RDF, et 6 de plus pour OWL...

RDFS est une abréviation du nom du langage pour définir des vocabulaires

Il possèfe les proprietés label et comment, qui sont utiles pour presenter un vocabulaire dans une interface, ou le décrire d'une manière sémantique.

<rdf:Description rdf:about="http://www.w3.org/2000/01/rdf-schema#label">
  <rdfs:label xml:lang="es">Titulo</rdfs:label>
  <rdfs:comment xml:lang="es">Un titulo breve pour un termino en un vocabulario RDF</rdfs:comment>
  <rdfs:label xml:lang="fr">Titre</rdfs:label>
  <rdfs:comment xml:lang="fr">Un titre bref pour un terme dans un vocabulaire RDF</rdfs:comment>
</rdf:Description>

Aussi, il y a OWL...

Un langage RDF qui peut mieux definir un vocabulaire

Par exemple

Vocabulaires

créer (utilisez rdfs:label et rdfs:comment !) ou chercher ?

Chercher de préférence, mais où ?