我是SPARQL的新手,可能我在做一个逻辑错误,但这是我遇到的问题:
我想从一列人员中检索“ Freddie_Mercury”,每个人的rdf:Type也类似于dbo:MusicalArtist。
我做的第一个查询是这样:
select ?x where{?x a dbo:MusicalArtist; dbo:birthName ?realName. FILTER regex(?realName,"Farrokh Bulsara")}
这很好。我有一个指向房地美页面的链接,我可以去。 但是,如果我运行以下python代码,则Freddie Mercury不会在列表中输入。为什么?
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)
答案 0 :(得分:1)
DBpedia只能通过单个查询获得的结果集大小限制为10,000,并且DBpedia中有71,014名音乐艺术家。使用limit
和offset
模拟分页并通过多个查询获得所有结果(实际上,有8个查询可将所有音乐艺术家放在这里)。
您可以找到像这样的特定类型有多少个实体:
select (count(?x) as ?cnt) {?x a dbo:MusicalArtist }