Как использовать 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.

Другие вопросы по тегам