Java 通过分页写入Jena RDF模型

Java 通过分页写入Jena RDF模型,java,pagination,rdf,jena,outputstream,Java,Pagination,Rdf,Jena,Outputstream,我打算将SQL数据库中的数据转换为RDF转储。我定义了一个模型和一个本体 Model model = ModelFactory.createDefaultModel(); OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM, model); ontModel中定义了许多类。现在让我们假设我的SQL数据库中有10000条记录,我想将它们加载到模型中并将其写入文件。但是,我想在内存溢出的情况下分页

我打算将SQL数据库中的数据转换为RDF转储。我定义了一个模型和一个本体

Model model = ModelFactory.createDefaultModel();
OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM, model);
ontModel中定义了许多类。现在让我们假设我的SQL数据库中有10000条记录,我想将它们加载到模型中并将其写入文件。但是,我想在内存溢出的情况下分页

int fromIndex = 0;
int toIndex = 10;

while(true) {
     //1. get resources between fromIndex to toIndex from sql db
     // if no more resources 'break'
     //2. push these resources in model                   
     //3. write the model to a file
     RDFWriter writer = model.getWriter();
     File file = new File(file_path);
     FileWriter fileWriter = new FileWriter(file, true);
     writer.write(this.model, fileWriter, BASE_URL); 
     model.close();

     from = to+1;
     to = to+10;            

 }  
现在,如何将新资源附加到文件中的现有资源。因为目前我看到本体编写了两次,它抛出了一个异常

org.apache.jena.riot.RiotException:文档中的标记 根元素的后面必须是格式良好的

有没有办法解决这个问题

现在,如何将新资源附加到现有资源 在文件中。因为目前我看到本体正在编写中 两次,它抛出一个异常

模型是一组三元组。您可以向集合中添加更多的三元组,但这与“追加”并不完全相同,因为模型不包含重复的三元组,集合也没有指定的顺序,所以“追加”并不是一个正确的比喻

Jena可以处理相当大的模型,因此您可能首先看到是否可以创建模型并向其中添加所有内容,然后将模型写入文件。虽然谨慎是好的,但看看你是否能在不跳圈的情况下做你想做的也不是坏主意

如果内存模型有问题,您可以考虑使用TDB支持的模型,该模型将使用磁盘进行存储。您可以使用模型API或SPARQL查询对该模型进行增量更新,然后以某种序列化方式提取模型

如果您真的想附加到文件中,还有一个选项(这可能是最简单的)是使用RDF的非XML序列化,例如Turtle或N-Triples。这些是基于文本的(N-Triples是基于行的),因此将新内容附加到文件中不是问题。此方法在对的答复中进行了描述