2010-04-29 13 views
3

J'ai un graphique rdf avec plusieurs entrées. Maintenant, je veux obtenir tous les triplets liés à un identifiant donné. Ceci est ma SPARQL:utilisant union dans une requête sparql de construction

select ?s ?p ?o from <http://localhost:8890/DAV/ranking> where { 
{<http://seekda.com/providers/cdyne.com/PhoneNotify> so:hasEndpoint ?s. 
?s ?p ?o} union 
{<http://seekda.com/providers/cdyne.com/PhoneNotify> ?p ?o} 
} 

L'ID dans ce cas est <seekda.com/providers/cdyne.com/PhoneNotify>. J'ai besoin d'une requête graphique (construct ou describe). Donc je pense que je dois les emballer avec un union. Comment je fais ça?

Répondre

2

La réponse courte est: il n'y a pas de différence.

La réponse la plus longue est: pensez aux requêtes SPARQL comme ayant deux parties.

  1. La partie de requête (WHERE), qui produit une liste de liaisons de variables (bien que certaines variables puissent être non liées).

  2. La partie qui regroupe les résultats. SELECT, ASK, CONSTRUCT ou DESCRIBE.

SELECT * est effectivement ce que la requête renvoie. SELECT ?v1 ?v2 prend des résultats et produit un autre jeu de résultats avec les autres variables supprimées. ASK regarde juste s'il y a des résultats.

CONSTRUCT utilise un modèle pour rendre RDF à partir des résultats. Pour chaque ligne de résultat, il lie les variables et ajoute les instructions au modèle de résultat. Si un modèle triple contient une variable non liée, il est ignoré.

DESCRIBE est la plus inhabituelle, car elle prend chaque nœud de résultat, trouve des triplets qui lui sont associés et les ajoute à un modèle de résultat. Contrairement aux autres, il peut contenir plus d'informations que la requête ne correspond.

Donc ayant UNION, OPTIONAL, peu importe, dans la requête est autorisée pour tous les formulaires. Ils peuvent conduire à des triplets manquants dus à des variables non liées.

Votre requête n'a pas beaucoup de sens. Ce n'est pas différent de {?s ?p ?o}. Qu'essayez-vous de faire? Ok, cela a plus de sens maintenant.

précisions données ci-dessous il semble que vous voulez les éléments suivants:

construct { <http://seekda.com/providers/cdyne.com/PhoneNotify> ?p ?o } 
from <http://localhost:8890/DAV/ranking> 
where { 
    { <http://seekda.com/providers/cdyne.com/PhoneNotify> so:hasEndpoint ?s. 
    ?s ?p ?o } 
    union 
    { <http://seekda.com/providers/cdyne.com/PhoneNotify> ?p ?o } 
} 
+0

Hé, je vous remercie de votre réponse. ok, ce que j'essaie de faire est: j'ai un graphique rdf avec plusieurs entrées. Maintenant, je veux obtenir tous les triplets liés à un ID donné (dans ce cas, l'ID est ). comme j'en ai besoin en rdf, je dois utiliser construire et comme il y a des relations transitives je dois les empaqueter avec une union (?). J'espère que cela clarifie mon problème. Ps: simon ps: il y avait une erreur dans ma requête, je l'ai corrigée, je pense maintenant que cela a plus de sens :) – simon

+0

Ah, je vois. Donc, vous voulez des infos sur cette chose (PhoneNotify), et le point de terminaison? – user205512

+0

Vous avez mentionné les «relations transitives». Est-ce que l'idée que les relations 'endpoint' s'appliquent à 'PhoneNotify'? – user205512