获取使用DBPedia和SPARQL的人员的国籍
我有以下SPARQL查询:获取使用DBPedia和SPARQL的人员的国籍,sparql,dbpedia,Sparql,Dbpedia,我有以下SPARQL查询: SELECT ?nationalityLabel WHERE { dbpedia:Henrik_Ibsen dbpedia-owl:nationality ?nationality . ?nationality rdfs:label ?nationalityLabel . } 我已检查Henrik Ibsen是否存在,以及他是否拥有国籍/财产: 这是一个本体: 下面列出的查询非常类似: 我的问题是查询不返回任何结果 如果我能得到帮助解决这个问题,那就太
SELECT ?nationalityLabel WHERE {
dbpedia:Henrik_Ibsen dbpedia-owl:nationality ?nationality .
?nationality rdfs:label ?nationalityLabel .
}
我已检查Henrik Ibsen是否存在,以及他是否拥有国籍/财产:
这是一个本体:
下面列出的查询非常类似:
我的问题是查询不返回任何结果
如果我能得到帮助解决这个问题,那就太好了
总结解决方案:
两个答案都很好,所以都投了赞成票,但最终还是落在了Joshua的头上,因为他告诉我dbpedia猫头鹰更干净了。我认为最佳解决方案:
首先向dbpedia owl查询出生地:
select ?label {
dbpedia:Henrik_Ibsen
dbpedia-owl:birthPlace
[ a dbpedia-owl:Country ;
rdfs:label ?label ]
filter langMatches(lang(?label),"en")
}
如果找到,则获取人名:
select ?label {
dbpedia:Norway dbpedia-owl:demonym ?label
filter langMatches(lang(?label),"en")
}
如果上述操作失败,则执行“脏”查询:
当然,“脏”是指数据是正确的,但不经常显示顺序可能更好,因为人们可能出生在一个国家,但来自另一个国家。查询有两个问题:
dbprop:national
值是一个文本,不能用作主题资源,因此,dbpprop:national
永远不会有标签。相反,在数据存在的地方,您可以使用dbpedia owl:national
,这是您最初使用的。碰巧亨利克·易卜生没有与他相关的dbpedia-owl:national
价值观*dbpprop:national
。您是对的,还有一个dbpedia owl:national
属性,但不幸的是,Henrik Ibsen没有它的值。然而,Henrik Ibsen拥有的dbpprop:national
的值是一个字符串,它是一个文本,并且文本不能是RDF中三元组的主题,因此查询中的?national rdfs:label?nationalityLabel
DBpedia本体数据(DBpedia owl
)往往比dbpprop
数据更干净,因此您可能更喜欢使用Henrik Ibsen确实具有的DBpedia owl
属性的解决方案。在本例中,您可以查看dbpedia owl:birthPlace
。然后你可以得到出生地的国家名称:
select ?label {
dbpedia:Henrik_Ibsen
dbpedia-owl:birthPlace
[ a dbpedia-owl:Country ;
rdfs:label ?label ]
}
您可能希望缩小允许的语言范围:
select ?label {
dbpedia:Henrik_Ibsen
dbpedia-owl:birthPlace
[ a dbpedia-owl:Country ;
rdfs:label ?label ]
filter langMatches(lang(?label),"en")
}
这些查询将生成国家的名称,但它需要相应的名称,您可以获得国家的dbpedia owl:demonym
值(如果可用)。可能最好将人名设置为可选,因为粗略的调查表明,DBpedia中的许多国家都没有人名值,因此国家名称可能是唯一的选择。例如:
select ?name ?demonym {
dbpedia:Henrik_Ibsen dbpedia-owl:birthPlace ?country .
?country a dbpedia-owl:Country ; rdfs:label ?name .
optional { ?country dbpedia-owl:demonym ?demonym }
filter langMatches(lang(?name),"en")
filter langMatches(lang(?demonym),"en")
}
这为我发现了一个很酷的新问题。如果我像Henrik_Ibsen一样拥有“Norwegian”字符串,那么如何识别该国籍值对应的国家?(这将是
http://dbpedia.org/page/Norway
)@Kristian我也在想同样的道理,因为“挪威”和“挪威”之间有着明显的区别。DBpedia可能有也可能没有这些信息;我想知道WordNet是否有?@Kristian我想当你要求出生地获得国家名称(挪威)时,你可以得到“挪威”的dbpedia owl:demonym属性,然后你会得到“挪威”。@JoshuaTaylor这很酷。更不用说,dbpedia-owl:demonym
听起来很金属\m/@JoshuaTaylor发现了这个问题。出生地通常不仅仅是国家,而是城市/地区。像他一样:不知道怎样才能把这个国家从中拯救出来。。。
select ?label {
dbpedia:Henrik_Ibsen
dbpedia-owl:birthPlace
[ a dbpedia-owl:Country ;
rdfs:label ?label ]
filter langMatches(lang(?label),"en")
}
select ?name ?demonym {
dbpedia:Henrik_Ibsen dbpedia-owl:birthPlace ?country .
?country a dbpedia-owl:Country ; rdfs:label ?name .
optional { ?country dbpedia-owl:demonym ?demonym }
filter langMatches(lang(?name),"en")
filter langMatches(lang(?demonym),"en")
}