Java 通过分页写入Jena RDF模型
我打算将SQL数据库中的数据转换为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条记录,我想将它们加载到模型中并将其写入文件。但是,我想在内存溢出的情况下分页
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是基于行的),因此将新内容附加到文件中不是问题。此方法在对的答复中进行了描述