【问题标题】:Can't write large owl file with Jena无法用 Jena 编写大型 owl 文件
【发布时间】:2017-12-08 17:06:13
【问题描述】:

我正在尝试将数据库表中包含的数据转换为一组三元组,因此我正在使用 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 文件的情况下执行程序并且一切正常。 为了修复它,我尝试增加堆内存设置-Xmx4096Minrun->configuration->vm arguments,但错误仍然出现。

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

【问题讨论】:

  • 把它写成 N-Triples 不起作用?模型有多大,即m.size()的输出是多少?
  • 模型尺寸为 4827075。您对 N-Triples 的任何建议都有效!
  • 如果没问题,你应该更喜欢N-Triples 作为序列化格式。如果不指定语言,输出将是RDF/XML 格式,而 XML 确实需要更多的内存来构建 XML 树。

标签: java jena owl


【解决方案1】:

默认格式是 RDF/XML 是一种漂亮的形式,但是要计算“漂亮”,在开始编写之前需要做很多工作。这包括建立内部数据结构。某些形状的数据会导致需要进行大量工作来搜索“最漂亮”的变化。

漂亮格式的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多