我试图通过国家/地区的名称查询来自dbpedia的数据。我想让它找到它是否有该国家的资源或通过它存在于wikiPageRedirects。这是一个工作版本:
PREFIX res: <http://dbpedia.org/resource/>
PREFIX ont: <http://dbpedia.org/ontology/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?country ?capital ?label
WHERE {
{ res:Dominion_of_Canada ont:capital ?capital .
?capital rdfs:label ?label }
UNION
{ res:Dominion_of_Canada ont:wikiPageRedirects ?country .
?country ont:capital ?capital .
?capital rdfs:label ?label }
FILTER (lang(?label) = "en")
}
我希望(如果可能的话)分解?国家/地区。是否可以将资源分配给变量,以使SPARQL查询如下所示?
SELECT ?country ?capital ?label
WHERE {
{ ?country EXISTS res:Dominion_of_Canada } # to get the idea across
UNION
{ res:Dominion_of_Canada ont:wikiPageRedirects ?country }
?country ont:capital ?capital .
?capital rdfs:label ?label .
FILTER (lang(?label) = "en")
}
与以往一样,速度也很重要。如果资源存在,那么如果它跳过在wikiPageRedirects上的搜索,它会更好。
答案 0 :(得分:2)
检查资源是否“存在”有点模糊,因为IRI只是常量数据。问题是DBpedia是否包含关于特定资源的任何三元组。在您的情况下,您想要知道它是否重定向到其他任何东西,或者它是否具有自己的属性。表单 dbpedia:France dbpedia-owl:wikiPageRedirects *?country 的属性路径实际上可能是最好的方法。如果没有重定向链接,那么?country 是 dbpedia:France ,如果有,则?country 是重定向的值。 “检查”的唯一方法是寻找那些三元组。我认为这意味着你最终会得到这样的东西(类似于我对another question involving redirects的回答中显示的内容):
select ?country ?anthem ?author {
#-- The only way to really "check" that the resource
#-- "exists" and is not a redirect, is by checking
#-- whether it has any redirect links. If it doesn't,
#-- then ?country is dbpedia-owl:France, like you want
#-- and if it does, then then you want to follow them.
dbpedia:France dbpedia-owl:wikiPageRedirects* ?country .
#-- I'm using anthem and author here because
#-- it doesn't look like there was reliable information
#-- about the capital.
?country dbpedia-owl:anthem ?anthem .
?anthem dbpprop:author ?author .
}
答案 1 :(得分:0)
这个怎么样?
PREFIX dbr: <http://dbpedia.org/resource/>
select dbr:France ?capital ?label where {
{dbr:France a dbpedia-owl:Country.
dbr:France dbpedia-owl:capital ?capital .
?capital rdfs:label ?label .
}
union {dbr:France dbpedia-owl:wikiPageRedirects ?redirectPage.
?redirectPage dbpedia-owl:capital ?capital.
?capital rdfs:label ?label .
}
}