我试图在一组三元组中转换数据库表中包含的数据,所以我正在使用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) {};
不幸的是,当我尝试对表的整个结果集(800.000记录)执行相同操作时,eclipse控制台向我显示异常:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
异常是由…提出的
m.write(out);
我完全确定模型是正确填充的,因为我试图在不创建owl文件的情况下执行程序,并且一切正常.
为了解决这个问题,我尝试增加堆内存设置-Xmx4096Minrun-> configuration-> vm参数,但仍然出现错误.
我正在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.
标签:java,jena,owl 来源: https://codeday.me/bug/20190527/1162865.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。