如何使用Jena插入/更新RDF文件?

时间:2011-10-03 04:57:16

标签: rdf sparql jena

我想在我的RDF文件中插入一个节点。我知道有SPARQL插入/更新语法,但如何使用Jena执行此操作。一个例子将非常有用。

3 个答案:

答案 0 :(得分:3)

您确定需要使用SPARQL更新吗?在Jena中,节点(资源或文字)本身不在Model中,而仅仅是因为它是模型中三元组(即Statement)的一部分。如果代码中有Model个对象,请使用addStatement的众多变体之一将给定的资源或文字添加到图表中。

附录

在你的评论澄清你要添加到磁盘上的文件之后,你可以像RobV所说的那样修改并修改内存中的Model,然后再将其写出来。这确实是正确的做法。但是,您可能会发现有一种快速而肮脏的解决方法。如果您的文件是TurtleN-Triples格式,则可以将其附加到文件的末尾(显然,您无法使用XML格式)。所以有些东西:

File f = new File( "where.your.file.is" );
FileOutputStream out = new FileOutputStream( f, true );
out.write( ":john :loves :jane.\n" );
out.close();

会奏效。这并不是真的值得推荐,因为你冒着(a)没有正确名称空间前缀的风险,(b)引入语法错误(因为你没有使用Jena编写器),以及(c)创建重复的三元组,但是在紧张的情况下,它有时是一个有用的技巧。显然,您只能使用此技术添加信息,而不是更新或删除现有的三元组。

从正在进行的日志记录或监控应用程序中收集大量数据时,直接附加到N-triples文件的末尾是一种有效且有用的技术。

答案 1 :(得分:1)

试试这个

   Model m = ModelFactory.createDefaultModel();
        m.read("/Users/heshanjayasinghe/Documents/A-enigmaProject/jena_Enigma/src/jena_enigma/Enigma.RDF", "RDF/XML");
        String NS="http://www.heshjayasinghe.webatu.com/Enigma.RDF#";

        Resource r = m.createResource(NS+"user8");//like subject
        Property p1 =m.createProperty(NS+"lname");
        Property p2 =m.createProperty(NS+"email");
        Property p3 =m.createProperty(NS+"fname");
        Property p4 =m.createProperty(NS+"password");


        r.addProperty(p1, "thathasara", XSDDatatype.XSDstring);
        r.addProperty(p2, "nt@gmail.com", XSDDatatype.XSDstring);
        r.addProperty(p3, "nipun", XSDDatatype.XSDstring);
        r.addProperty(p4, "t123", XSDDatatype.XSDstring);
      //   m.write(System.out,"thurtle");
          m.write(new FileOutputStream("/Users/heshanjayasinghe/Documents/A-enigmaProject/jena_Enigma/src/jena_enigma/Enigma.RDF"), "RDF/XML");

答案 2 :(得分:0)

使用ARQ(Jena的SPARQL处理器库)UpdateFactory创建更新,然后使用UpdateExecutionFactory创建可以评估更新的UpdateProcessor

它比这更复杂,因为您还需要一个数据集来评估更新。老实说,我不知道从单个模型创建数据集是多么容易,但无法想象它是那么困难