2016-12-01 83 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 
--------------------------------------------------------- 

一般要求這樣的文字會給你帶來很多垃圾結果,你可以使用字符串過濾器來減少它。