来自dbpedia的简单sparql查询

时间:2016-02-24 07:25:14

标签: sparql dbpedia virtuoso

我有一个关于我正在尝试从教程构建的SPARQL查询的问题。我想生成三元组,它返回一个乐队成员列表以及他们使用DBPedia端点所在的乐队。

my query

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/resource/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?name ?bandname where {
?person foaf:name ?name .
?band dbo:bandMember ?person .
?band dbo:genre dbpedia:Punk_rock .
?band dbp:name ?bandname .
}

我也在使用[SPARQL查询验证器] [2]来试图找出我的问题,而且我似乎使用了“dbp:name?bandname”的错误前缀我只想在JSON中返回三元组如果可能的话。

一旦我可以运行它,我想添加另一个来自GeoNames的前缀,以查看与乐队相关联的地方,如果可能的话(但这部分是将来的)。任何见解都将非常感谢!

2 个答案:

答案 0 :(得分:6)

您的查询存在一些问题。

  • 乐队的“name”属性具有以下URI:http://dbpedia.org/property/name。它是属性,而不是资源,但您在前缀中将其定义为此类。你应该按如下方式定义它: PREFIX dbp: <http://dbpedia.org/property/>
  • 我刚刚对a band page has as properties进行了快速检查,看到除了您正在使用的dbo:bandMember之外,还有另一个属性currentMembers,它似乎可以检索更多信息。这似乎是合乎逻辑的,因为dbo:bandMember只检索实体(成员URI ),而dbp:currentMembers也检索文字。这取决于你的用例......
  • 您在查询中使用了dbpedia:前缀,这似乎没有事先定义过。

以下是我用来检索与其成员关联的乐队列表的查询:

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?members ?bandName where {
 ?band dbo:genre dbr:Punk_rock .
 ?band dbp:currentMembers ?members.
 ?band foaf:name ?bandName
 FILTER(langMatches(lang(?bandName), "en"))
}

过滤器部分允许我们避免重复,以防文字也在其他语言中定义。

但如果您仍想使用dbo:bandMember属性,此查询也可以完成这项工作:

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?personName ?bandName where {
 ?band dbo:bandMember ?person .
 ?person foaf:name ?personName .
 ?band dbo:genre dbr:Punk_rock .
 ?band foaf:name ?bandName
 FILTER(langMatches(lang(?bandName), "en"))
 FILTER(langMatches(lang(?personName), "en"))
}

希望有所帮助!

答案 1 :(得分:5)

问题在于未定义的前缀dbpedia。另外,我认为您必须将dbp:name替换为foaf:name

PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/resource/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?name ?bandname where {
   ?person foaf:name ?name .
   ?band dbo:bandMember ?person .
   ?band dbo:genre dbp:Punk_rock .
   ?band foaf:name ?bandname .
}

唉,SELECT你不会获得三元组,而只是表格结果中的名字(或其他东西)。很像SQL。如果你想要三元组,你需要CONSTRUCT