Vocabulaires et ontologies§

author:Pierre-Antoine Champin

Contrat Creative Commons

1

Introduction§

2

Motivation§

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

3

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" ]
}

4

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.

5

RDF-Schema§

6

Présentation§

7

Sémantique§

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

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

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.

8

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 ]
}

9

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" ]
}

10

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" ]
}

11

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" ]
}

12

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" ]
}

13

Documentation§

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

14

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" ]
}

15

Exemple : FOAF§

_images/foafspec.png
16

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.

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" ]
}

17

OWL§

18

Présentation§

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

19

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
}

20

Axiomes OWL§

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

21

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
22

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)
23

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
24

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

25