я новичок в SPARQL и, вероятно, делаю логическую ошибку, но у меня есть проблема:
я хочу получить "Freddie_Mercury" из списка людей, у каждого из которых есть rdf:Type как dbo:MusicalArtist.
Первый запрос, который я сделал, таков:
select ?x where{?x a dbo:MusicalArtist; dbo:birthName ?realName. FILTER regex(?realName,"Farrokh Bulsara")}
Это прекрасно работает. Я получаю ссылку на страницу Фредди Меркьюри и могу идти. Но если я запущу следующий код Python, Фредди Меркьюри не войдет в список. Почему?
from SPARQLWrapper import SPARQLWrapper, JSON
#select all people with type MusicalArtist#
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery(
"""select ?singer where{?singer a dbo:MusicalArtist} """)
sparql.setReturnFormat(JSON)
resultsSingers = sparql.query().convert()
#creating list of singers (only complete name)#
singerNames = []
iFoundFreddie = False
#for result in "bindings"#
for result in resultsSingers["results"]["bindings"]:
try:
#get string in "singer" in "value", after "/resource/"#
singerN = result["singer"]["value"].split("/resource/")[1]
#add string to list#
singerNames.append(singerN)
if "_Mercury" in singerN:
iFoundFreddie = True
except:
print("",end = "")
print(iFoundFreddie)
Спасибо вам! Как вы обнаружили, что в DBpedia есть 71014 объектов для этого типа?
select (count(?x) as ?cnt) {?x a dbo:MusicalArtist }
DBpedia имеет ограничение в 10 000 на размер набора результатов, который вы можете получить с помощью одного запроса, и в DBpedia есть 71 014 музыкальных исполнителей. Используйте limit
и offset
, чтобы имитировать разбиение на страницы и получить все результаты по нескольким запросам (фактически, 8 запросов, чтобы получить всех музыкальных исполнителей).
Вы можете узнать, сколько сущностей существует для определенного типа, например:
select (count(?x) as ?cnt) {?x a dbo:MusicalArtist }
DBpedia имеет ограничение
10 000
на размер набора результатов, который вы можете получить с помощью одного запроса, и в DBpedia есть71 014
музыкальные исполнители. Используйтеlimit
иoffset
, чтобы имитировать разбиение на страницы и получить все результаты по нескольким запросам (фактически, 8 запросов, чтобы получить всех музыкальных исполнителей здесь)