我需要對DBpedia中進行查詢:使用Jena TDB在本地加載DBpedia?
SELECT DISTINCT ?poi ?lat ?long ?photos ?template ?type ?label WHERE {
?poi <http://www.w3.org/2000/01/rdf-schema#label> ?label .
?poi <http://www.w3.org/2003/01/geo/wgs84_pos#lat> ?lat .
?poi <http://www.w3.org/2003/01/geo/wgs84_pos#long> ?long .
?poi <http://dbpedia.org/property/hasPhotoCollection> ?photos .
OPTIONAL {?poi <http://dbpedia.org/property/wikiPageUsesTemplate> ?template } .
OPTIONAL {?poi <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?type } .
FILTER (?lat > x && ?lat < y &&
?long > z && ?long < ω &&
langMatches(lang(?label), "EN"))
}
我猜這些信息分散在不同的轉儲(.NT)文件中,不知怎麼的SPARQL端點提供我們一個結果集。我需要在本地下載這些不同的.nt文件(不是所有的DBpedia),只執行一次查詢並在本地存儲結果(我不想使用SPARQL端點)。
- Jena的哪些部分應該用於這一次運行?
我米有點混亂從this post讀取:
所以,可以在整個DBpedia中的數據加載到磁盤上的一個單一位置TDB(即,單一的目錄)。這樣,您可以通過它運行SPARQL查詢。
如何將DBpedia中加載到一個單一的TDB的位置,在耶拿而言,如果我們有三個.NT DBpedia的文件?我們如何在這些.nt文件上應用上述查詢? (任何代碼都會有幫助。)
例如,這是錯誤的嗎?
String tdbDirectory = "C:\\TDB";
String dbdump1 = "C:\\Users\\dump1_en.nt";
String dbdump2 = "C:\\Users\\dump2_en.nt";
String dbdump3 = "C:\\Users\\dump3_en.nt";
Dataset dataset = TDBFactory.createDataset(tdbDirectory);
Model tdb = dataset.getDefaultModel(); //<-- What is the default model?Should I care?
//Model tdb = TDBFactory.createModel(tdbdirectory) ;//<--is this prefered?
FileManager.get().readModel(tdb, dbdump1, "N-TRIPLES");
FileManager.get().readModel(tdb, dbdump2, "N-TRIPLES");
FileManager.get().readModel(tdb, dbdump3, "N-TRIPLES");
String q = "my big fat query";
Query query = QueryFactory.create(q);
QueryExecution qexec = QueryExecutionFactory.create(query, tdb);
ResultSet results = qexec.execSelect();
while (results.hasNext()) {
//do something significant with it
}
qexec.close()
tdb.close() ;
dataset.close();
- 在我們使用
"dataset.getDefaultModel"
上面的代碼(獲取默認的圖形作爲耶拿Model
)。這個陳述是否有效?我們是否需要創建一個數據集來執行查詢,或者我們是否應該使用TDBFactory.createModel(tdbdirectory)
?
是不是對你很重要,你做這一切從Java內部?實際上,您可以使用TDB並使用Jena提供的命令行工具運行SPARQL查詢,而無需編寫任何Java代碼。這對你來說是一種選擇嗎? –
如前所述,如果在本地使用TDB而不編寫任何Java代碼是一種選擇,請參閱[本答案]的第二部分(http://stackoverflow.com/a/16610663/1281433) ,稱爲「在本地使用TDB」。如果看起來合適,我們可以用它作爲起點,然後確定哪些數據集需要在本地下載。 –
@GeorgePaptheodorou你最終在這方面取得了哪些進展? –