SPARQL查询问题 - >错误的答案

时间:2009-06-08 07:26:30

标签: sparql

我想使用SPARQL选择三元组。要做到这一点,我正在使用以下查询:

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

作为回答我完全错了三:(主题不等于“http://kjkhlsa.net”,谓词不等于“http://lkasdjlkjas.com”,而对象也不等于“测试”。可以有人解释我,我做错了什么:(

EDIT1: 我已将查询放入php文件:

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

回声的答案是“SELECT * {”Test“}”。然后我用WHERE尝试了它:

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

以下是答案“SELECT * WHERE {”Test“}”......所以,我错过了URI,但这对我来说似乎是php问题而不是sparql问题。

EDIT2: 我已经将查询放入SPARQL查询编辑器中,我得到了响应“没有结果”......但我确信,我有这个三元组。

3 个答案:

答案 0 :(得分:2)

目前的形式问题不是很清楚(参见上面的评论)。

由于您基本上试图获得匹配模式的三元组,因此使用图形模式而不是FILTER更有效。许多SPARQL实现首先按图形模式匹配候选三元组,然后才应用FILTER表达式。从本质上讲,使用?s ?p ?o图形模式,您可以对所有三元组进行线性扫描。

所以,这里应该有用,使用图形模式代替FILTER。

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

注意:我没有包含不是标准SPARQL的COUNT(*)。关于URI的<>""围绕文字。

答案 1 :(得分:0)

尝试使用它:

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

答案 2 :(得分:0)

以下查询使用count函数来计算返回到?s变量的不同URI的数量。

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