我想使用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查询编辑器中,我得到了响应“没有结果”......但我确信,我有这个三元组。
答案 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")