1

我有一个本地版本的 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)
4

3 回答 3

3

您不需要任何 java 代码来执行此操作(tdbloader2更快):

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

将加载到 n-triple 文件中。您可以使用以下方式查询它:

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

有关 tdb 命令行工具的更多信息,请点击此处

于 2011-04-11T15:08:58.753 回答
3

Model从 Java读取 TDB 支持很简单,有关详细信息,请参阅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 ...

正如 user205512 所提到的,您可以tdbloader2在 Linux 或 Mac 上从命令行使用,这在大型 RDF 文件上会更快。一旦创建了 TDB 索引,您就可以将文件复制到其他机器。因此,您可以在 Linux 服务器上加载数据,然后将tdb目录中的所有文件发送到您的 Windows 机器以继续开发。

要从tdbloaderWindows 机器上的命令行运行,您需要cygwin之类的东西来允许您运行 Unix 风格的脚本。您还需要设置环境变量TDBROOT

于 2011-04-11T22:54:56.303 回答
0

假设“nt 格式”确实是“N-Triple”,那么 JenaModel.read(is, base, lang)方法将加载 N-Triple 格式,如果lang"N-Triple".

有关详细信息,请参阅Jena 教程文档

于 2011-04-11T15:00:08.100 回答