我需要一个Sparql查询来恢复特定DBpedia资源的类型。例如:
pt.DBpedia资源:http:// pt .dbpedia.org / resource / Argentina
预期类型:国家(可在http://pt.dbpedia.org/page/Argentina看到)
使用 pt .DBpedia Sparql Virtuoso界面(http://pt.dbpedia.org/sparql)我有以下查询:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?l ?t where {
?l rdfs:label "Argentina"@pt .
?l rdf:type ?t .
}
但它没有恢复任何东西,只需打印变量名称。 The virtuoso answer
实际上我也不需要恢复标签(?l)。
任何人都可以修复它,或者帮我定义正确的查询?
答案 0 :(得分:3)
http
我不确定您是如何生成查询字符串的,但是当我将查询复制并粘贴到端点并运行它时,我会得到结果,结果网址如下所示:
http://pt.dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fpt.dbpedia.org&sho...
但是,您问题中的链接是:
http://pt.dbpedia.org/sparql?default-graph-uri=pt.dbpedia.org%2F&should-sponge...
如果仔细查看,您会发现default-graph-uri
参数不同:
yours: pt.dbpedia.org%2F
mine: http%3A%2F%2Fpt.dbpedia.org
我不确定你是如何得到一个像你那样的网址,但它不对; default-graph-uri
needs to be http://pt.dbpedia.org
,而不是pt.dbpedia.org/
。
当我运行您已链接到的终端提供的查询时,我会得到我期望的结果。值得注意的是,此处的标签是文字"Argentina"@pt
,您所谓的?l
是个人,而不是标签。个人?l
标签为"Argentina"@pt
。
我们可以使用?i
代替?l
(建议i
ndividual)来简化您的查询:
select ?i ?type where {
?i rdfs:label "Argentina"@pt ;
a ?type .
}
当我在Portuguese endpoint处运行时,我得到了以下结果:
如果您不希望结果中有个人,则不必select
:
select ?type where {
?i rdfs:label "Argentina"@pt ;
a ?type .
}
甚至:
select ?type where {
[ rdfs:label "Argentina"@pt ; a ?type ]
}
如果您知道资源的标识符,并且不需要使用其标签来检索它,您甚至可以这样做:
select ?type where {
dbpedia-pt:Argentina a ?type
}
type
==========================================
http://www.w3.org/2002/07/owl#Thing
http://www.opengis.net/gml/_Feature
http://dbpedia.org/ontology/Place
http://dbpedia.org/ontology/PopulatedPlace
http://dbpedia.org/ontology/Country
http://schema.org/Place
http://schema.org/Country