我有一个python脚本,使用2个SPARQL查询查询DBpedia,并且对于每个查询,将结果放入列表中。然后我创建一个这个列表来删除重复项,我有我需要的结果。如果有可能将查询组合起来加速这个过程,这似乎是一种低效的方法。
对 SQL SPARQL有经验的人可以帮我组合这些查询以加快我的python脚本吗?
对于上下文:我想要为此函数(查询1)提供的查询字的DBpedia页面的所有属性的属性和值的标签名称以及具有数字/文本值而非标签的那些属性的标签名称作为值(查询2)。
def querydbpedia(queryword):
mylist = list()
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery("""
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?pLabel ?oLabel ?o WHERE {
<http://dbpedia.org/resource/""" + queryword + """> ?p ?o.
?p rdfs:label ?pLabel .
?o rdfs:label ?oLabel .
FILTER(LANG(?pLabel) = "" || LANGMATCHES(LANG(?pLabel), "en"))
FILTER(LANG(?oLabel) = "" || LANGMATCHES(LANG(?oLabel), "en"))
}
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
for result in results["results"]["bindings"]:
mystr = (result["pLabel"]["value"] + " - " + result["oLabel"]["value"]).lower()
mylist.append(mystr)
sparql.setQuery("""
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?pLabel ?oLabel ?o WHERE {
<http://dbpedia.org/resource/""" + queryword + """> ?p ?o.
?p rdfs:label ?pLabel .
OPTIONAL {?o rdfs:label ?oLabel} .
FILTER(LANG(?pLabel) = "" || LANGMATCHES(LANG(?pLabel), "en"))
FILTER(LANG(?o) = "" || LANGMATCHES(LANG(?o), "en"))
}
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
for result in results["results"]["bindings"]:
mystr = (result["pLabel"]["value"] + " - " + result["o"]["value"]).lower()
if not ("abstract" in mystr):
mylist.append(mystr)
mylist = list(set(mylist))
return mylist
答案 0 :(得分:1)
您可以使用SPARQL --parseGrace skipField
。
或者您可以使用SPARQL 1.1 UNION
将相同的查询应用于多个资源。例如 -
VALUES