我创建了一个简单的本体,如下所示有4个类,1个objectTypeProperty和2个DatatypeProperties。现在我想创建相同本体的不同个体。按个人而言,我的意思是下表中显示的一行数据 。我试图直接将这些人插入到Jena的本体中。
直到现在,我已经阅读了耶拿的本体论,但我应该如何插入所有这些人。我是否需要使用任何类型的循环,或者Jena中有特定条款来插入重复信息。
注意:我在http://answers.semanticweb.com/questions/31641/use-an-ontology-to-store-csv-data-into-rdf-form之前提出过类似的问题。我得到了答案,但我想知道不使用对齐ApI,我可以纯粹使用Jena。
注意:似乎answers.semanticweb.com目前已关闭。
答案 0 :(得分:3)
使用SPARQL插入多个三元组可能最简单。它基本上是
prefix : <...>
insert data {
:individual1 :place :p1 ; :date "110114" ; temperature 13 .
:individual2 :place :p2 ; :date "120114" ; temperature 14 .
:individual3 :place :p3 ; :date "130114" ; temperature 15 .
}
如果您已经知道需要插入的数据,这很方便。如果您不这样做,或者您正在从其他文件中读取它,则可能更容易通过代码构建它。
答案 1 :(得分:2)
由于我无法发表评论,我会在这里发表评论......
Haroon,关于answer.semanticweb.com上的问题,我刚跟着Alignment API,因为你说你需要找到CSV列和概念之间的映射。只使用Jena,你不能这样做,因为据我所知,Jena并没有给你任何方法或任何形式的对齐或语义注释支持。事实上,你可以在没有Alignment API的情况下,通过使用其他库,如第二个字符串(我的一个评论),或任何其他允许你运行字符串比较(或结构或语义......)。
如果你不需要在运行时计算对齐,我的意思是,如果你手动设置它,你可以使用Jena来创建个体。除了在第一个答案中指出使用SPARQL之外,您还可以将本体加载到Jena模型中并使用Jena方法创建个体。如果你获得了一个OntClass,那么有一种方法可以创造出个人化的方法。这允许您创建该类型的个人。
如果你的本体太大,你可以获得它的一部分,或者只是创建你需要的资源,然后将它附加到你的模型中。您可以使用Jena方法执行此操作,或者通过代码创建SPARQL更新,如Joshua Taylor所说。
如果您在另一个答案中使用代码示例并排除Alignment API部分,那么您就拥有了这个Jena实现(官方文档也很容易理解)。只需将映射保留在某个存储(文件,数据库等)中,然后使用它将列映射到概念。
在Jena模型中创建个体后,它们将成为本体的一部分,但仅限于内存中的版本,因此,您需要将其保存回原来的位置:某个文件或SPARQL端点使用SPARQL Update支持。
希望这可以启发你的解决方案!