合并2个查询

时间:2017-01-24 12:00:28

标签: python sparql semantic-web dbpedia

我有一个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

1 个答案:

答案 0 :(得分:1)

您可以使用SPARQL --parseGrace skipField

或者您可以使用SPARQL 1.1 UNION将相同的查询应用于多个资源。例如 -

VALUES