2011-12-20 87 views
0

我需要读取CSV文件,然后使用jena和java填充本体。因为我需要在后面的代码来引用一些资源,我创建了资源的阵列,如下面的一个:在Jena中使用数组资源

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); 

上面的两个语句为同一文件记录

然后我读了另一个纪录,并ksingular_process[k]是从第一个不同,做同样的在上面创建triplesfor这个纪录并写下来等等。

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

其次的问题如何引用上述两个定义的资源在后面的代码合并他们,如果他们有一些共同的信息说,每个人都会有新的大进程中的一员,如何引用他们呢?

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

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

+1

我实在无法告诉你正在尝试做什么,这使得几乎不可能回答这个问题。我可以从像model.createResource(URI +“singular_process”+ i)这样的代码中得知,你还没有真正理解你的问题。请更新您的问题以显示您正在尝试解决**的实际**问题。例如:CSV中的一小行代码以及您期望从它们创建的RDF三元组。 – 2011-12-21 15:25:26

回答

0

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

然而,已经从CSV,TSV和表格数据做了一些数据转换自己,最近我会尽力为您提供一些指导,至少。

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

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

当这发生在我身上,而不是使用额外的数据结构,如资源[]你的问题,我用的是耶拿型号通过Jena的API或SPARQL查询阅读我所需要的信息。我不认为这是最佳做法,理想情况下,您希望独立处理每条生产线,但在需要时它可以很好地工作。我的耶拿模型是由TDB支持的,所以即使数据集不完全适合RAM(但它不像在独立时间处理一行那样快),这种模式也可以很好地工作。

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

使其无效的一种方法是首先付出一定的成本来对数据进行排序或对其进行初始传递。但这并不总是可能的。总结和回顾:避免使用额外的数据结构,将RDF数据写入Jena模型并使用它读取先前生成的数据。