Ich brauche eine Abfrage DBpedia auszuführen:DBpedia lokal laden mit 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"))
}
Ich vermute, diese Informationen auf verschiedene Deponien gestreut wird (.nt) Dateien und irgendwie die SPARQL-Endpunkt dient uns mit einer Ergebnismenge. Ich muss diese verschiedenen .nt-Dateien lokal herunterladen (nicht alle DBpedia), nur einmal meine Abfrage durchführen und die Ergebnisse lokal speichern (ich möchte den SPARQL-Endpunkt nicht verwenden).
- Welche Teile von Jena sollte ich für diesen einen Lauf verwenden?
Ich bin ein wenig verwirrt Lesen von this post:
So, können Sie die gesamte DBPedia Daten in einer einzigen TDB Stelle auf der Festplatte geladen werden kann (das heißt ein einzelnes Verzeichnis). Auf diese Weise können Sie SPARQL-Abfragen ausführen.
Wie lade ich die DBpedia in einem einzigen TDB Standort in Jena Begriffe, wenn wir drei .nt DBpedia Dateien erhalten? Wie wenden wir die obige Abfrage auf diese .nt-Dateien an? (Jeder Code würde helfen.)
Beispiel, ist das falsch?
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();
- In dem obigen Code, den wir
"dataset.getDefaultModel"
verwendet (Standard Graph als JenaModel
zu bekommen). Ist diese Aussage gültig? Müssen wir ein Dataset erstellen, um die Abfrage auszuführen, oder sollten wir mitTDBFactory.createModel(tdbdirectory)
gehen?
Ist es Ihnen wichtig, dass Sie dies tun, alle aus Java? Sie können TDB verwenden und SPARQL-Abfragen mit den von Jena bereitgestellten Befehlszeilentools ausführen, ohne Java-Code zu schreiben. Ist das eine Option für dich? –
Wenn, wie ich im vorherigen Kommentar gefragt habe, die Verwendung von TDB lokal ohne das Schreiben von Java-Code eine Option ist, werfen Sie einen Blick auf den zweiten Abschnitt von [diese Antwort] (http://stackoverflow.com/a/16610663/1281433) "TDB lokal verwendet". Wenn dies geeignet erscheint, können wir dies als Ausgangspunkt verwenden und dann herausfinden, welche Datasets lokal heruntergeladen werden müssen. –
@GeorgePaptheodorou Hast du damit irgendwelche Fortschritte gemacht? –