DBpedia 使用 sparql 获取页面类别

DBpedia getting page category using sparql

我正在使用 DBpedia 在 R 中使用 SPARQL 获取页面类别。但是,它存在一些问题。我使用的源代码:

PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>  
SELECT ?categoryUri ?categoryName WHERE {
    <http://dbpedia.org/resource/xxx> dcterms:subject ?categoryUri.
         ## xxx are random words (e.g. Agree, Film, Work, Plan...)
    ?categoryUri rdfs:label ?categoryName.
    FILTER (lang(?categoryName) = "en")
}

问题是:

  1. 如果需要重定向的话(例如同意 -> 协议)无法检索类别

  2. 上面的源代码无法使用消歧页面,因为词的类别(例如Work)中有太多的子页面

那么,如何解决以上问题呢?如果有人能提供您的帮助,我将不胜感激!!!

SPARQL 只执行您编写的内容,因此背后没有魔法。如果某些资源 :s 可能通过 属性 :p 连接到其他资源,请添加三重模式 :s :p ?o . - 有时您甚至可能会考虑使用 属性 路径在解决 :p 的传递闭包的情况下,即 :s :p* ?o ..

重定向已解决:

PREFIX  dbo:  <http://dbpedia.org/ontology/>
PREFIX  dcterms: <http://purl.org/dc/terms/>

SELECT * WHERE
  { <http://dbpedia.org/resource/Agree> (dbo:wikiPageRedirects)* ?page
    OPTIONAL
      { ?page dcterms:subject ?categoryUri}
  }

注意OPTIONAL子句,这里是必要的,因为并非DBpedia中的所有资源都属于一个类别。

包括消歧页面:

PREFIX  dbo:  <http://dbpedia.org/ontology/>
PREFIX  dcterms: <http://purl.org/dc/terms/>

SELECT * WHERE
  { <http://dbpedia.org/resource/Agree> (dbo:wikiPageRedirects)*/(dbo:wikiPageDisambiguates)* ?page
    OPTIONAL
      { ?page dcterms:subject ?categoryUri}
  }