为什么我得到不同的结果?

Why do I get different result?

我是 SPARQL 的新手,可能我犯了一个逻辑错误,但这是我遇到的问题:

我想从一个人的列表中检索 "Freddie_Mercury",每个人都有 rdf:Type 和 dbo:MusicalArtist 一样。

我做的第一个查询是这样的:

select ?x where{?x a dbo:MusicalArtist; dbo:birthName ?realName. FILTER regex(?realName,"Farrokh Bulsara")}

效果很好。我得到一个 link 到 Freddie Mercury 的页面,我可以走了。 但是如果我 运行 以下 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)

DBpedia 的单次查询结果集大小限制为 10,000,而 DBpedia 中有 71,014 位音乐艺术家。使用limitoffset模拟分页,通过多次查询得到所有结果(这里其实是8次查询得到所有音乐人)

您可以找到特定类型的实体数量,如下所示:

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