来自dbpedia的简单sparql查询

Sar*_*fia 7 sparql dbpedia virtuoso

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

我的查询

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 .
}
Run Code Online (Sandbox Code Playgroud)

我也使用[SPARQL查询验证器] [2]试图找出我的问题,似乎我使用了不正确的前缀"dbp:name?bandname"我只是希望在可能的情况下以JSON返回三元组.

一旦我可以运行它,我想添加另一个前缀,从GeoNames,以查看与乐队相关的地方,如果可能(但该部分是在未来).任何见解将不胜感激!

Kev*_*inD 6

您的查询存在一些问题.

  • 乐队的"name"属性具有以下URI:http://dbpedia.org/property/name.它是属性,而不是资源,但您在前缀中将其定义为.你应该按如下方式定义它: PREFIX dbp: <http://dbpedia.org/property/>
  • 我只是快速检查一下乐队页面的属性,并看到,除了您正在使用的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"))
}
Run Code Online (Sandbox Code Playgroud)

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

但是如果你仍然想使用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"))
}
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!


Tom*_*icz 5

问题是未定义的前缀dbpedia.另外我认为你必须替换dbp:namefoaf: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 .
}
Run Code Online (Sandbox Code Playgroud)

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