Vocabulaires et ontologies§

author:Pierre-Antoine Champin

Contrat Creative Commons

Introduction§

Motivation§

Objectif : expliciter formellement la sémantique des vocabulaires (en conformité avec la sémantique de RDF), afin de

  • limiter les problèmes d’ambigüité sur les termes
  • permettre leur découverte dynamique
    • relations sémantiques internes
  • assurer l’interopérabilité
    • relations sémantiques avec d’autres vocabulaires

Exemples d’inférences§

digraph inference1 {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

pa -> C [ label="rdf:type" ]
C [ label="univ:MaîtreDeConférences" ]
}

KB

digraph inference2 {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

pa -> C [ label="rdf:type" ]
C [ label="univ:EnseignantChercheur" ]
}

KB

digraph inference3 {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

pa -> C [ label="rdf:type" ]
C [ label="foaf:Person" ]
}

Expression de la sémantique§

On souhaite bien sûr exprimer la sémantique des termes en utilisant RDF lui même. Il faut donc définir un méta-vocabulaire, dont la sémantique soit connue a priori.

  • Analogie : XML-Schema est un vocabulaire XML dont la sémantique est connue a priori, et qui permet d’exprimer la structure de nouveaux vocabulaires.

RDF-Schema§

Présentation§

  • RDF-Schema (ou RDF-S) est une recommandation du W3C publiée en même temps que RDF (1999 et révisée en 2004).

  • Il permet d’exprimer une hiérarchie de classes et une hiérarchie de propriétés (relations).

    → hiérarchie au sens large : treillis

  • Il permet aussi d’exprimer des contraintes sémantiques sur les propriétés et les classes.

    contrainte sémantique ≠ contrainte d’intégrité

  • Le préfixe habituellement associé à ce méta-vocabulaire est rdfs:.

Sémantique§

La sémantique de RDF-Schema est construite sur la sémantique de RDF :

  • \(𝔍\) est la fonction d’interprétation qui associe une ressource à un nœud ;
  • \(𝔍_p\) est la fonction qui associe une relation binaire à une ressource

On y ajoute une interprétation spécifique des classes :

  • \(𝔍_c\) associe un ensemble de ressource à une ressource

Enfin, une interprétation conforme à RDF-S doit vérifier un certain nombre de contraintes qui traduisent la sémantique propre aux termes du méta-vocabulaire.

rdf:type§

Contrainte :

\[(𝔍(r), 𝔍(C)) ∈ 𝔍_p(𝔍(\text{rdf:type}))\]\[⇔ 𝔍(r) ∈ 𝔍_c(𝔍(C))\]

Exemple :

digraph subclassof_p {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

r [ label=":pa" ]
C  [ label="u:Enseignant" ]
r -> C [ label="rdf:type", fontcolor=red ]
}

rdfs:subClassOf§

Contrainte :

\[(𝔍(C), 𝔍(D)) ∈ 𝔍_p(𝔍(\text{rdfs:subClassOf}))\]\[⇒ 𝔍_c(𝔍(C)) ⊆ 𝔍_c(𝔍(D))\]

Exemple :

digraph subclassof_p {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

r [ label=":pa" ]
C [ label="u:Enseignant" ]
D [ label="foaf:Person" ]

r -> C [ label="rdf:type" ]
C -> D [ label="rdfs:subClassOf", fontcolor=red ]
}

digraph subclassof_o {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

r [ label=":pa" ]
D [ label="foaf:Person" ]

r -> D [ label="rdf:type" ]
}

rdfs:subPropertyOf§

Contrainte :

\[(𝔍(p), 𝔍(q)) ∈ 𝔍_p(𝔍(\text{rdfs:subPropertyOf}))\]\[⇒ 𝔍_p(𝔍(p)) ⊆ 𝔍_p(𝔍(q))\]

Exemple :

digraph subclassof_p {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

r [ label=":pa" ]
s [ label=":yp" ]
p [ label="u:travailleAvec" ]
q [ label="foaf:knows" ]

p -> q [ label="rdfs:subPropertyOf", fontcolor=red ]
r -> s [ label="u:travailleAvec" ]
}

digraph subclassof_o {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

r [ label=":pa" ]
s [ label=":yp" ]

r -> s [ label="foaf:knows" ]
}

rdfs:domain§

Contrainte :

\[(𝔍(p), 𝔍(C)) ∈ 𝔍_p(𝔍(\text{rdfs:domain}))\]\[∧ (r,s) ∈ 𝔍_p(𝔍(p)) ⇒ r ∈ 𝔍_c(𝔍(C))\]

Exemple :

digraph subclassof_p {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

r [ label=":lab" ]
s [ label=":pa" ]
p [ label="foaf:member" ]
C [ label="foaf:Group" ]

p -> C [ label="rdfs:domain", fontcolor=red ]
r -> s [ label="foaf:member" ]
}

digraph subclassof_o {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

r [ label=":lab" ]
C [ label="foaf:Group" ]

r -> C [ label="rdf:type" ]
}

rdfs:range§

Contrainte :

\[(𝔍(p), 𝔍(C)) ∈ 𝔍_p(𝔍(\text{rdfs:range}))\]\[∧ (r,s) ∈ 𝔍_p(𝔍(p)) ⇒ s ∈ 𝔍_c(𝔍(C))\]

Exemple :

digraph subclassof_p {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

r [ label=":lab" ]
s [ label=":pa" ]
p [ label="foaf:member" ]
C [ label="foaf:Person" ]

p -> C [ label="rdfs:range", fontcolor=red ]
r -> s [ label="foaf:member" ]
}

digraph subclassof_o {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

s [ label=":pa" ]
C [ label="foaf:Person" ]

s -> C [ label="rdf:type" ]
}

Documentation§

