我有以下SPARQL查询:
SELECT ?nationalityLabel WHERE {
dbpedia:Henrik_Ibsen dbpedia-owl:nationality ?nationality .
?nationality rdfs:label ?nationalityLabel .
}
我已经检查过Henrik易卜生存在并且他有他的国籍本体/财产: http://dbpedia.org/page/Henrik_Ibsen
这是一个本体论: http://dbpedia.org/ontology/nationality
此处列出的非常类似的查询有效: https://stackoverflow.com/a/10248653/1680130
我遇到的问题是查询不会返回任何结果。
如果我能得到帮助解决这个问题就会很棒。
汇总解决方案: 两个答案都很棒,所以对两者都赞不绝口,但最终落在了Joshua's上,因为告知dbpedia-owl更干净。我认为是最佳解决方案:
首先检查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")
}
如果上述失败,则执行“脏”查询:
SELECT
?nationality
WHERE {
dbpedia:Henrik_Ibsen dbpprop:nationality ?nationality .
filter langMatches(lang(?nationality),"en")
}
当然“脏”意味着数据是正确的,但并不经常出现,顺序可能会更好,因为人们可能出生在一个国家,但来自不同的国家。
答案 0 :(得分:3)
Kristian's answer对于Henrik Ibsen所拥有的属性dbpprop:nationality
是正确的。你是对的,也有dbpedia-owl:nationality
属性,但不幸的是,亨利克易卜生没有它的价值。但是,Henrik Ibsen所拥有的dbpprop:nationality
的值是一个字符串,它是一个字面值,并且文字不能成为RDF中三元组的主题,因此查询中的?nationality 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")
}
这些查询会生成国家/地区的名称,但它需要相应的demonym,您可以获得该国家/地区的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")
}
答案 1 :(得分:1)
查询有两个问题:
dbprop:nationality
值是文字,不能用作主题资源,因此,永远不会有dbpprop:nationality
的标签。相反,在数据存在的地方,您将使用最初执行的dbpedia-owl:nationality
。恰好Henrik_Ibsen没有与他相关的dbpedia-owl:nationality
值* 更新了查询(已更新)。
SELECT
#### ?label #### See Edit
?nationality
WHERE {
dbpedia:Henrik_Ibsen dbpprop:nationality ?nationality .
#### OPTIONAL { ?nationality rdfs:label ?label . } #### See Edit.
}