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

#python #sparql #mediawiki #wikidata #mediawiki-api

#python #sparql #mediawiki #викиданные #mediawiki-api

Вопрос:

У меня есть несколько запросов 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
  

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

Комментарии:

1. Если вы не можете переписать запросы, как должно быть возможно получить метки? Я имею в виду, хорошо, вы могли бы запустить другой запрос SPARQL — но имеет ли это смысл?

2. @UninformedUser, есть ли другие способы, которые я могу использовать для извлечения меток без перезаписи запроса SPARQL, поскольку у меня нет к нему доступа?

3. Ну, действительно, вам нужно как-то запросить Викиданные. либо выполнив другой запрос SPARQL для получения метки для каждого URI, либо выполнив какой-либо другой запрос, отличный от SPARQL, например https://www.wikidata.org/wiki/Special:EntityData/Q841796.json , который возвращает данные JSON, которые фактически содержат запись для меток

Ответ №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
  

<a rel="noreferrer noopener nofollow" href="https://query.wikidata.org/#PREFIX rdfs:
PREFIX wd:
PREFIX wdt:
SELECT ?country ?countryLabel
WHERE
{
# instance of country
?country wdt:P31 wd:Q3624078.
OPTIONAL {
?country rdfs:label ?countryLabel filter (lang(?countryLabel) = «en»).
}
}
ORDER BY ?countryLabel» rel=»nofollow noreferrer»>попробуйте!

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

 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 
  

<a rel="noreferrer noopener nofollow" href="https://query.wikidata.org/#PREFIX rdfs:
PREFIX wd:
PREFIX wdt:
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 » rel=»nofollow noreferrer»>попробуйте!

Результат:

 ent         entLabel
wd:Q841796  Soyuz T-15
wd:Q780047  Soyuz T-8