Как использовать Jena TDB для хранения локальной версии базы данных связанных фильмов
У меня есть локальная версия LinkedMDB в формате N-Triples, и я хочу запросить ее. Теперь я хочу использовать Jena TDB, который может хранить данные, которые могут быть использованы для запроса позже. Я проверил документацию по TDB Java API, но не смог загрузить файл N-Triples и затем выполнить запрос с помощью SPARQL. Я использовал следующий код:
String directory = "E:\\Applications\\tdb-0.8.9\\TDB-0.8.9\\bin\\tdb";
Dataset dataset = TDBFactory.createDataset(directory);
// assume we want the default model, or we could get a named model here
Model tdb = dataset.getDefaultModel();
// read the input file - only needs to be done once
String source = "E:\\Applications\\linkedmdb-18-05-2009-dump.nt";
FileManager.get().readModel( tdb, source, "N-TRIPLES" );
и получил следующее исключение
Exception in thread "main" com.hp.hpl.jena.tdb.base.file.FileException: Not a directory: E:\Applications\tdb-0.8.9\TDB-0.8.9\bin\tdb
at com.hp.hpl.jena.tdb.base.file.Location.<init>(Location.java:83)
at com.hp.hpl.jena.tdb.TDBFactory.createDataset(TDBFactory.java:79)
at tutorial.Temp.main(Temp.java:14)
3 ответа
Чтение в TDB-поддержку Model
с Java это просто, см. вики TDB для деталей. Например, вы могли бы:
// open TDB dataset
String directory = "./tdb";
Dataset dataset = TDBFactory.createDataset(directory);
// assume we want the default model, or we could get a named model here
Model tdb = dataset.getDefaultModel();
// read the input file - only needs to be done once
String source = "path/to/input.nt";
FileManager.get().readModel( tdb, source, "N-TRIPLES" );
// run a query
String q = "select * where {?s ?p ?o} limit 10";
Query query = QueryFactory.create(q);
QueryExecution qexec = QueryExecutionFactory.create(query, tdb);
ResultSet results = qexec.execSelect();
... etc ...
Как упоминалось user205512, вы можете использовать tdbloader2
из командной строки на Linux или Mac, который будет быстрее на больших RDF-файлах. После создания индексов TDB вы можете скопировать файлы на другие машины. Таким образом, вы можете загрузить данные на сервер Linux, а затем отправить все файлы внутри tdb
каталог на ваш компьютер Windows для продолжения разработки.
Бежать tdbloader
из командной строки на вашем компьютере с Windows вам понадобится что-то вроде cygwin, чтобы позволить вам запускать сценарии в стиле Unix. Вам также необходимо установить переменную среды TDBROOT
,
Вам не нужен Java-код для этого (tdbloader2
быстрее):
bin/tdbloader2 --loc /path/to/tdb/store imdb.nt
загрузит в n-тройной файл. Вы можете запросить его, используя:
bin/tdbquery --loc /path/to/tdb/store "select ...."
Больше информации об инструментах командной строки tdb здесь
Предполагая, что "формат NT" действительно "N-Triple", то Йена Model.read(is, base, lang)
метод загрузит формат N-Triple, если lang
является "N-Triple"
,
Для получения дополнительной информации обратитесь к учебному документу Jena.