我想选择一个使用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")
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top