繁体   English   中英

通过分页写入Jena RDF模型

[英]Write to Jena RDF model through pagination

我打算将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是基于行的),因此将新内容附加到文件中不是问题。 向现有RDF本体添加更多个人的答案中描述了这种方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM