如何构建正确的SPARQL查询

时间:2014-12-31 13:29:51

标签: rdf sparql semantic-web dbpedia linked-data

我需要使用SPARQL查询和dbpedia.org

让所有为足球队效力的球员

我可以使用http://dbpedia.org/sparql和此查询获取当前团队成员:

PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX p: <http://dbpedia.org/property/>  
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>           
SELECT * WHERE { 
      <http://dbpedia.org/resource/Manchester_United_F.C.> p:name ?player.
      ?player dbpedia-owl:birthPlace ?city;
              dbpedia-owl:birthDate ?dob.
}

如何让所有为这支足球队效力的球员?

1 个答案:

答案 0 :(得分:4)

我会使用这样的查询:

select distinct ?player ?birthPlace ?birthDate where {
  ?player dbpedia-owl:team <http://dbpedia.org/resource/Manchester_United_F.C.> ;
          a dbpedia-owl:Person ;
          dbpedia-owl:wikiPageID [] .
  optional { ?player dbpedia-owl:birthPlace ?birthPlace }
  optional { ?player dbpedia-owl:birthDate ?birthDate }
}

SPARQL results

使用可选可确保未列出出生地或出生日期的玩家仍可包含在结果中。使用一个dbpedia-owl:Person 有助于删除一些“脏”数据(即具有 dbpedia-owl:team 属性,但不是玩家的东西)。同样,添加 dbpedia-owl:wikiPageID [] 可确保结果是以文章形式存在的内容。如果你不包含它,那么你会得到像Manchester_United_F.C.__Ryan_Giggs__1这样的结果,它似乎是一种职业站实体。 (请注意,Ryan Giggs有例如 dbpedia-owl:careerStation dbpedia:Ryan_Giggs__1 。)