使用Jena中的资源数组

时间:2011-12-20 03:23:22

标签: java rdf jena ontology

我需要阅读CSV文件,然后使用jena和java填充本体。由于我需要稍后在代码中引用一些资源,因此我创建了以下资源的数组:

Resource [] singular_process= new Resource[1000];
singular_process[k] = model.createResource(URI + "singular_process"+i);

i是UUID

在读取文件时,k表示记录编号,假设我使用本体创建了三元组,例如:

Statement S1 = model.createStatement(singular_process[k],RDF.type,control);
model.add(S1);

我使用相同的singular_process[k]创建了更多三元组并编写了它的语句。 比如

Statement S2 = model.createStatement(singular_process[k],go:count,numbers);
model.add(S2);

以上两个相同文件记录的语句

然后我读了另一条记录,而k中的singular_process[k]与第一条记录不同,请按照上面的说法为此记录创建三元组并写入等等。

我的问题是,这种方法是否给出了正确的结果,因为我的n3文件结合了上述两种资源中的数据,而我无法理解这种情况如何发生!

第二个问题如何在代码中引用上面两个定义的资源来合并它们,好像它们有一些共同的信息,说每个都将成为新的大进程的成员,如何引用它们?

我是否还需要将语句作为数组?

任何其他可能给出正确答案的方法。

1 个答案:

答案 0 :(得分:0)

伊恩在评论中写道,你的问题并不完全清楚。

然而,我自己从CSV,TSV和表格数据进行了一些数据转换,最近我会尝试为您提供一些指导,至少。

当您将数据从CSV文件转换为RDF时,您通常会独立处理一行。对于每一行,您需要确定主题是什么,并从列名,值和/或某些映射/配置文件生成适当的属性URI。对于语句的对象/文字也是如此。

您很少需要前一行的值来处理当前行。但是,有时候就是这种情况。

当我遇到这种情况时,不是在您的问题中使用其他数据结构,例如Resource [],而是通过Jena API或SPARQL查询使用Jena模型来读取我需要的信息。我不认为这是一种最佳实践,理想情况下,您希望独立处理每一行,但是,在需要时它可以很好地工作。我的Jena模型由TDB支持,所以即使你的数据集不完全适合RAM,它也能很好地工作(但是,它不如单独处理一行时那么快)。

独立处理每一行也是编写数据转换的MapReduce实现的先决条件。如果可能的话,这是避免它的另一个好理由。

取消它的一种方法是首先支付一些费用来对数据进行排序或对其进行初始传递。但这并不总是可行的。

总结并回顾一下:避免使用其他数据结构,将您的RDF数据写入Jena模型并使用它来读取以前生成的数据。