如果您想直接關係到一個人的人,那麼你需要兩個三模式,一個具有人作爲主體,另一個作爲對象。下面是構建這樣一個查詢的一種方法:
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
---------------------------------------------------------
一般要求這樣的文字會給你帶來很多垃圾結果,你可以使用字符串過濾器來減少它。
見RDF和SPARQL教程,瞭解這些數據是由三元組和查詢是通過三重模式來完成。我的意思是,你的查詢選擇了一些'?P',但它沒有用在WHERE部分。 – AKSW