Мне нужно выполнить запрос к DBpedia:Загружать DBpedia локально с помощью 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"))
}
Я предполагаю, что эта информация разбросана среди различных свалок (.nt) файлов и как-то конечная точка SPARQL служит нам с набором результатов. Мне нужно загрузить эти разные .nt файлы локально (не все DBpedia), выполнять только один раз мой запрос и сохранять результаты локально (я не хочу использовать конечную точку SPARQL).
- Какие части Йены следует использовать для этого запуска?
Я м немного перепутали чтение из this post:
Таким образом, вы можете загрузить все данные DBpedia в одном БРТ место на диске (т.е. один каталог). Таким образом, вы можете запускать SPARQL-запросы по нему.
Как загрузить DBpedia в одно БРТЕ место, с точки зрения Йены, если мы получили три .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"
(чтобы получить график по умолчанию, как JenaModel
). Является ли это утверждение действительным? Нужно ли создавать набор данных для выполнения запроса, или мы должны пойти сTDBFactory.createModel(tdbdirectory)
?
Важна ли вам, что вы делаете все это изнутри Java? Фактически вы можете использовать TDB и запускать запросы SPARQL с помощью инструментов командной строки, предоставленных Jena, без написания кода Java. Это вариант для вас? –
Если, как я уже говорил в предыдущем комментарии, использование TDB локально без написания кода Java является опцией, посмотрите второй раздел [этого ответа] (http://stackoverflow.com/a/16610663/1281433) , называемый «Использование TDB локально». Если это выглядит подходящим, мы можем использовать это как отправную точку, а затем выяснить, какие наборы данных необходимо будет загружать локально. –
@GeorgePaptheodorou Вы закончили с этим прогресс? –