获取使用DBPedia和SPARQL的人员的国籍

获取使用DBPedia和SPARQL的人员的国籍,sparql,dbpedia,Sparql,Dbpedia,我有以下SPARQL查询: SELECT ?nationalityLabel WHERE { dbpedia:Henrik_Ibsen dbpedia-owl:nationality ?nationality . ?nationality rdfs:label ?nationalityLabel . } 我已检查Henrik Ibsen是否存在,以及他是否拥有国籍/财产: 这是一个本体: 下面列出的查询非常类似: 我的问题是查询不返回任何结果 如果我能得到帮助解决这个问题,那就太

我有以下SPARQL查询:

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")
}
如果上述操作失败,则执行“脏”查询:


当然,“脏”是指数据是正确的,但不经常显示顺序可能更好,因为人们可能出生在一个国家,但来自另一个国家。

查询有两个问题:

  • 这是dbpprop:国籍
  • 标签似乎不存在,除非将该变量设置为可选,否则它将完全删除该行EDIT:*Joshua Taylor的回答提醒我标签不存在,因为
    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")
    }