2015-06-20 3 views
1

Я пытаюсь выбрать всех людей, родившихся в определенной стране (например, Португалии) из DBPedia.SPARQL: выбор людей по странам

Я мог бы использовать этот запрос:

  SELECT DISTINCT ?person 
     WHERE { 
      ?person dbpedia-owl:birthPlace dbpedia:Portugal. 
      } 

Но проблема в том, что не все люди имеют DBpedia: Португалия в Birthplace. Около 30% людей имеют только название города как birthPlace, например.

 dbpedia:Lisbon 

Я мог бы добавить все города Португалии в пункт FILTER, но это большой список.

Может быть, это можно сделать вывод о Португалии из Лиссабона в запросе SPARQL какого-то образом?

(чтобы не добавлять все города Португалии в FILTER, чтобы получить все лицо)

ответ

3

Если мы предположим, все города в конкретной стране, определяются как часть этой страны в DBpedia, вы могли бы запрос, который первый ищет людей, которые имеют dbpedia:Portugal как страну, а затем города в пределах dbpedia:Portugal.

SELECT DISTINCT ?person 
WHERE { 
    ?person a dbpedia-owl:Person. 
Optional{ 
    ?person dbpedia-owl:birthPlace ?country. 
} 
Optional{ 
    ?person dbpedia-owl:birthPlace ?place. 
    ?place dbpedia-owl:country ?country 
} 
filter(?country= dbpedia:Portugal) 
} 

Запрос, который вы написали Идентифицирует 1723 различных URI, и это находит 2563 URI.

+0

Да, спасибо .. Благодаря данному DBpedia мы до сих пор скучаем около 1000 persons..e.g. //dbpedia.org/resource/Vera_Kolodzig .... Но это проблема с данными DBPEdia – gmlvsv

+0

@gmlvsv Этот ответ работает, но он очень многословный. Его можно записать гораздо более коротким (и, возможно, более эффективным) способом. Я добавил [ответ] (http://stackoverflow.com/a/30988780/1281433). –

+0

@Artemis, как вы получите этот результат для 2563? Когда я запускаю его, меняя строку выбора на 'select (count (person? Person) as? N)', я получаю 2449, как в [моем ответе] (http://stackoverflow.com/a/30988780/1281433). Я думаю, что-то что-то некорректно где-то ... (я ** делаю ** получаю 1723 при выполнении запроса OP.) –

1

Полные результаты могут быть достигнуты с помощью этого http://answers.semanticweb.com/questions/22450/sparql-selecting-people-by-country - 2730 человек

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> 
    PREFIX dbpedia: <http://dbpedia.org/resource/> 

    SELECT ?person 
    WHERE 
     { 
      {?person a <http://dbpedia.org/ontology/Person>; 
       <http://dbpedia.org/ontology/birthPlace> ?place. 
       ?place <http://dbpedia.org/ontology/country> ?birthCountry. 
       ?birthCountry a <http://dbpedia.org/ontology/Country>. 
       FILTER (?birthCountry = dbpedia:Portugal). 
       } 
      UNION 
       { ?person a <http://dbpedia.org/ontology/Person>; 
       <http://dbpedia.org/ontology/birthPlace> ?birthCountry. 
       ?birthCountry a <http://dbpedia.org/ontology/Country>. 
       FILTER (?birthCountry = dbpedia:Portugal). 
       } 
      } 
     GROUP BY ?person 
     ORDER BY ?person 
1

Artemis' answer работает, но это очень многословным за то, что это довольно простой запрос. Это может быть упрощено:

select distinct ?person where { 
    ?person a dbpedia-owl:Person ; 
      dbpedia-owl:birthPlace/dbpedia-owl:country? dbpedia:Portugal 
} 

SPARQL results (2449)

+0

Почему так много отличается? Каковы различия между этими двумя запросами. Я не мог проверить все, но я проверил несколько и, например, вы отсутствуете (http://dbpedia.org/page/Adriano_Niz). Поскольку Страна не указана напрямую. Итак, что же этот запрос находит и пропадает по сравнению с двумя другими, представленными в ответах? – Artemis

+0

Мой запрос не пропустит Adriano_Niz. Например., если вы добавите фильтр, чтобы ограничить мой запрос теми, чьи метки включают «Niz», например, с запросом, подобным [этому] (http://pastebin.com/kkMSpmZj), вы получаете Адриано Ни, который имеет [эти результаты ] (http://goo.gl/9M7wkA). Мой запрос не должен пропускать ничего ... Этот запрос находит людей, которые связаны с Португалией по пути 'dbpedia-owl: birthPlace/dbpedia-owl: country?'. Этот знак вопроса в конце очень важен; это означает «нуль-один», поэтому путь идет от человека к Португалии по месту рождения или по месту рождения/страны, как и у вас. –

+0

Полезно знать. Благодарю. – Artemis

Смежные вопросы