我试图在一组三元组中转换数据库表中包含的数据,所以我正在使用Jena java库编写一个owl文件.我已成功完成了少量的表记录(100),对应于.owl文件中的近20,000行,我很满意.
要编写owl文件,我使用了以下代码(m是一个OntModel对象):
BufferedWriter out = null;
try {
out = new BufferedWriter (new FileWriter(FILENAME));
m.write(out);
out.close();
}catch(IOException e) {};
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我尝试对表的整个结果集(800.000记录)执行相同操作时,eclipse控制台向我显示异常:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
Run Code Online (Sandbox Code Playgroud)
异常是由...提出的
m.write(out);
Run Code Online (Sandbox Code Playgroud)
我完全确定模型是正确填充的,因为我试图在不创建owl文件的情况下执行程序,并且一切正常.为了解决这个问题,我尝试增加堆内存设置-Xmx4096M,run->configuration->vm arguments但错误仍然存在.
我正在macbook上执行应用程序,所以我没有无限的内存.有机会完成任务吗?也许有更有效的方式来存储模型?
默认格式是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.