SPARQL 中的星子图模式查找

Star subgraph pattern finding in SPARQL

我有一组 RDF 三元组,如下所示。

id#7289587  ex:getInfectedBy    id#7748320
id#7694711  ex:getInfectedBy    id#7748320
id#7748322  ex:getInfectedBy    id#7748320
id#7748887  ex:getInfectedBy    id#7748320

id#7746679  ex:getInfectedBy    id#7748510
id#6434108  ex:getInfectedBy    id#7748510
id#7458397  ex:getInfectedBy    id#7748510

我的目标是计算各种节点长度 (4,5,6,...,20) 的星形子图模式。例如,我编写了以下查询来查找节点长度为 4 (?s1 ?s2 ?s3 ?o) 的星形子图模式。

SELECT ?o count(distinct ?o)
WHERE
{
  ?s1 ?p ?o.
  ?s2 ?p ?o.
  ?s3 ?p ?o.FILTER((?s1!=?s2) && (?s1!=?s3) && (?s2!=?s3))
} group by ?o

上面提到的查询计数节点4的星型长度对于两个节点id#7748320id#7748510。但是它应该只给我节点 id#7748510 的结果。如果我用 5 节点星形模式修改查询,那么 nodeid#7748320 也会出现在那里。你能帮我修一下吗?

是否可以一次查询统计不同节点长度(4,5,6,...,20)的星子图模式?请告诉我。感谢您的帮助。

除了我的评论之外,我会简单地使用一个不同且更有效的查询 "counts all incoming nodes per node" 然后使用 HAVING:

对其进行过滤
SELECT  ?o (COUNT(DISTINCT ?s) AS ?cnt)
WHERE
  { ?s  ?p  ?node }
GROUP BY ?o
HAVING ( ?cnt = 3 ) # three incoming nodes