SPARQL查询以获取n级深度的节点子图

时间:2019-05-30 18:54:26

标签: sparql rdf

我正在寻找给定节点到给定深度k level的子图,如下图k = 2所示。

enter image description here

如果我去https://dbpedia.org/sparql并选择一个?city,我想获得城市图的所有详细信息,例如5个等级。我正在寻找一个通用查询,该查询不需要了解图就可以像下面那样获取数据。

CONSTRUCT {
  ?city a ?plebs .
  ?mayor foaf:gender ?gender.
  ?city dbo:country ?ctr .
  ?city dbo:populationTotal ?pop.
  ?city dbo:leaderParty ?party .
  ?city rdfs:label ?cityName .
  ?party dbo:ideology ?ideology 
} WHERE {
   ?plebs rdfs:subClassOf dbo:Settlement.
   ?city a ?plebs .
   ?city (dbp:mayor | dbo:mayor | dbp:leader |dbo:leader | dbo:leaderName) ?mayor .
   ?mayor foaf:gender ?gender.
   ?city dbo:populationTotal ?pop .
   ?city rdfs:label ?cityName .
   ?city dbo:country ?ctr .
   ?city dbo:leaderParty ?party .
   ?party dbo:ideology ?ideology .
   FILTER(str(?gender) = "female")
  }
ORDER BY DESC(?pop) 

有人可以在通用SPARQL查询中为我服务吗?该查询可以在给定节点的任何数据库上工作。

问候 基兰

1 个答案:

答案 0 :(得分:0)

实际上很简单:

construct {

?s ?p ?o.
?o ?op ?oo.
?oo ?oop ?ooo.
?ooo ?ooop ?oooo.
?oooo ?oooop ?ooooo.
}
where {
bind(city:_London as ?s)
?s ?p ?o.
optional {
   ?o ?op ?oo.
   optional {
      ?oo ?oop ?ooo.
       optional {
          ?ooo ?ooop ?oooo.
          optional {
              ?oooo ?oooop ?ooooo.
           }
        }
     }
  }
}

construct语句将返回所涉及城市的所有出站链接的图形,并且每当您返回null时,就不会构造该三元组。