用于直接 dbpedia 资源或 wikiPageRedirects 的 SPARQL

SPARQL for direct dbpedia resource OR wikiPageRedirects

我正在尝试通过国家名称从 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 上的搜索。

这个呢?

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

检查资源是否 "exists" 有点模糊,因为 IRI 只是常量数据。问题实际上是 DBpedia 是否包含关于特定资源的任何三元组。在你的情况下,你想知道它是否重定向到其他任何东西,或者它是否有自己的属性。形式为 dbpedia:France dbpedia-owl:wikiPageRedirects* ?country 的 属性 路径可能是最好的方法。如果没有重定向链接,那么 ?country 就是 dbpedia:France,如果有,那么 ?country 是重定向的值。 "check" 的唯一方法是寻找那些三元组。我认为这意味着你最终会得到这样的结果(类似于我对 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