我有一系列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
上述查询计算节点id#7748320
和id#7748510
的节点4的星型模式长度。但是它假设只给出节点id#7748510
的结果。如果我使用5节点星型模式修改查询,那么节点id#7748320
也会显示在那里。你能帮我解决一下吗?
是否可以使用一个查询计算各种节点长度(4,5,6,...,20)的星形子图模式?请告诉我。感谢您的帮助。
答案 0 :(得分:1)
除了我的评论之外,我还会使用一个不同且更有效的查询“计算每个节点的所有传入节点”,然后使用HAVING
对其进行过滤:
SELECT ?o (COUNT(DISTINCT ?s) AS ?cnt)
WHERE
{ ?s ?p ?node }
GROUP BY ?o
HAVING ( ?cnt = 3 ) # three incoming nodes