有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Jena中使用资源数组

我需要读取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);

以上两条语句为同一文件记录

然后我读取另一条记录,并且singular_process[k]中的k与第一条不同,执行与上面相同的操作,为该记录创建三元组并写入它们,依此类推

我的问题是,这种方法给出了正确的结果,因为我的n3文件结合了来自上述两种资源的数据,这是我无法理解的

第二个问题是,如何在以后的代码中引用上述两个定义的资源来合并它们,就好像它们有一些共同的信息,表示每个资源都将是新的大流程的成员一样,如何引用它们

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

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


共 (1) 个答案

  1. # 1 楼答案

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

    不过,我自己已经从CSV、TSV和表格数据中进行了一些数据转换,最近我将尝试至少为您提供一些指导

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

    很少需要前几行中的值来处理当前行。然而,有时情况就是这样

    当这种情况发生在我身上时,我没有使用额外的数据结构,比如你问题中的Resource[],而是通过Jena API或SPARQL查询使用Jena模型来读取我需要的信息。我不认为这是一个最佳实践,理想的是,你想独立处理每一行,但是,当需要时,它工作得很好。我的Jena模型由TDB备份,因此即使数据集不完全适合RAM,它也能很好地工作(但是,它的速度不如单独一次处理一行数据)

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

    使其无效的一种方法是,首先支付一些费用,对数据进行排序或进行初始传递。但这并不总是可能的

    总结和重述:避免使用额外的数据结构,将RDF数据写入Jena模型,并使用该模型读取以前生成的数据