=================== Méta-vocabulaires =================== .. include:: common.inc .. only:: html .. notslides:: .. contents:: :local: :depth: 1 Introduction ============ 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`` .. code-block:: turtle :James_Bond a dbo:FictionalCharacter ; dbo:creator :Ian_Fleming . Ce principe s'applique également aux classes et aux prédicats. 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**. 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. 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" ] .. rst-class:: center ⊧ .. 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" ] .. rst-class:: center ⊧ .. 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 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é 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: @prefix rdfs: 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 ] .. rst-class:: center ⊧ .. 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" ] .. rst-class:: center ⊧ .. 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" ] .. rst-class:: center ⊧ .. 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" ] .. rst-class:: center ⊧ .. 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" ] 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" ] 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*. → 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=1; 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*). 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" ] .. rst-class:: center ⊧ .. 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" ]