Запрос dbpedia с запросом места рождения двух категорий в SPARQL

Я пытаюсь получить список:

Человек А, место рождения А, человек Б, место рождения Б

где родиной является город.

Отношения между человеком А и человеком Б таковы, что человек А "влиял" на человека Б. Пока мой код выглядит следующим образом:

SELECT ?person ?birthplace ?influenced ?birthplace2
WHERE {
?person a <http://dbpedia.org/ontology/Person> .
?person dbpedia2:placeOfBirth ?birthplace .
?person <http://dbpedia.org/ontology/influenced> ?influenced.
?person dbpedia2:placeOfBirth ?birthplace2 .
?influenced a <http://dbpedia.org/ontology/Person>.
?country rdf:type dbpedia-owl:Country .
FILTER (str(?birthplace2) = str(?country))
FILTER (str(?birthplace) = str(?country))
}

В данный момент я играю кантри, потому что это единственное, что работает.

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

В идеале мне нужны широта и долгота каждого города рождения, например:

Человек A, место рождения A, широта, долгота, Человек B, место рождения B, широта, долгота

Но это может быть слишком много, чтобы просить. Извините, я новичок в SPARQL.


person Griff    schedule 06.07.2012    source источник


Ответы (1)


В вашем запросе у вас есть:

?person dbpedia2:placeOfBirth ?birthplace .
?person <http://dbpedia.org/ontology/influenced> ?influenced.
?person dbpedia2:placeOfBirth ?birthplace2 .

в котором говорится, что ?person родился как в ?birthplace, так и в ?birthplace2. Я думаю, вы имели в виду:

?person dbpedia2:placeOfBirth ?birthplace .
?person <http://dbpedia.org/ontology/influenced> ?influenced.
?influenced dbpedia2:placeOfBirth ?birthplace2 .

Что касается получения широты и долготы каждого города, сейчас dbpedia не работает, поэтому я не могу просмотреть ресурсы города, чтобы увидеть, как они сопоставляются с геокоординатами. Однако после резервного копирования dbpedia вы можете выполнить запрос описания SPARQL:

describe <http://dbpedia.org/... rest of resource URI>

и посмотреть, что вы получите обратно. Это скажет вам, какие предикаты вам нужно использовать, чтобы получить местоположение. Имейте в виду, что если информация о широте/долготе отсутствует, вы не увидите этот город в результатах, если только вы не поместите часть шаблона запроса, который выбирает местоположение, в предложении SPARQL optional.

Обновить

ОК, DbPedia восстановлена. Я считаю, что это то, что вы хотите:

PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/resource/>

SELECT DISTINCT ?person1 ?birthplace1 ?person2 ?birthplace2 
                ?lat1 ?long1 ?lat2 ?long2
WHERE 
{
  ?person1 a dbpedia-owl:Person ;
           dbpedia-owl:birthPlace ?birthplace1 ;
           dbpedia-owl:influenced ?person2 .
  ?person2 dbpedia-owl:birthPlace ?birthplace2 .

  optional {
    ?birthplace1 geo:lat ?lat1 .
    ?birthplace1 geo:long ?long1 .

    ?birthplace2 geo:lat ?lat2 .
    ?birthplace2 geo:long ?long2 .
  }
}

Обновление 2

У меня этот запрос работает в dbpedia/iSparql (вот файл perma -ссылка):

результаты iSparql

Обновление 3

Ограничение только городами:

PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/resource/>

SELECT DISTINCT ?person1 ?birthplace1 ?person2 ?birthplace2 
                ?lat1 ?long1 ?lat2 ?long2
WHERE 
{
  ?person1 a dbpedia-owl:Person ;
           dbpedia-owl:birthPlace ?birthplace1 ;
           dbpedia-owl:influenced ?person2 .
  ?person2 dbpedia-owl:birthPlace ?birthplace2 .

  ?birthplace1 a dbpedia-owl:City .
  ?birthplace2 a dbpedia-owl:City .

  optional {
    ?birthplace1 geo:lat ?lat1 .
    ?birthplace1 geo:long ?long1 .

    ?birthplace2 geo:lat ?lat2 .
    ?birthplace2 geo:long ?long2 .
  }
}
person Ian Dickinson    schedule 06.07.2012
comment
Спасибо. Я могу просто получить список городов и загрузить его в карты Google, чтобы вытащить широту и долготу, я думаю. Это, вероятно, получило бы более полный список. - person Griff; 07.07.2012
comment
Я пробовал это в dbpedia.org/snorql, но это не сработало. Где узнать, доступны ли соответствующие запросы? - person Griff; 07.07.2012
comment
Я не знаю, почему это не работает в snorql. Это работает в iSparql - см. обновление к моему ответу. - person Ian Dickinson; 07.07.2012
comment
Спасибо, но проблема в том, что это дает город и страну. Я просто хотел уникальный город для каждого человека. Это должен быть просто уникальный человек с уникальным влиянием. возможно, ограничение его только городами помогло бы. - person Griff; 08.07.2012
comment
В какой-то момент вы должны сами обновить свой запрос! Я обновил запрос, чтобы ограничить ответы только городами, см. запрос в ответе. В результатах все еще есть несколько строк из-за различий в широте/долготе. Это проблема с исходными данными, а не с запросом spaqrl. Я думаю, что на ваш первоначальный вопрос дан ответ; если вы согласны, примите этот ответ, нажав на галочку. Если у вас есть дополнительные вопросы, например, как работать с несколькими значениями широты/долготы, создайте новую тему вопросов. - person Ian Dickinson; 08.07.2012
comment
Спасибо за то, что вы один из немногих людей в Интернете, которые кратко объясняют это. - person theycallmemorty; 17.07.2013