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:

https://lov.linkeddata.es/dataset/lov/vocabs/dcterms

homepage:

http://purl.org/dc/terms/

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:

https://lov.linkeddata.es/dataset/lov/vocabs/foaf

homepage:

http://www.foaf-project.org/

SIOC: Semantically-Interlinked Online Communities

Description de communautés en ligne

  • Forum, Blog, Wiki…

  • Article, Commentaire…

description:

https://lov.linkeddata.es/dataset/lov/vocabs/sioc

homepage:

http://rdfs.org/sioc/spec/

Schema.org

Vocabulaire généraliste

  • destiné à améliorer l’indexation des pages par les moteurs de recherche

description:

https://lov.linkeddata.es/dataset/lov/vocabs/schema

homepage:

http://schema.org/

SOSA/SSN

Ontologie pour le Web of Things (capteurs et objets connectés).

  • SOSA: Sensor, Observation, Sample, and Actuator

  • SSN: Semantic Sensor Network

description:

https://lov.linkeddata.es/dataset/lov/vocabs/schema

homepage:

https://www.w3.org/TR/vocab-ssn/

GS1 Web Vocabulary

Extension de Schema.org pour décrire des produits commercialisés.

homepage:

https://www.gs1.org/voc/

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

⊧ₖ

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

⊧ₖ

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

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

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

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

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

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

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

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

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

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

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

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
}

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

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

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

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

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

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

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:

  • Les contraintes qu’ils expriment portent sur les données elles-mêmes (contraintes syntaxiques, ou contraintes d’intégrité),

  • Exemples: Schémas SQL, XML-schema,

  • ou, pour RDF, SHACL et ShEx.