2009-06-08 9 views
-2

Je veux sélectionner un triple en utilisant SPARQL. Pour ce faire, j'utilise la requête suivante:SPARQL Problème de requête -> mauvaise réponse

SELECT count (*) 
WHERE {?s ?p ?o} 
FILTER (?s=http://kjkhlsa.net && ?p=http://lkasdjlkjas.com && ?o=Test) 

Comme réponse que je reçois bien mal triple :(sujet ist pas égal à « http://kjkhlsa.net », prédicat n'est pas égal à « http://lkasdjlkjas.com » et objet ist pas non plus égale « test » quelqu'un peut-il me expliquer ce que je fais mal :(

edit1. J'ai mis la requête dans le fichier php:

$inst_query = 'SELECT * { <http://kjkhlsa.net> <http://lkasdjlkjas.com> "Test"}'; 
    echo $inst_query; 

la réponse de l'écho était « SELECT * {"Test"} ". Puis je l'ai essayé avec WHERE:

$inst_query = 'SELECT * WHERE { <http://kjkhlsa.net> <http://lkasdjlkjas.com> "Test"}'; 
    echo $inst_query; 

Voici la réponse était "SELECT * où { "Test"}" ... donc, je suis absent URIs, mais cela me semble aussi question php et problème non SPARQL.

edit2: J'ai mis la requête dans l'éditeur de requête SPARQL et j'obtiens la réponse "aucun résultat" .... mais je suis sûr, que j'ai ce triple.

+0

Quel moteur de recherche utilisez-vous? Notez que SPARQL standard ne prend pas en charge les agrégats tels que COUNT (*). Veuillez aussi éditer le post pour que SPARQL soit correctement sorti, sous cette forme la requête ne devrait même pas analyser. – laalto

+0

désolé, je n'ai aucune idée, quel moteur j'utilise – cupakob

Répondre

2

Dans sa forme actuelle, la question n'est pas très claire (voir mon commentaire ci-dessus).

Étant donné que vous essayez essentiellement d'obtenir des triplets correspondant à un motif, il est plus efficace d'utiliser un motif de graphe au lieu de FILTER. De nombreuses implémentations SPARQL correspondent d'abord aux triplets candidats par des modèles de graphe et n'appliquent ensuite que l'expression FILTER. En substance, avec un modèle de graphique ?s ?p ?o, vous effectuez un balayage linéaire sur tous vos triplets. Donc, voici quelque chose qui devrait fonctionner, en utilisant des modèles de graphiques au lieu de FILTER.

SELECT * { <http://kjkhlsa.net> <http://lkasdjlkjas.com> "Test" } 

Remarques: Je ne l'ai pas inclus COUNT(*) qui n'est pas standard SPARQL. <> autour des URI. "" autour du littéral.

+0

je l'ai essayé, mais ne fonctionne toujours pas. Je suis ure, je fais quelque chose de mal ... \t mais ce n'est pas la question. Merci pour l'indice avec <> et "". Dès que je résous le problème, je posterai la solution ici. – cupakob

+0

Vous avez ajouté des barres obliques à l'adresse URI Sirakov a donné initialement. L'exécution de la requête que vous avez fournie ne correspondra donc pas à ce qui était prévu, car les URI doivent correspondre exactement. –

+0

@Phil M: Ah, une fonctionnalité de la fonction copier-coller de l'URL du navigateur. Merci d'avoir fait remarquer cela. Je vais éditer la réponse. – laalto

0

Essayez d'utiliser ceci:

SELECT count (*) as ?count 
WHERE { 
    ?s ?p ?o 
FILTER (?s=<http://kjkhlsa.net> && ?p=<http://lkasdjlkjas.com> && ?o=Test) 
} 
0

La requête suivante utilise la fonction de comptage pour compter le nombre d'URI distincts (s) retourné à la variable s?.

SELECT ?s (COUNT (DISTINCT ?s) as ?count) 
    WHERE {?s ?p ?o} 
    FILTER (?o="Test")