如何使用 SPARQL 在 DBPedia 中为多个名称属性获取单个名称?
How to get a single name for multiple name properties in DBPedia with SPARQL?
我需要从 DBPedia 获取人名,但问题是不是每个人都有 dbpprop:fullname
属性,有时它只有 dbpprop:name
或 rdfs: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
COALESCE
将参数列表作为输入,并输出与错误不对应的第一个参数。由于未绑定变量对应于错误,因此这将 return 全名(如果存在),否则为名称(如果存在),否则为标签(如果存在)。
我需要从 DBPedia 获取人名,但问题是不是每个人都有 dbpprop:fullname
属性,有时它只有 dbpprop:name
或 rdfs: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
COALESCE
将参数列表作为输入,并输出与错误不对应的第一个参数。由于未绑定变量对应于错误,因此这将 return 全名(如果存在),否则为名称(如果存在),否则为标签(如果存在)。