我正在使用Jena和Java,正在阅读CSV文件。对于文件的每一行,都有一个主题资源。相邻行上的两个主题资源可能共享行中字段的相同值(例如:两行具有相同的进程ID)。在这种情况下,我需要组合两个主题资源,因为每个资源代表生产中的子流程(例如)。
我的问题是:如何动态引用这两个资源,以便我可以将它们组合起来?我发现当我发现它们共享相同的属性以将它们存储在数组资源主题中时。这是正确的做法吗?
答案 0 :(得分:0)
如果你能展示一些样本数据,这个问题会更容易回答。事实上,我认为你关注的是错误的问题。如果您可以清楚地确定意味着什么在您的CSV中有两行具有相同的过程,然后您决定如何在RDF模型中编码该含义,那么问题是如何编写代码 - 作为数组或其他什么 - 将更清晰。
例如(我将在这里编写一些数据 - 正如我所说,如果你展示一个实际的例子会更容易),假设你的CSV包含:
processId,startTime,endTime
123,15:22:00,15:23:00
123,16:22:00,16:25:00
因此,进程123
显然有两个开始和结束时间对。如果你在RDF中天真地建模,你最终会得到一个令人困惑的模型:
process:process123
a :Process;
process:start "15:22:00"^^xsd:time;
process:end "15:23:00"^^xsd:time;
process:start "16:22:00"^^xsd:time;
process:end "16:25:00"^^xsd:time;
.
这表明一个进程有两个开始时间(和两个结束时间),看起来没有意义。但是,实际上,您可能只有一个具有多个剧集的流程,建议一种方式对其进行建模,或者在不同时间发生的周期性流程,或者如您所建议的那样,是父流程的子流程。或完全不同的东西(我只猜测,我不知道你的域名)。一旦明确了数据的含义,就可以生成合适的RDF模型。例如,一个情节过程可能是:
process:process123
a :Process;
process:episode [
a process:Episode;
process:start "15:22:00"^^xsd:time;
process:end "15:23:00"^^xsd:time;
];
process:episode [
a process:Episode;
process:start "16:22:00"^^xsd:time;
process:end "16:25:00"^^xsd:time;
]
.
一旦你的脑海中清晰的建模,我认为你可以看到如何从Java代码生成欲望RDF三倍的问题 - 以及你是否需要一个数组 - 更加清晰。同样重要的是,您可以考虑使用JUnit测试来测试您的代码是否正常运行。