掌握可选属性DBpedia的结果(Getting dbpedia results with opti

2019-10-18 11:19发布

我建立一个应用程序,它显示给定文本的实体的信息。 我使用的是sparqlwrapper库Python来查询DBpedia中。 我使用下面的代码时,我得到一个Person的实体:

def get_person_data(einfo):
    data = {}
    try:
        uri = einfo['disambiguated']['dbpedia']

        sparql = SPARQLWrapper("http://dbpedia.org/sparql")
        query = u"""
        SELECT ?birthDate, ?birthName, ?birthPlace
        WHERE { <%s>
                dbpprop:birthDate ?birthDate ;
                dbpprop:birthName ?birthName ;
                dbpprop:birthPlace ?birthPlace
        }
        """ % uri
        sparql.setQuery(query)
        sparql.setReturnFormat(JSON)
        results = sparql.query().convert()

这段代码的问题是,当一个字段在DBpedia中缺少页面,返回结果一无所获。 这是很难知道哪些属性出现在给定类型的所有实体,所以我想定义一些可取的属性,然后得到的那些礼物。 我试着用类似查询:

SELECT * WHERE {
  ?x rdfs:label "New York"@en.
  ?x dbpedia-owl:abstract ?abstract.
  OPTIONAL { 
  ?x dbpedia-owl:areaTotal ?areaTotal.
  ?x dbpprop:governor ?governor.
  ?x dbpprop:birthPlace ?birthPlace.
  }
  FILTER (LANG(?abstract) = 'en')
}

在这种情况下,纽约没有一个birthPlace ,所以我最终只获得了abstract信息。 我想获得areaTotalgovernor了。

Answer 1:

整个可选块匹配或没有。 如果你想有选择地匹配一些不同的东西,你需要多个可选块,如

SELECT * WHERE {
  ?x rdfs:label "New York"@en.
  ?x dbpedia-owl:abstract ?abstract.
  OPTIONAL { ?x dbpedia-owl:areaTotal ?areaTotal. }
  OPTIONAL { ?x dbpprop:governor ?governor. }
  OPTIONAL { ?x dbpprop:birthPlace ?birthPlace. }
  FILTER (LANG(?abstract) = 'en')
}

SPARQL结果



文章来源: Getting dbpedia results with optional properties