Получить имя / метку объекта из викиданных в Python

У меня есть несколько запросов SPARQL для запуска викиданных на Python, и мне нужно получить имя / метку возвращаемого объекта вместо URI. Например, учитывая фрагмент кода Python ниже:

from qwikidata.sparql  import return_sparql_query_results

query_string = """
        select ?ent where { ?ent wdt:P31 wd:Q2637056 . ?ent wdt:P2244 ?obj } ORDER BY DESC(?obj)LIMIT 5 
        """

res = return_sparql_query_results(query_string)
for row in res["results"]["bindings"]:
   print(row["ent"]["value"])

Запросы в исходной форме возвращают URI, но мне нужно получить метку / имя объекта. Как я могу это сделать в Python?

Текущий вывод запроса:

http://www.wikidata.org/entity/Q841796
http://www.wikidata.org/entity/Q780047

ПРИМЕЧАНИЕ. У меня нет реального доступа к запросам, поэтому я не могу их переписывать.


person Jesujoba ALABI    schedule 02.09.2020    source источник
comment
Если вы не можете переписать запросы, как можно получить метки? Я имею в виду, хорошо, вы могли бы запустить еще один запрос SPARQL - но имеет ли это смысл?   -  person UninformedUser    schedule 02.09.2020
comment
@UninformedUser, есть ли другие способы, которые я могу использовать для получения меток, не переписывая запрос SPARQL, поскольку у меня нет к нему доступа?   -  person Jesujoba ALABI    schedule 02.09.2020
comment
Ну, действительно, вам нужно как-то запрашивать Викиданные. либо запустив другой запрос SPARQL, чтобы получить метку для каждого URI, либо вы выполните другой запрос, не относящийся к SPARQL, например https://www.wikidata.org/wiki/Special:EntityData/Q841796.json, который возвращает данные JSON, которые фактически содержат запись для меток   -  person UninformedUser    schedule 02.09.2020


Ответы (1)


Мой комментарий был слишком длинным, поэтому я отправляю ответ. Вам нужно будет переписать запросы. Ниже приведен пример получения этикеток без использования службы этикеток.

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
SELECT ?country ?countryLabel 
WHERE 
{
  # instance of country
  ?country wdt:P31 wd:Q3624078.
  OPTIONAL {
     ?country rdfs:label ?countryLabel filter (lang(?countryLabel) = "en").
   }
} 
ORDER BY ?countryLabel

попробуйте!

Адаптировано для вашего примера "Союз-Т":

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
SELECT ?ent ?entLabel
WHERE 
{ 
  # instance of Soyuz-T https://www.wikidata.org/wiki/Q2637056
  ?ent wdt:P31 wd:Q2637056 . 
  # https://www.wikidata.org/wiki/Property:P2244 periapsis
  ?ent wdt:P2244 ?obj 
  OPTIONAL {
     ?ent rdfs:label ?entLabel filter (lang(?entLabel) = "en").
  }     
} ORDER BY DESC(?obj)LIMIT 5 

попробуйте!

Результат:

ent         entLabel
wd:Q841796  Soyuz T-15
wd:Q780047  Soyuz T-8
person Wolfgang Fahl    schedule 07.09.2020