2014-04-14 41 views
1

我試圖使用SPARQL爲大學提取校友名單。dbpedia上的機構的所有人的SPARQL查詢

我已經確定的本體,我需要:

我嘗試這個查詢,其中you can examine here

SELECT * WHERE { 
    ?University dbpedia2:alumni ?Person . 
    } 

這似乎是有道理的,除了這返回計數而不是人e,正如本體論所說的財產所包含的那樣。

我發現this query某處似乎找到了更好的工作找到大學,但是非常緩慢。

SELECT * WHERE { 
    { <http://dbpedia.org/ontology/University> ?property ?hasValue } 
    UNION 
    { ?isValueOf ?property <http://dbpedia.org/ontology/University> } 
} 

我也試着走另一條路,開始對所有的人,並尋找他們almae matres,in this form

SELECT * WHERE { 
    ?person dbpedia2:almaMater ?University 
    } 

但這是慢得多,這可能是因爲通過別人空間,搜索太費力。這確實有效,但它在應用程序中返回了一組不同的結果---即所有擁有列出母校的人,而不是所有被大學列爲校友的人。我更喜歡讓我成爲校友的語法。

我怎麼能說出這句話來返回大學所有的校友?

回答

3

DBpedia的SPARQL端點的性能有時可能有點不可靠。畢竟,這是公共服務,並不適用於龐大的查詢。儘管如此,我認爲你可以在沒有太多麻煩的情況下得到你想要的東西。首先,你可以在public SPARQL endpoint檢查有多少結果也有像這樣的查詢:

select (count(*) as ?nResults) where { 
?person dbpedia-owl:almaMater ?almaMater 
} 

SPARQL results (64928)

現在,如果你只是想大名單,你會得到它像這樣。該order by幫助組織,方便消費的結果,但在技術上沒有必要:

select ?almaMater ?person where { 
?person dbpedia-owl:almaMater ?almaMater 
} 
order by ?almaMater ?person 

SPARQL results

如果需要放置一些附加的限制上?almaMater,例如,以確保它是一所大學,然後您可以將它們添加到查詢中。例如:

select ?almaMater ?person where { 
?person dbpedia-owl:almaMater ?almaMater . 
?almaMater a dbpedia-owl:University . 
} 
order by ?almaMater ?person 

SPARQL results

+0

這很酷很有意義,但看起來有些事情可以成爲校友,而不是大學 - 比如高中或軍校; almaMater屬性需要一個educationalInstitution對象。對不起,我對SPARQL很陌生,但是如何在上面的表單中對此進行子集化,以便將其限制爲僅限有效的?大學對象? – Mittenchops

+0

我已經更新了我的答案,以顯示如何將'almaMater'限制爲具有'dbpedia-owl:University'類型的東西。 –

2

第一個查詢:

SELECT * WHERE { 
    ?University dbpedia2:alumni ?Person . 
} 

不僅僅是返回計數;它正在返回這兩個數字和個別校友。很明顯,dbpedia的數據質量很差,並且有大量的三元組錯用了dbpedia2:alumni關係。

您可以通過添加第二個條件需要一個實體滿足Person是合適類的成員篩選出數:

SELECT * WHERE { 
    ?university dbpedia2:alumni ?person . 
    ?person rdf:type <http://dbpedia.org/ontology/Person> 
} 

你看到的運行是什麼,有極少數的個人標記爲校友;令人驚訝的是,數據不足。

2

在您最後的查詢中,您幾乎就在那裏。但是,您當前要求可以取代?University變量的任何資源。由於只想大學拿的那個地方,你可以使用另一種三重進一步限制該變量:

SELECT * WHERE { 
    ?University a dbpedia-owl:University. 
    ?person dbpedia2:almaMater ?University. 
} 

這意味着?University只能是dbpedia-owl:University類的個體(其中dbpedia-owl被映射到http://dbpedia.org/ontology/)。