[英]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.