使用Sparql和DBpedia查找与Person X链接的人

时间:2016-12-01 02:18:11

标签: sparql dbpedia rdfs linked-data

我是使用Sparql查询DBPedia的新手。我想找到与使用DBPedia的人X相关的人。

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpr: <http://dbpedia.org/resource/>
PREFIX dbpo: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
SELECT  ?P 
WHERE {dbpr:Chuck_Norris}

1 个答案:

答案 0 :(得分:1)

如果您希望与某人直接相关的人,则您需要两个三重模式,一个将此人作为主题,另一个作为对象。以下是构建此类查询的一种方法:

SELECT DISTINCT ?has ?of ?person 
WHERE {

{?person a foaf:Person; 
?of dbr:Chuck_Norris} 

UNION

{?person a foaf:Person. 
dbr:Chuck_Norris ?has ?person}

}

我使用dbr:,因为这是DBpedia中的预定义前缀。

在某些情况下,如果您在http://live.dbpedia.org/sparql上查询

,您会得到不同的结果

现在,此查询有一个限制。它将只为您提供与其他DBpedia资源的关系。通常可能会有相关人士称为文字。我不知道如何获得它们的优雅方式,但一种方法是要求提供已知用于人际关系的属性列表。以下是一个列表,其中包含dbp:spouse的一个值:

SELECT DISTINCT ?has ?of ?person 
WHERE {

{?person a foaf:Person; 
?of dbr:Chuck_Norris} 

UNION

{?person a foaf:Person. 
dbr:Chuck_Norris ?has ?person}

UNION

{values ?has {dbp:spouse}
dbr:Chuck_Norris ?has ?person .}

}

http://live.dbpedia.org/sparql开始,这将为您带来额外的收获:

has                                | person
---------------------------------------------------------
http://dbpedia.org/property/spouse | "Dianne Holechek"@en
http://dbpedia.org/property/spouse | "Gena O'Kelley"@en
---------------------------------------------------------

一般来说,要求这样的文字会带来很多垃圾结果,你可以使用字符串过滤器来减少这些结果。