RDF-Schema fournit aussi des termes pour documenter un vocabulaire :

  • rdfs:label permet d’associer un libellé textuel à un URI (éventuellement plusieurs, par exemple dans plusieurs langues) ;
  • rdfs:comment permet d’associer un commentaire textuel plus long ;
  • rdfs:seeAlso permet de pointer vers une autre ressource.

Méta-modélisation§

Rien n’empèche, en RDF-S, d’avoir une classe qui soit elle même une instance d’une autre classe (méta-classe). C’est d’ailleurs de cette manière que les classes sont identifiées.

digraph metamodelling {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

dumbo -> Éléphant -> Espèce -> Class [ label="rdf:type" ]
dumbo [ label=":dumbo" ]
Éléphant [ label=":Éléphant" ]
Espèce [ label=":Espèce" ]
Class [ label="rdfs:Class" ]
}

Exemple : FOAF§

_images/foafspec.png

Contrainte sémantique ≠ contraintes d’intégrité§

Les méta-propriétés rdfs:domain et rdfs:range ne servent pas à vérifier qu’un graphe serait « valide ». Il ne permettent que d’inférer des faits supplémentaires.

  • Comme RDF-S n’a pas de négation, ceci n’entraîne jamais d’incohérence formelle au niveau des classes et des propriétés.

    → en d’autre termes, la sémantique de RDF-S ne permet pas de détecter les incohérences (conceptuelles) que pourraient entrainer ces inférences.

digraph not_inconsistent {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

jdoe [ label=":JohnDoe" ]
doc1 [ label=":doc1" ]
Document [ label="foaf:Document" ]
jdoe -> doc1 [ label="foaf:knows" ]
doc1 -> Document [ label="rdf:type" ]
}

OWL§

Présentation§

OWL (Web Ontology Language) a été recommandé par le W3C en 2004, et sa version 2 en 2009.

  • C’est un méta-vocabulaire (comme RDF-S) inspiré des logiques de descriptions avec valeurs concrètes (littéraux).
  • Il définit plusieurs profils offrant des compromis différents en terme d’expressivité et de complexité.
  • Il mime les capacités de méta-modélisation de RDF-S (punning).

Profils OWL 2§

Full aucune contrainte, indécidable
DL minimum de contraintes, décidable mais très complexe
EL quantifications existentielles (EL++), expressivité adaptée à certains domaines (biologie)
QL peut s’implémenter au dessus d’un langage de requêtes (SQL)
RL peut s’implémenter au dessus d’un langage à base de règles (Prolog)

digraph owl_profiles {
margin=0; rankdir=BT; bgcolor="#FFFFFF00"; size=3;
node [ style=filled,color=black,fillcolor=white,shape=box];

full [ label="OWL2 Full" ]
dl [ label="OWL2 DL" ]
el [ label="OWL2 EL" ]
ql [ label="OWL2 QL" ]
rl [ label="OWL2 RL" ]
el -> dl -> full
ql -> dl
rl -> dl
}

Axiomes OWL§

OWL offre des axiomes « de haut niveau » qui visent à

  • améliorer la lisibilité de la base de connaissance
  • optimiser le raisonnement
  • contraindre l’utilisation de certains constructeurs à certaines formes d’axiome selon les profils (e.g. Property Chain)

Sur les concepts§

OWL LD
rdfs:subClassOf C ⊑ D
rdf:type C(a)
owl:equivalentClass C ⊑ D et D ⊑ C
owl:disjointWith, owl:AllDisjointClasses C ⊑ ¬D

Sur les rôles§

OWL LD
owl:FunctionalProperty ⊤ ⊑ (≤ 1 r)
owl:InverseFunctionalProperty ⊤ ⊑ (≤ 1 r⁻)
owl:TransitiveProperty r ∘ r ⊑ r
owl:SymetricProperty r ⊑ r⁻
owl:AsymmetricProperty r ⊑ ¬(r⁻)
owl:ReflexiveProperty ⊤ ⊑ (∃ r self)
owl:IreflexiveProperty ⊤ ⊑ ¬(∃ r self)

Sur les rôles (suite)§

OWL LD
rdfs:domain ∃ r ⊑ C
rdfs:range ∃ r⁻ ⊑ C
rdfs:subPropertyOf r ⊑ p
owl:equivalentProperty r ⊑ p et p ⊑ r
owl:inverseOf r ⊑ p⁻ et p⁻ ⊑ r
owl:propertyDisjointWith, owl:AllDisjointProperties r ⊑ ¬p
owl:propertyChainAxiom p ∘ q ∘ ... ⊑ r

Représentation des LD en RDF§

digraph ld_in_rdf {
margin=0; rankdir=TB; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

restr [ label="" ]
restriction [ label="owl:Restriction" ]
inverse [ label="" ]
enfant [ label=":enfant" ]
personne [ label=":Personne" ]

union [ label="" ]
list1 [ label="" ]
list  [ label="rdf:List" ]
homme [ label=":Homme" ]
list2 [ label="" ]
femme [ label=":Femme" ]
nil [ label="rdf:nil" ]

restr -> restriction [ label="rdf:type" ]
restr -> inverse [ label="owl:onProperty" ]
restr -> personne [ label="owl:someValuesFrom" ]
restr -> union [ label="rdfs:subClassOf" ]
inverse -> enfant [ label="owl:inverseOf" ]
union -> list1 [ label="owl:unionOf" ]
list1 -> list [ label="rdf:type" ]
list1 -> homme [ label="rdf:first" ]
list1 -> list2 [ label="rdf:rest" ]
list2 -> femme [ label="rdf:first" ]
list2 -> nil [ label="rdf:rest" ]
}

∃ enfant⁻ Personne ⊑ Homme ⊔ Femme