使用DBpedia查找哪些维基百科类别对于几个给定页面是通用的?

时间:2012-07-02 10:53:19

标签: sparql wikipedia dbpedia

我忘了所有关于DBpedia和SPARQL的新篇章,并且发现当我为他们谷歌时,所有的例子都太复杂且难以理解。

我希望做的是传入两个或三个维基百科页面,并获取所有页面所属的维基百科类别集。

这似乎在SPARQL中应该非常简单,所以我很感激一个非常小的例子让我开始。

2 个答案:

答案 0 :(得分:4)

这实际上是您之前关于getting all pages belonging to two categories的问题的变体。唯一的区别是,这次,您需要两个/三个主题而不是对象,因此您不能使用以逗号分隔的值枚举,而是必须写出来你要匹配的三重模式。

例如,要获取西班牙和葡萄牙所属的所有类别,您只需执行以下查询:

SELECT ?cat   
WHERE { 
 <http://dbpedia.org/resource/Spain> dcterms:subject ?cat .
 <http://dbpedia.org/resource/Portugal> dcterms:subject ?cat .
} 

此查询的作用是为主题&#39;西班牙&#39;选择具有相同?catdcterms:subject的所有三重模式。和葡萄牙&#39;。换句话说,它精确地检索两个资源都是其成员的那些类别。

诀窍是用图表来思考,或者用连接的主题和对象进行三元组。这有点心理转变但是一旦你掌握了这一点,查询编写就变得容易多了。

答案 1 :(得分:1)

维基百科和dbpedia URI之间的映射如下:

对于

http://en.wikipedia.org/wiki/Spain

DBPedia uri是:

http://dbpedia.org/resource/Spain

所以要找出上面的类别

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/Spain> dcterms:subject ?categoryUri.
  ?categoryUri rdfs:label ?categoryName.
  FILTER (lang(?categoryName) = "en")
}