我如何使用 Dbpedia 和 SPARQL 找到 u.s 的所有州及其首都?

How can i find all states of the u.s and their capitals using Dbpedia and SPARQL?

我对语义网、dbpedia 和 SPARQL 还很陌生。我想找到美国的所有州及其首都。这就是我现在拥有的。

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT DISTINCT ?state_label ?capital_label
WHERE {  
   ?state_label dct:subject dbc:States_of_the_United_States.
   ?state_label dbo:capital ?capital_label.
}

我只得到 36 个结果,而不是 50 个。有人可以帮忙吗?

在查看 resource for New Hampshire 时,我发现其中一种类型是 yago:StatesOfTheUnitedStates。当我请求所有这些时,我得到 51 个结果,当我请求所有这些及其大写时,我得到 50 个。这些数字听起来不错,但看看数据,它有点复杂;有一个非州的结果(U.S。州),新泽西州有两个(资源特伦顿和字符串 "Trenton"),特拉华州没有列出首府(我不是知道为什么,但 DBpedia 中不存在三元组)。无论如何,如果你愿意拿49个有大写字母的,你可以用这个过滤:

select ?state ?capital where {
  ?state a yago:StatesOfTheUnitedStates ;
         dbp:capital ?capital .
  filter isIRI(?capital)
}

SPARQL results

有时,就像在这种情况下,问题出在数据中,而不是在您的查询中。

另请注意,尽管主要的 DBpedia 数据集通常落后于维基百科,但纠正 DBpedia 数据的主要方法仍然是编辑维基百科。如果 DBpedia 似乎没有从维基百科中提取正确的数据,这对 tell DBpedia...

很有帮助

DBpedia 中显然只有 5 个 yago:StateCapitalsInTheUnitedStates,但我们知道世界和维基百科中的数据都不是这样的——所以肯定有一些事情需要改变。

Here's a query that gets you all resources typed as yago:StatesOfTheUnitedStates 及其 http://dbpedia.org/property/capital(特拉华州缺失;新泽西州双倍)和 http://dbpedia.org/ontology/capital(几个州缺失)--

PREFIX  dbo:  <http://dbpedia.org/ontology/>
PREFIX  dbp:  <http://dbpedia.org/property/>

  SELECT  ?state 
          ?dbocapital 
          ?dbpcapital 
   WHERE 
     {
                       ?state            a  yago:StatesOfTheUnitedStates 
          OPTIONAL  {  ?state  dbo:capital  ?dbocapital                   }
          OPTIONAL  {  ?state  dbp:capital  ?dbpcapital                   }
     }
ORDER BY  ?state