2011-12-25 71 views
2

提取独特的实体,请看下面的代码:SPARQL:从DBpedia中

PREFIX category: <http://dbpedia.org/resource/Category:> 
PREFIX dcterms: <http://purl.org/dc/terms/> 
PREFIX dbpedia: <http://dbpedia.org/ontology/> 

SELECT DISTINCT * 
WHERE { 
    ?s dcterms:subject category:Living_people . 
    ?s foaf:name ?name 
} 
LIMIT 10000 

当运行它,我得到这样的结果:

Sir Alexander Chapman Ferguson 
Sir Alex Ferguson 

虽然他们是不同的项目,他们肯定相同的实体。所以我想在寻址SPARQL端点时减少输出,也就是说我想避免编辑输出数据,因为在这种情况下它可能很有挑战性。你能帮我解决吗?我的查询中应该修复哪些内容?

回答

1

正如您在运行查询时所看到的,您提到的两行都引用相同的资源:<http://dbpedia.org/resource/Alex_Ferguson>。您在查询结果中获得多行的原因很简单,因为此人有多个名称。

因此,如果您只需确保不会在应用程序中获取重复项,只需确保您的应用程序将每个唯一值作为单独的人在查询结果中对待“s”。另一方面,如果你的问题是你得到一个人的多个名字的事实,你也许可以使用一些其他的属性。例如,dbpedia:fullname只有一个条目,同样属性dbpedia:surname和dbpedia:givenName。

+0

非常感谢。 – Hidalgos 2011-12-26 15:08:31

+0

请再提一个问题。你是否暗示我应该添加一个子查询? – Hidalgos 2011-12-26 20:17:00

+0

很难回答你的问题,而不知道你试图使用查询的内容,以及你使用的是什么上下文。无论如何,你的查询很好,我的意思是,如果你正在处理应用程序中的查询结果,你通常会在某种数据结构中存储匹配的对象(在这种情况下是人员)。你可以确保你不存储同一个对象的重复实例。 – Jan 2011-12-26 22:11:05