# SPARQL Protocol and RDF Query Language/Système d'implication

On a vu que des triplestores (ou bases de données RDF) mettent en œuvre certaines caractéristiques qui les rendent très attractifs. Les données ne sont plus liées à des schémas statiques, car les schémas sont contenus directement au sein des données. On insère ces données, comme on l'a vu, via des requêtes d'écriture SPARQL ou à travers des importations de sources RDF via les outils de sauvegarde et d'importation de la base de données.
Cependant, la caractéristique la plus intéressante d'un triplestore est la possibilité de mettre en œuvre un système d'implication (en anglais, entailment regime).
Le système d'implication au sein d'un triplestore permettra deux choses :
* faire des déductions sur les inférences contenues dans la base de données par des agents intelligents
* détecter les implications incohérentes au sein des données, c'est-à-dire détecter les erreurs d'intégrité des données
Le système d'implication est l'équivalent de ce que l’on nomme les mécanismes d'intégrité au sein d'une base de données relationnelle. Ce chapitre va essayer de vous expliquer cette nouvelle approche, qui servira de base au développement de l'intégrité des données RDF.

## Système d'implication
### Définitions

Les ontologies du Web sémantique, comme le vocabulaire RDF, RDFS ou encore OWL (Web Ontology Language), fournissent des éléments de base pour la définition d'ontologies ou de vocabulaires destinés à structurer des ressources RDF. Avec ces ressources structurées dans un triplestore, vous pouvez utiliser le langage de requêtes SPARQL pour les atteindre à travers le Web.
Un système d'implication (entailment regime) définit :
* la description des implications utilisées
* les requêtes considérées comme bien formées
* les graphes considérés comme bien formés
* les erreurs à relever si les requêtes ou les graphes ne respectent pas les implications du système
Un système d'implication est la somme des implications de RDFS, des implications de OWL, etc.
Chaque ontologie (RDF, RDFS, OWL, etc.) peut définir ses propres implications qui vont s'ajouter au système d'implication à condition que le triplestore soit implémenté pour respecter cette ontologie. Pour le moment, seules les implications RDF et RDFS commencent à être implémentées de manière expérimentale.
Un graphe RDF est considéré comme un graphe bien formé si les données dans ce graphe respectent le système d'implication.

### Différences entre les systèmes d'implication

Pour illustrer les différences entre des implications simples, RDF et RDFS, examiner les données suivantes :
* En clair
* Un chien est un animal
* le chat1 est un chat
* Les chats sont des animaux
* les zoos hébergent uniquement des animaux
* Le zoo1 héberge le chat2
* En RDF/turtle |
* @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
* @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
* @prefix ex: <http://example.org/> .
* @prefix zoo: <http://example.org/zoo/> .
* ex:dog1 rdf:type ex:animal .
* ex:cat1 rdf:type ex:cat .
* ex:cat rdfs:subClassOf ex:animal .
* zoo:host rdfs:range ex:animal .
* ex:zoo1 zoo:host ex:cat2 . |
Maintenant examiner la requête suivante :

#### Sans système d'implication

De toute évidence, ex:dog1 est une réponse à cause du triplet (1). Intuitivement, on peut s'attendre à ce qu'ex:cat1 soit aussi une réponse parce qu’il est un chat (2) et tous les chats sont des animaux (3). Même ex:cat2 est un animal parce qu’il est hébergé par un zoo (5) et tout ce qui est hébergé par un zoo est un animal (4).
Cependant, sans implications RDF ou RDFS, vous n'aurez que la réponse suivante à la requête SPARQL :
* animal
* <http://example.org/dog1>
Ici, seul le triplet (1) répond à la condition de la requête, car un système qui n'utilise aucune implication ne procédera à aucune des étapes de raisonnement qui sont nécessaires pour trouver ex:cat1 et ex:cat2 qui sont des animaux.
La majorité des triplestores n'ont aucun système d'implication, pour deux raisons :
* la recommandation n’est pas encore arrêtée
* l'attention des développeurs est surtout dirigée pour le moment sur l'optimisation du temps de réponse d'une requête SPARQL.

#### Avec les implications de RDF

Les recommandations de RDF contiennent l'ontologie de base que devront contenir les triple­stores, par exemple avec rdf:type ou encore rdf:Property. Les implications RDF permettent d'obtenir quelques inférences, mais pas celles qui sont requises pour obtenir "ex:cat1 et ex:cat2 sont des animaux".
Par contre, voir l'exemple de requête suivant :
Avec, les données précédentes et les implications RDF, on devrait obtenir le résultat suivant :
* prop
* <http://example.org/zoo/host>
Sans implication, la requête donnerait une réponse vide, mais sous implication RDF, le triplet (5) peut servir à déduire que zoo:host est une propriété du type ex:zoo1 et ainsi servir de solution à cette requête SPARQL.

#### Avec les implications de RDFS

Afin de récupérer ex:cat1 et ex:cat2, on aurait besoin d'un système qui supporte les implications RDFS.
Voici le raisonnement pour trouver :
* ex:cat1 : le triplet 3 indique que les chats sont des animaux et le triplet 2 indique qu'ex:cat1 est un chat donc ex:cat1 est un animal
* ex:cat2 : le triplet 4 indique que la propriété zoo:host attend uniquement des objets de type animal et le triplet 5 indique qu'ex:cat2 est une valeur de la propriété zoo:host donc, si le graphe est bien formé, qu'ex:cat2 est un animal.
Vous remarquerez qu'ex:cat2 n’est pas défini comme de type chat. Le système peut uniquement déduire qu’il est un animal.
Voici le résultat final de la requête "qui est un animal ?" à condition que votre triplestore implémente les implications RDF et RDFS :
* animal
* <http://example.org/dog1>
* <http://example.org/cat1>
* <http://example.org/cat2>

## À suivre

La recommandation SPARQL lecture et écriture 1.1 est assez stable, bien que non encore validée, mais la partie qui concerne le système d'implication dans SPARQL 1.1 est loin d’être stabilisée. La raison est qu’il faut au moins une (ou deux) version(s) implémentée(s) de la recommandation pour la valider. Le logiciel 4SR que nous utiliserons dans un TP est l'une des versions qui sont en cours d'implémentation.
Mais, même si la recommandation n’est pas stable, le concept d'implication est présent partout, donc il y a fort à parier que ce concept figurera encore dans la version validée. C'est pour cela qu’il est présent dans ce chapitre et qu’il vous permettra de lire la documentation du W3C et des triplestores qui commencent à utiliser ce concept.
De plus, les concepts d'ontologies sont très complexes à appréhender et le fait de comprendre la finalité exacte d'une ontologie permet de relativiser son utilisation. Il est souvent contre-productif d’utiliser des ontologies extrêmement complexes exploitant des implications qui ne seront pas développées avant bien longtemps au sein de triplestores dans le monde réel.
Évidemment, cette leçon évoluera au rythme des implémentations des triplestores qui respectent les recommandations et nous irons donc au même rythme pour décrire l’utilisation des ontologies.