2016-12-01 69 views
0

与人X连锁我是新来使用SPARQL查询DBpedia中。我想找到与使用DBPedia的人员X相关的人员。找人使用SPARQL和DBpedia的

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

见RDF和SPARQL教程,了解这些数据是由三元组和查询是通过三重模式来完成。我的意思是,你的查询选择了一些'?P',但它没有用在WHERE部分。 – AKSW

回答

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 
--------------------------------------------------------- 

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