题
我想选择一个使用SPARQL三倍。要做到这一点,我使用下面的查询:
SELECT count (*)
WHERE {?s ?p ?o}
FILTER (?s=http://kjkhlsa.net && ?p=http://lkasdjlkjas.com && ?o=Test)
随着答案我得到完全错误的三重:(主题IST不等于“ http://kjkhlsa.net ” ,谓词是不等于“ http://lkasdjlkjas.com ”和对象IST也不等于“测试”。有人可以解释我,我在做什么错了:(
EDIT1: 我已经把查询到PHP文件:
$inst_query = 'SELECT * { <http://kjkhlsa.net> <http://lkasdjlkjas.com> "Test"}';
echo $inst_query;
从回波的答案是 “SELECT * { ”测试“}”。然后我与WHERE尝试了:
$inst_query = 'SELECT * WHERE { <http://kjkhlsa.net> <http://lkasdjlkjas.com> "Test"}';
echo $inst_query;
下面就是答案“SELECT * WHERE {‘测试’}” ......所以,我缺少的URI,但这似乎对我的PHP问题,而不是SPARQL问题。
EDIT2: 我已经把查询到SPARQL查询编辑器,我得到的回应“没有结果” ......但我敢肯定,我有这样的三倍。
解决方案
在目前形式的问题不是很清楚(参见上述我的意见)。
由于你基本上是试图让三元匹配的模式,它是更有效地使用图形模式,而不是FILTER
的。许多SPARQL实现第一匹配候选三元组由图模式,然后才应用FILTER
表达。从本质上讲,具有?s ?p ?o
图模式,你做了所有的三元组的线性扫描。
所以,这里的东西应该工作,使用的过滤器,而不是图模式。
SELECT * { <http://kjkhlsa.net> <http://lkasdjlkjas.com> "Test" }
注意:我不包括COUNT(*)
这不是标准SPARQL。 <>
周围的URI。 ""
周围文字。
其他提示
尝试使用这样的:
SELECT count (*) as ?count
WHERE {
?s ?p ?o
FILTER (?s=<http://kjkhlsa.net> && ?p=<http://lkasdjlkjas.com> && ?o=Test)
}
在下面的查询使用计数功能进行计数不同URI(或多个)的数量返回到?s变量。
SELECT ?s (COUNT (DISTINCT ?s) as ?count)
WHERE {?s ?p ?o}
FILTER (?o="Test")
不隶属于 StackOverflow