« SPARQL Protocol and RDF Query Language/Système d'implication » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 23 :
 
== Système d'implication ==
=== Définitions ===
 
Les ontologies du Web sémantique, comme [[w:Resource Description Framework#Vocabulaires_RDF|RDF]], [[w:RDFS|RDFS]] ou encore [[w:owl|owl]], fournissent des éléments de base pour la définition d'[[w:Ontologie (informatique)|ontologies]] ou vocabulaires destinés à structurer des ressources [[w:Resource Description Framework|RDF]]. Avec ces ressources structurées dans un [[w:triplestore|triplestore]], vous pouvez utiliser le langage de requête [[w:SPARQL|SPARQL]] pour les atteindre à travers le [[w:Web|Web]].
 
Ligne 47 :
}}
 
=== Différences entre les systèmes d'implication ===
Voici un exemple :
Pour illustrer les différences entre des implication simples, RDF et RDFS, examiner les données suivantes:
{|class="wikitable"
|-
Ligne 58 ⟶ 59 :
*les zoos hébergent uniquement des animaux
*Le zoo1 héberge le chat2
| <source lang="text">
| <pre>
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
Ligne 68 ⟶ 69 :
ex:host rdfs:range ex:animal .
ex:cat2 zoo:host ex:zoo1 .
</presource>
| [[File:Regime entailment basic.svg|right|300px|Regime entailment basic|]]
|}
 
Maintenant examiner la requête suivante :
Si votre [[w:triplestore|triplestore]] (ou base de données RDF) implémente le système d'[[w:Implication (pragmatique)|implication]] de RDF et RDFS, la requête [[SPARQL]] suivante (le mot clé ''a'' est équivalent à ''rdf:type'' en SPARQL) :
<source lang="sql">
PREFIX ex: <http://example.org/>
Ligne 80 ⟶ 81 :
</source>
 
==== Sans système d'implication ====
Donnera le résultat suivant avec cat2 car la type ''ex:cat'' hérite du type ''ex:animal'' :
 
| <pre>
(1) ex:dog1 rdf:type ex:animal .
(2) ex:cat1 rdf:type ex:cat .
(3) ex:cat rdfs:subClassOf ex:animal .
(4) ex:host rdfs:range ex:animal .
(5) ex:cat2 zoo:host ex:zoo1 .
</pre>
 
De toute évidence, ex:dog1 est une réponse à cause de triplet (1). Intuitivement, on peut s'attendre à ce que 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 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 :
{| class="wikitable"
! scope=col | animal
|-
| <nowiki><http://example.org/dog1></nowiki>
|}
 
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.
 
{{remarque|contenu=
La majorité des triplestores n'ont aucun système d'implication pour deux raison :
# [http://www.w3.org/TR/2011/WD-sparql11-entailment-20110512/#bgpMatchingExtensions la recommandation] n'est pas encore arrêtée
# l'attention des développeurs est surtout dirigé 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 devra contenir les triplestores. 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 regarder l'exemple de requête suivante :
<source lang="sql">
SELECT ?prop
WHERE { ?prop a rdf:Property }
</source>
 
Avec, les données précédentes et les implications RDF, on devrait obtenir le résultat suivant :
{| class="wikitable"
! scope=col | prop
|-
| <nowiki><http://example.org/zoo/host></nowiki>
|}
 
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 que 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 que ex:cat2 est une valeur de la propriété zoo:host donc si le graphe est bien formé que ex:cat2 est un animal.
 
{{remarque|contenu=
Vous remarquerez que 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 ?" si votre triplestore implémente les implications RDF et RDFS :
{| class="wikitable"
! scope=col | animal