来自 dbpedia 的简单 sparql 查询
simple sparql query from dbpedia
我对尝试根据教程构建的 SPARQL 查询有疑问。我想生成三元组,其中 return 乐队成员列表以及他们使用 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"我只想要三元组 return 如果可能,请输入 JSON。
一旦我可以将其发送到 运行,我想添加另一个来自 GeoNames 的前缀,以查看与波段关联的地点(如果可能的话)(但那部分是在将来)。任何见解将不胜感激!
问题出在未定义的前缀 dbpedia
上。另外我认为你必须用 foaf:name
:
替换 dbp: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
您的查询存在一些问题。
- 乐队的 "name" 属性 具有以下 URI:http://dbpedia.org/property/name。它是 属性,而不是 resource,但您在前缀中这样定义了它。您应该按如下方式定义它:
PREFIX dbp: <http://dbpedia.org/property/>
- 我刚刚快速查看了什么 a band page has as properties,发现除了您使用的 dbo:bandMember,还有另一个 属性,currentMembers,似乎检索更多信息。这似乎是合乎逻辑的,因为 dbo:bandMember 仅检索实体( 成员 URI ),而 dbp:currentMembers 也检索文字。这取决于您的用例...
- 您在查询中使用了 dbpedia:prefix,似乎没有预先定义。
这是我用来检索与其成员关联的乐队列表的查询:
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"))
}
希望对您有所帮助!
我对尝试根据教程构建的 SPARQL 查询有疑问。我想生成三元组,其中 return 乐队成员列表以及他们使用 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"我只想要三元组 return 如果可能,请输入 JSON。
一旦我可以将其发送到 运行,我想添加另一个来自 GeoNames 的前缀,以查看与波段关联的地点(如果可能的话)(但那部分是在将来)。任何见解将不胜感激!
问题出在未定义的前缀 dbpedia
上。另外我认为你必须用 foaf:name
:
dbp: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
您的查询存在一些问题。
- 乐队的 "name" 属性 具有以下 URI:http://dbpedia.org/property/name。它是 属性,而不是 resource,但您在前缀中这样定义了它。您应该按如下方式定义它:
PREFIX dbp: <http://dbpedia.org/property/>
- 我刚刚快速查看了什么 a band page has as properties,发现除了您使用的 dbo:bandMember,还有另一个 属性,currentMembers,似乎检索更多信息。这似乎是合乎逻辑的,因为 dbo:bandMember 仅检索实体( 成员 URI ),而 dbp:currentMembers 也检索文字。这取决于您的用例...
- 您在查询中使用了 dbpedia:prefix,似乎没有预先定义。
这是我用来检索与其成员关联的乐队列表的查询:
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"))
}
希望对您有所帮助!