Как использовать Jena TDB для хранения локальной версии базы данных связанных фильмов - PullRequest
1 голос
/ 11 апреля 2011

У меня есть локальная версия 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 ]

2 голосов
/ 11 апреля 2011

Вам не нужен код Java для этого (tdbloader2 быстрее):

bin/tdbloader2 --loc /path/to/tdb/store imdb.nt

загрузится в n-тройной файл. Вы можете запросить его, используя:

bin/tdbquery --loc /path/to/tdb/store "select ...."

Больше информации об инструментах командной строки tdb здесь .

2 голосов
/ 12 апреля 2011

Чтение в Model при поддержке TDB из Java является простым, см. TDB wiki для подробностей. Например, вы могли бы:

// 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 ...

Как упоминалось пользователем 205512, вы можете использовать tdbloader2 из командной строки на Linux или Mac, что будет быстрее для больших файлов RDF. После создания индексов TDB вы можете скопировать файлы на другие машины. Таким образом, вы можете загрузить данные на сервер Linux, а затем отправить все файлы из каталога tdb на свой компьютер Windows, чтобы продолжить разработку.

Для запуска tdbloader из командной строки на вашем компьютере с Windows вам потребуется что-то вроде cygwin , чтобы позволить вам запускать сценарии в стиле Unix. Вам также необходимо установить переменную окружения TDBROOT.

0 голосов
/ 11 апреля 2011

Если предположить, что «формат nt» действительно «N-Triple», то метод Jena Model.read(is, base, lang) загрузит формат N-Triple, если lang равен "N-Triple".

Подробнее см. В учебном документе Jena .

...