SPARQL中的星子图模式发现

SPARQL中的星子图模式发现,sparql,rdf,rdfs,rdflib,sparqlwrapper,Sparql,Rdf,Rdfs,Rdflib,Sparqlwrapper,我有一组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:get

我有一组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
对于节点id7748320和id7748510,上述查询计算节点4的星形模式长度。但是,它假定只为节点id7748510提供结果。如果我用5节点星形模式修改查询,那么nodeid7748320也会出现在那里。你能帮我修一下吗


是否可以通过一次查询计算不同节点长度4、5、6、…、20的星型子图模式?请让我知道。非常感谢您的帮助。

除了我的评论之外,我只需使用一个不同且更高效的查询,该查询统计每个节点的所有传入节点,然后使用以下方法对其进行过滤:

选择“o”作为“cnt” 哪里 {s?p?node} B组?o 具有?cnt=3个传入节点
只需在查询中使用SELECT*WHERE,就可以了解为什么SPARQL中这样做是正确的。很明显,节点id7748320的数据也与SPARQL查询的模式匹配,只是您在查询中要求的内容至少满足该要求。非常感谢您的回复。我想你是说?不是吗。我已经在virtuoso SPARQL端点上运行了您提供的查询。它给出了以下错误Virtuoso 37000错误SP031:SPARQL编译器:变量?cnt用于聚合外部的结果集中,在GROUP BY子句中未提及。请回复我。如果我修改HAVING子句如下:HAVING COUNTDISTINCT?s=3,它就可以工作了。非常感谢您的帮助。是的,我忘记了对于某些情况,Virtuoso存在一个问题,即聚合的结果仍然在范围内,但无论如何都会报告错误。