不能用Jena写大型owl文件

时间:2017-12-08 17:06:14

标签: java jena owl

我正在尝试将数据库表中包含的数据转换为一组三元组,因此我正在使用Jena java库编写一个owl文件。 我已成功完成了少量的表记录(100),对应于.owl文件中的近20,000行。我很满意。

要编写owl文件,我使用了以下代码(mOntModel对象):

 BufferedWriter out = null;
 try {
    out = new BufferedWriter (new FileWriter(FILENAME));        
    m.write(out);
    out.close();
 }catch(IOException e) {};

不幸的是,当我尝试对表的整个结果集(800.000记录)执行相同操作时,eclipse控制台向我显示异常:

Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded

引发了异常
m.write(out);

我绝对确定模型已正确填充,因为我试图在不创建owl文件的情况下执行程序,并且一切正常。 为了解决这个问题,我尝试在-Xmx4096M中增加堆内存设置run->configuration->vm arguments,但错误仍然存​​在。

我正在macbook上执行应用程序,所以我没有无限的内存。有机会完成任务吗?也许有更有效的方式存储模型?

1 个答案:

答案 0 :(得分:6)

默认格式是RDF / XML是一种非常好的形式,但要计算"漂亮",在开始编写之前需要做很多工作。这包括建立内部datstructures。一些形状的数据导致相当广泛的工作要做,以寻找最美丽的"变异。

漂亮格式的RDF / XML是最昂贵的格式。即使是漂亮的海龟形式也更便宜,但它仍然涉及一些准备计算。

以更简单的格式编写RDF / XML,没有复杂的漂亮功能:

RDFDataMgr.write(System.out, m, RDFFormat.RDFXML_PLAIN);

输出流是首选,输出将是UTF-8 - " new BufferedWriter (new FileWriter(FILENAME));"将使用平台默认字符集。

有关其他格式和变体,请参阅文档:

https://jena.apache.org/documentation/io/rdf-output.html

,例如RDFFormat.TURTLE_BLOCKS