SPARQL-запрос для получения подграфа узла на глубине n уровня - PullRequest
0 голосов
/ 30 мая 2019

Я хочу получить подграф данного узла для заданной 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 Ответ

1 голос
/ 31 мая 2019

На самом деле это довольно просто:

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.
           }
        }
     }
  }
}

Оператор конструкции вернет график всех исходящих ссылок из рассматриваемого города, и каждый раз, когда вы получите нуль, эта тройка просто не будет построена.

...