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

时间:2019-05-29 15:25:56

标签: sparql

我是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)

1 个答案:

答案 0 :(得分:1)

DBpedia只能通过单个查询获得的结果集大小限制为10,000,并且DBpedia中有71,014名音乐艺术家。使用limitoffset模拟分页并通过多个查询获得所有结果(实际上,有8个查询可将所有音乐艺术家放在这里)。

您可以找到像这样的特定类型有多少个实体:

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