如何使用 SPARQL 在 DBPedia 中为多个名称属性获取单个名称?

How to get a single name for multiple name properties in DBPedia with SPARQL?

我需要从 DBPedia 获取人名,但问题是不是每个人都有 dbpprop:fullname 属性,有时它只有 dbpprop:namerdfs:label 属性。

澄清一下:我想查询优先选择第一个 属性 的名称,如果不存在则获取第二个 属性,如果不存在则获取第三个属性,等等

那么我怎样才能从

中得到人的名字呢?
   dbpprop:name (person name = [dbpprop:name] if no [dbpprop:fullname])

  rdfs:name (person name = [rdfs:name] if no both [dbpprop:fullname] and [dbpprop:name])

您可以使用 COALESCE 函数执行此操作:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dbpprop: <http://dbpedia.org/property/>

SELECT DISTINCT ?x (COALESCE(?dbpfn, ?dbpn, ?label) as ?name) 
WHERE { 
      ?x a foaf:Person .
      OPTIONAL { ?x dbpprop:fullname ?dbpfn }
      OPTIONAL { ?x dbpprop:name ?dbpn }
      OPTIONAL { ?x rdfs:label ?label }
}
LIMIT 100

Result

COALESCE 将参数列表作为输入,并输出与错误不对应的第一个参数。由于未绑定变量对应于错误,因此这将 return 全名(如果存在),否则为名称(如果存在),否则为标签(如果存在)。