Vocabulaires et méta-vocabulaires¶
Vocabulaires¶
Trouver un vocabulaire¶
Quelques vocabulaires utiles¶
Dublin Core¶
Méta-données à propos des documents :
titre, résumé…
créateur, contributeur…
date de création, de dernière modification, versions…
- description:
- homepage:
FOAF: Friend of a friend¶
Description de personnes et de leur réseau social
Personne (nom, prénom, page weg, adresse e-mail, connaissance…)
Groupe (membres…)
Document (a pour sujet…), Image (représente…)
- description:
- homepage:
SIOC: Semantically-Interlinked Online Communities¶
Description de communautés en ligne
Forum, Blog, Wiki…
Article, Commentaire…
- description:
- homepage:
Schema.org¶
Vocabulaire généraliste
destiné à améliorer l’indexation des pages par les moteurs de recherche
- description:
- homepage:
SOSA/SSN¶
Ontologie pour le Web of Things (capteurs et objets connectés).
SOSA: Sensor, Observation, Sample, and Actuator
SSN: Semantic Sensor Network
- description:
- homepage:
GS1 Web Vocabulary¶
Extension de Schema.org pour décrire des produits commercialisés.
- homepage:
Méta-vocabulaires¶
Motivation¶
Découverte de la sémantique d’un terme (IRI) en le déréférençant.
Exemple : http://dbpedia.org/resource/James_Bond
:James_Bond
a dbo:FictionalCharacter ;
dbo:creator :Ian_Fleming .
Ce principe s’applique également aux classes (e.g. dbo:FictionalCharacter
)
et aux prédicats (e.g. dbo:creator
).
Problème¶
Syndrome du dictionnaire : il faut pouvoir s”« arrêter » sur des termes connus.
Nécessité d’un vocabulaire (ensemble de termes) permettant de décrire d’autres vocabulaires : méta-vocabulaires.
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 ];
James_Bond -> C [ label="rdf:type" ]
James_Bond [ label=":James_Bond" ]
C [ label="dbo:FictionalCharacter" ]
}](_images/graphviz-96942e80d8a89411706e8b069b730fcea3eae66e.png)
⊧ₖ
![digraph inference2 {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
James_Bond -> C [ label="rdf:type" ]
James_Bond [ label=":James_Bond" ]
C [ label="dbo:Person" ]
}](_images/graphviz-8c26d87634229cc39e26dbe68f9588eb8e1308a3.png)
⊧ₖ
![digraph inference3 {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
James_Bond -> C [ label="rdf:type" ]
James_Bond [ label=":James_Bond" ]
C [ label="foaf:Person" ]
}](_images/graphviz-295104d5b52f035ec7fbb771457a3c74d4827609.png)
RDF-Schema¶
Présentation¶
RDF-Schema (ou RDF-S) est une recommandation du W3C publiée en même temps que RDF (1999, révisée en 2004 et 2014).
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é, cf. ci-après
Espaces de noms et préfixes¶
Suite à des circonvolutions historiques, le vocabulaire RDF-Schema utilise deux espaces de nom, associés respectivement aux préfixes suivants :
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
rdf:type¶
rdf:type
indique l’appartenance d’une ressource à une classe.
Exemple :
![digraph subclassof_p {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
r [ label=":James_Bond" ]
C [ label="dbo:FictionalCharacter" ]
r -> C [ label="rdf:type", fontcolor=red ]
}](_images/graphviz-3b9e0a1a03b34ba7fc6461ba288a025554159bfa.png)
rdfs:subClassOf¶
rdfs:subClassOf
indique une relation une spécialisation entre classes
(« est une sorte de », ou « tous les X sont des Y »).
Exemple :
![digraph subclassof_p {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
r [ label=":James_Bond" ]
C [ label="dbo:FictionalCharacter" ]
D [ label="dbo:Person" ]
r -> C [ label="rdf:type" ]
C -> D [ label="rdfs:subClassOf", fontcolor=red ]
}](_images/graphviz-01cc1fe19f739e58d66899e1fdc7bce469403336.png)
⊧
![digraph subclassof_o {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
r [ label=":James_Bond" ]
D [ label="dbo:Person" ]
r -> D [ label="rdf:type" ]
}](_images/graphviz-5ad83b997822fe835615198a42a190069303e5b8.png)
rdfs:subPropertyOf¶
rdfs:subPropertyOf
indique une relation une spécialisation entre propriétés
(« est une sorte de »).
Exemple :
![digraph subclassof_p {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
r [ label=":James_Bond" ]
s [ label=":Ian_Fleming" ]
p [ label="dbo:creator" ]
q [ label="dc:creator" ]
p -> q [ label="rdfs:subPropertyOf", fontcolor=red ]
r -> s [ label="dbo:creator" ]
}](_images/graphviz-6bf1f9608718b522b33b8ddf0f29343e04031c4c.png)
⊧
![digraph subclassof_o {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
r [ label=":James_Bond" ]
s [ label=":Ian_Fleming" ]
r -> s [ label="dc:creator" ]
}](_images/graphviz-30de2788fa585af323e061c218c0cc43744709a1.png)
rdfs:domain¶
Indique qu’une propriété porte nécéssairement sur les instance d’une classe.
Exemple :
![digraph subclassof_p {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
r [ label=":James_Bond" ]
s [ label=":Ian_Fleming" ]
p [ label="dbo:creator" ]
C [ label="dbo:Work" ]
p -> C [ label="rdfs:domain", fontcolor=red ]
r -> s [ label="dbo:creator" ]
}](_images/graphviz-33ee35d41152f71ccc5edfd48c4aed6877c51eac.png)
⊧
![digraph subclassof_o {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
r [ label=":James_Bond" ]
C [ label="dbo:Work" ]
r -> C [ label="rdf:type" ]
}](_images/graphviz-c9ed6090ed318bfdce69b4a2ec9742c47c79817b.png)
rdfs:range¶
Indique qu’une propriété a nécéssairement pour valeur les instance d’une classe.
Exemple :
![digraph subclassof_p {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
r [ label=":James_Bond" ]
s [ label=":Ian_Fleming" ]
p [ label="dbo:creator" ]
C [ label="dbo:Person" ]
p -> C [ label="rdfs:range", fontcolor=red ]
r -> s [ label="dbo:creator" ]
}](_images/graphviz-eec864f2c06e1da17e8d7d561c793daf86eb3e33.png)
⊧
![digraph subclassof_o {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
s [ label=":Ian_Fleming" ]
C [ label="dbo:Person" ]
s -> C [ label="rdf:type" ]
}](_images/graphviz-f6bbfdc3638f25d024e435069b201eac07fbc1bc.png)
Contrainte RDF-S ≠ 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.
Indirectement, cela peut entraîner une contradiction, qui signale effectivement un problème :
![digraph literal_inconsistency {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
r [ label=":Ian_Fleming" ]
s [ label="\"a thursday\""; shape=box ]
p [ label="dbo:birthDate" ]
C [ label="xsd:dateTime" ]
p -> C [ label="rdfs:range", fontcolor=red ]
r -> s [ label="dbo:birthDate" ]
}](_images/graphviz-6210f8648ca9cf75a1a60d1fadf5440a39189005.png)
Mais ces contradictions sont rares en RDF-S, qui ne permet pas d’exprimer de négation.
Dans l’exemple précédent, dbr:James_Bond est à la fois une personne (dbo:Person) et une œuvre (dbo:Work), et RDF-S ne permet pas d’interdire cela.
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 -> Class [ label="rdf:type" ]
dumbo [ label=":dumbo" ]
Éléphant [ label=":Éléphant" ]
Espèce [ label=":Espèce" ]
Class [ label="rdfs:Class" ]
}](_images/graphviz-a68268a312e2770845e6e45109cb1161304818b1.png)
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).
C’est un surensemble de RDF-S, ajoutant notamment la possibilité d’exprimer des négations.
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, Datalog) |
![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
}](_images/graphviz-39d4535c36b90a4f737b4e62e12e8e3d719f10f2.png)
Relations entre individus¶
owl:sameAs
owl:differentFrom
owl:AllDifferent
owl:NegativePropertyAssertion
owl:sameAs¶
Indique que deux IRIs dénotent la même ressource.
Exemple :
![digraph subclassof_p {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
r [ label="lmdb_character:82" ]
s [ label=":James_Bond" ]
t [ label=":Ian_Fleming" ]
r -> s [ label="owl:sameAs", fontcolor=red ]
s -> t [ label="dbo:creator" ]
}](_images/graphviz-9ef8385940378e43de1f715612a7fcdcf18d65ea.png)
⊧
![digraph subclassof_o {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
r [ label="lmdb_character:82" ]
t [ label=":Ian_Fleming" ]
r -> t [ label="dbo:creator" ]
}](_images/graphviz-44ba4b6615dad8ee76959fac1e29161d0d12a4eb.png)
Relations entre classes¶
owl:equivalentClass
owl:unionOf
owl:disjointWith
owl:AllDisjointClasses
Types de propriété¶
owl:ObjectProperty
owl:DatatypeProperty
owl:FunctionalProperty
owl:InverseFunctionalProperty
owl:TransitiveProperty
owl:SymetricProperty
owl:AsymmetricProperty
owl:ReflexiveProperty
owl:IreflexiveProperty
Relations entre propriétés¶
owl:equivalentProperty
owl:inverseOf
owl:propertyDisjointWith
owl:AllDisjointProperties
owl:propertyChainAxiom
Restrictions¶
Une restriction OWL est une classe définie en intension, selon une contrainte sur une propriété p de ses instances :
au moins une valeur de p est de la classe C,
toutes les valeurs de p sont de la classe C,
il y a au moins / au plus / exactement n valeurs de p (ayant la classe C)
Exemple 1¶
Touts ceux qui ont au moins un enfant médecin
![digraph subclassof_p {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
r [ label="" ]
R [ label="owl:Restriction" ]
p [ label="ex:hasChild" ]
C [ label="ex:Doctor" ]
r -> R [ label="rdf:type" ]
r -> p [ label="owl:onProperty" ]
r -> C [ label="owl:someValuesFrom" ]
}](_images/graphviz-e7f9fb9442aa5aa58d2e0812d469b4ea7e636bb8.png)
Exemple 2¶
Touts ceux qui n’ont que des enfants médecins
![digraph subclassof_p {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
r [ label="" ]
R [ label="owl:Restriction" ]
p [ label="ex:hasChild" ]
C [ label="ex:Doctor" ]
r -> R [ label="rdf:type" ]
r -> p [ label="owl:onProperty" ]
r -> C [ label="owl:allValuesFrom" ]
}](_images/graphviz-37298633b2809d3b2509608e1d87822bb34b4c6b.png)
Avertissement
Cela inclut tout ce qui n’a aucun enfant (car cela revient à dire « tout ceux dont aucun enfant n’est pas médecin »).
Cela inclut donc également les voitures, les maisons…
Exemple 3¶
Touts ceux qui ont au plus trois enfants
![digraph subclassof_p {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
r [ label="" ]
R [ label="owl:Restriction" ]
p [ label="ex:hasChild" ]
n [ label="3",shape=rectangle ]
r -> R [ label="rdf:type" ]
r -> p [ label="owl:onProperty" ]
r -> n [ label="owl:maxCardinality" ]
}](_images/graphviz-b87d581452fe0aa0456427779b07012270233e56.png)
Exemple 4¶
Touts ceux qui ont au moins trois enfants médecins
![digraph subclassof_p {
margin=0; rankdir=LR; bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];
r [ label="" ]
R [ label="owl:Restriction" ]
p [ label="ex:hasChild" ]
n [ label="3",shape=rectangle ]
C [ label="ex:Doctor" ]
r -> R [ label="rdf:type" ]
r -> p [ label="owl:onProperty" ]
r -> n [ label="owl:minCardinality" ]
r -> C [ label="owl:onClass" ]
}](_images/graphviz-69d85b6b27acaccd31e5ccfb726687188f33ec29.png)
Contrainte OWL ≠ contraintes d’intégrité¶
On pourrait avoir l’impression que OWL, mieux que RDF-S, permet d’exprimet des contraintes d’intégrités. Mais l”hypothèse de monde ouvert rend ceci également difficile.
Exemple :
avec des restrictions de cardinalité, on peut exprimer que toute personne a exactement 2 parents ;
mais cela n’oblige pas d’indiquer, pour toute personne, qui sont ses parents (au contraire, le moteur d’inférence déduira qu’ils existent même s’ils ne sont pas mentionnés).
RDF-S et OWL décrivent des schémas inférentiels:
Les contraintes qu’ils expriment portent sur le monde décrit par les données (contraintes sémantiques),
Ils ne doivent pas être confondus avec les schémas structurels ou schémas validants: