簡體   English   中英

來自dbpedia的簡單sparql查詢

[英]simple sparql query from dbpedia

我有一個關於我正在嘗試從教程構建的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 .
}

我也使用[SPARQL查詢驗證器] [2]試圖找出我的問題,似乎我使用了不正確的前綴“dbp:name?bandname”我只是希望在可能的情況下以JSON返回三元組。

一旦我可以運行,我想添加另一個前綴,從GeoNames,以查看與樂隊相關的地方,如果可能(但該部分是在未來)。 任何見解將不勝感激!

您的查詢存在一些問題。

  • 樂隊的“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"))
}

過濾器部分允許我們避免重復,以防文字也在其他語言中定義。

但是如果你仍然想使用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"))
}

希望有所幫助!

問題是未定義的前綴dbpedia 另外我認為你必須用foaf:name替換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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM