SPARQL用于直接dbpedia资源或wikiPageRedirects

时间:2015-07-03 15:31:36

标签: sparql dbpedia

我试图通过国家/地区的名称查询来自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上的搜索,它会更好。

2 个答案:

答案 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 .
}

SPARQL results

答案 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 .     
 }
}

Result