Почему я получаю другой результат? - PullRequest
0 голосов
/ 29 мая 2019

Я новичок в SPARQL и, возможно, я делаю логическую ошибку, но у меня есть проблема:

Я хочу получить "Freddie_Mercury" из списка людей, каждый из которых имеетrdf: введите как 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)

1 Ответ

1 голос
/ 30 мая 2019

DBpedia имеет ограничение в 10 000 на размер набора результатов, который вы можете получить одним запросом, и в DBpedia есть 71 014 музыкальных артистов.Используйте limit и offset для имитации пагинации и получения всех результатов по нескольким запросам (фактически, 8 запросов, чтобы получить всех музыкальных исполнителей здесь).

Вы можете найти, сколько сущностей существует для определенного типа.как это:

select (count(?x) as ?cnt) {?x a dbo:MusicalArtist }
...