Ho bisogno di eseguire una query su DBpedia:Carica DBpedia localmente usando Jena TDB?
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"))
}
Sto indovinando queste informazioni sono sparsi tra diverse discariche file (.NT) e in qualche modo l'endpoint SPARQL ci serve con un set di risultati. Ho bisogno di scaricare questi diversi file .nt localmente (non tutti i DBpedia), eseguire solo una volta la mia query e memorizzare i risultati localmente (non voglio usare l'endpoint SPARQL).
- Quali parti di Jena dovrei usare per questa corsa?
I m un po 'confuso lettura da this post:
Quindi, è possibile caricare tutti i dati DBpedia in un unico luogo TDB su disco (vale a dire una singola directory). In questo modo, puoi eseguire query SPARQL su di esso.
Come faccio a caricare il DBpedia in un unico luogo TDB, in termini Jena, se abbiamo ottenuto tre file DBpedia .NT? Come applichiamo la query precedente su quei file .nt? (Qualsiasi codice sarebbe d'aiuto.)
Esempio, è sbagliato?
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();
- Nel codice sopra è stato usato
"dataset.getDefaultModel"
(per ottenere il grafico predefinito come JenaModel
). Questa affermazione è valida? Abbiamo bisogno di creare un set di dati per eseguire la query o dobbiamo andare conTDBFactory.createModel(tdbdirectory)
?
E 'importante per voi che fate questo tutto all'interno di Java? È possibile utilizzare TDB ed eseguire query SPARQL utilizzando gli strumenti della riga di comando forniti da Jena, il tutto senza scrivere alcun codice Java. È un'opzione per te? –
Se, come ho chiesto nel commento precedente, l'utilizzo di TDB localmente senza scrivere alcun codice Java è un'opzione, dai un'occhiata alla seconda sezione di [questa risposta] (http://stackoverflow.com/a/16610663/1281433) , chiamato "Uso di TDB localmente". Se ciò sembra appropriato, possiamo usarlo come punto di partenza e quindi capire quali set di dati dovrebbero essere scaricati localmente. –
@GeorgePaptheodorou Hai finito per fare qualche progresso con questo? –