запрос dbpedia SPARQL для получения определенных значений для данного города

Я уверен, что то, что я хочу сделать, очень просто, но, похоже, я не могу правильно понять запрос. У меня есть записи в наборе данных, которые имеют такие значения, как название города, например. "Нью-Йорк" и соответствующий код страны, например "США". У меня также есть доступ к полному названию страны и ее кодам ISO.

Я хотел бы получить численность населения и абстрактные значения для этих городов из dbpedia, используя предложение where, например:

Get population where name = "New York" and isoCountryCode = "US"

Я искал помощи по этому поводу, но безрезультатно.

до сих пор @rohk любезно помогал мне с этим запросом, который не полностью работает для всех местоположений:

SELECT DISTINCT ?city ?abstract ?pop
WHERE {
   ?city rdf:type schema:City ;
     rdfs:label ?label ;
     dbpedia-owl:abstract ?abstract ;
     dbpedia-owl:country ?country ;
     dbpedia-owl:populationTotal ?pop .
   ?country dbpprop:countryCode "USA"@en .
   FILTER ( lang(?abstract) = 'en' and regex(?label, "New York City"))
 }

Вышеупомянутое работает для Нью-Йорка, однако, когда я меняю его на:

SELECT DISTINCT ?city ?abstract ?pop
WHERE {
   ?city rdf:type schema:City ;
         rdfs:label ?label ;
         dbpedia-owl:abstract ?abstract ;
         dbpedia-owl:country ?country ;
         dbpedia-owl:populationTotal ?pop .
   ?country dbpprop:countryCode "THA"@en .
   FILTER ( lang(?abstract) = 'en' and regex(?label, "Bangkok"))
}

Нет результатов для Бангкока, Таиланд.

Я просто не могу правильно понять SPARQL-запрос, я уверен, что веду себя глупо с моим запросом. Если бы какой-нибудь гуру мог мне помочь, я был бы признателен. Спасибо!


person Paul    schedule 28.03.2012    source источник


Ответы (2)


Этот запрос работает

SELECT DISTINCT *
WHERE {
   ?city rdf:type schema:City ;
         rdfs:label ?label ;
         dbpedia-owl:abstract ?abstract ;
         dbpedia-owl:country ?country ;
         dbpprop:website ?website ;
         dbpedia-owl:populationTotal ?pop .
   ?country dbpprop:countryCode "USA"@en .
   FILTER ( lang(?abstract) = 'en' and regex(?label, "New York City"))
}

РЕДАКТИРОВАТЬ: Для Бангкока есть 2 проблемы:

  • Код страны для Таиланда отсутствует: вместо него можно использовать rdfs:label "Thailand"@en.
  • rdf:type Бангкока не schema:City, а dbpedia-owl:Settlement

Вот рабочий запрос для Бангкока

SELECT DISTINCT *
WHERE {
   ?city rdf:type dbpedia-owl:Settlement ;
         rdfs:label "Bangkok"@en ;
         dbpedia-owl:abstract ?abstract ;
         dbpedia-owl:populationTotal ?pop ;
         dbpedia-owl:country ?country ;
         dbpprop:website ?website .
   ?country rdfs:label "Thailand"@en .
   FILTER ( lang(?abstract) = 'en' )
}
person Romain Meresse    schedule 28.03.2012
comment
Привет спасибо! Как упоминалось ниже, похоже, что это возвращает детали штата, а не города. Есть ли способ указать, что тип места должен быть городом или поселком, а не штатом или страной? Спасибо еще раз. - person Paul; 28.03.2012
comment
Удалил мои комментарии и обновил актуальный вопрос с отчетом о проделанной работе, спасибо! - person Paul; 28.03.2012
comment
Большое спасибо, кажется, нет ни одного автоматического запроса, который я мог бы сделать, где бы я просто передавал свойства меток функции. - person Paul; 28.03.2012
comment
Прошу прощения за последний вопрос, прежде чем я перестану вас беспокоить, как мне также получить свойство dbpprop: website вместе с pop для города? Как видите, я новичок. Спасибо еще раз. - person Paul; 28.03.2012
comment
@Paul: вы должны добавить его в предложение where ... ответ обновлен - person Romain Meresse; 28.03.2012

Думаю, вам нужно что-то вроде этого:

SELECT * WHERE {
  ?x rdfs:label "New York City"@en.
  ?x dbpedia-owl:populationTotal ?pop.
  ?x dbpedia-owl:abstract ?abstract.
}

Чтобы получить только аннотацию на английском языке, добавьте FILTER:

SELECT * WHERE {
  ?x rdfs:label "New York City"@en.
  ?x dbpedia-owl:populationTotal ?pop.
  ?x dbpedia-owl:abstract ?abstract.
  FILTER (LANG(?abstract) = 'en')
}

«Нью-Йорк» - это штат, и к нему не прикреплено populationTotal цифры. «Нью-Йорк» - это город.

person cygri    schedule 28.03.2012
comment
Спасибо за это, я надеялся, что есть способ указать тип места как город или поселок? - person Paul; 28.03.2012
comment
Есть несколько способов, ни один из них не работает идеально, и это зависит от того, что вы хотите фильтровать. Проверьте значения свойств rdf:type, dcterms:subject и dbpprop:wikiPageUsesTemplate на предмет того, что надежно выбирает нужные вам объекты. Добавление такой строки в ваш запрос может сработать: ?x rdf:type dbpedia-owl:City. - person cygri; 28.03.2012