我已经忘记了关于 DBpedia 的所有新知识,SPARQL
并且当我用 Google 搜索这些示例时,我发现所有示例都太复杂且难以理解。
我希望做的是传入两个或三个维基百科页面,并取回所有页面都属于的维基百科类别集。
这似乎应该非常简单,SPARQL
所以我希望有一个非常简单的例子来帮助我开始。
这实际上是您之前关于获取属于两个类别的所有页面的问题的变体。唯一的区别是这一次,您需要两个/三个subject而不是objects,因此您不能使用逗号分隔的值枚举,而是必须写出您想要匹配的三元组模式。
例如,要获取西班牙和葡萄牙都属于的所有类别,您可以简单地执行如下查询:
SELECT ?cat
WHERE {
<http://dbpedia.org/resource/Spain> dcterms:subject ?cat .
<http://dbpedia.org/resource/Portugal> dcterms:subject ?cat .
}
这个查询的作用是为主题“西班牙”和“葡萄牙”选择所有具有相同值的三元组?cat
模式dcterms:subject
。换句话说,它准确地检索两种资源都属于的那些类别。
诀窍是用图形来思考,或者用连接的主题和对象来思考三元组。这是一种精神上的转变,但一旦你有了它,查询编写就会变得容易得多。
wikipedia 和 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")
}