SPARQL更新isin';t为RDF数据与Jena JDBC和Jena RDFConnection协作

SPARQL更新isin';t为RDF数据与Jena JDBC和Jena RDFConnection协作,sparql,rdf,jena,turtle-rdf,Sparql,Rdf,Jena,Turtle Rdf,我在图形中有以下数据(命名为“data.n3”或“data.ttl”,我尝试了这两个扩展):- #默认图形 @前缀dc:。 @前缀ns:。 ns:价格42。 我尝试了以下两个代码段:- 代码1 import org.apache.jena.query.Dataset; import org.apache.jena.query.DatasetFactory; import org.apache.jena.rdfconnection.RDFConnection; import org.apache

我在图形中有以下数据(命名为“data.n3”或“data.ttl”,我尝试了这两个扩展):-

#默认图形
@前缀dc:。
@前缀ns:。
ns:价格42。
我尝试了以下两个代码段:-

代码1

import org.apache.jena.query.Dataset;
import org.apache.jena.query.DatasetFactory;
import org.apache.jena.rdfconnection.RDFConnection;
import org.apache.jena.rdfconnection.RDFConnectionFactory;
import org.apache.jena.system.Txn;

public class DataWriting {
    public static void main(String[] args) {
        Dataset ds = DatasetFactory.create();
        try (RDFConnection conn = RDFConnectionFactory.connect(ds);) {
            conn.load("data.ttl") ;
            conn.update("PREFIX dc: <http://purl.org/dc/elements/1.1/>\r\n" + 
            "INSERT DATA\r\n" + 
            "{ \r\n" + 
            "  <http://example/book1> dc:title \"A new book\" ;\r\n" + 
            "                         dc:creator \"A.N.Other\" .\r\n" + 
            "}") ;
            conn.put("data.n3");
            conn.commit();
            }) ;
        }
    }
}
import org.apache.jena.query.Dataset;
导入org.apache.jena.query.DatasetFactory;
导入org.apache.jena.rdfconnection.rdfconnection;
导入org.apache.jena.rdfconnection.RDFConnectionFactory;
导入org.apache.jena.system.Txn;
公共类数据写入{
公共静态void main(字符串[]args){
Dataset ds=DatasetFactory.create();
try(rdfconnectionconn=RDFConnectionFactory.connect(ds);){
连接负载(“data.ttl”);
conn.update(“前缀dc:\r\n”+
“插入数据\r\n”+
“{\r\n”+
“dc:标题\“一本新书\”;\r\n”+
“dc:创建者\“A.N.Other\”\r\N“+
"}") ;
conn.put(“数据n3”);
conn.commit();
}) ;
}
}
}
代码2

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.jena.jdbc.mem.MemDriver;

public class DataWriting {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try {
            MemDriver.register();
            conn = DriverManager.getConnection("jdbc:jena:mem:dataset=data.ttl");
            stmt = conn.createStatement();
            stmt.executeUpdate("PREFIX dc: <http://purl.org/dc/elements/1.1/>\r\n" + 
                    "INSERT DATA\r\n" + 
                    "{ \r\n" + 
                    "  <http://example/book1> dc:title \"A new book\" ;\r\n" + 
                    "                         dc:creator \"A.N.Other\" .\r\n" + 
                    "}");
        } catch (SQLException e) {
            System.err.println("SQL Error - " + e.getMessage());
        } finally {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.SQLException;
导入java.sql.Statement;
导入org.apache.jena.jdbc.mem.MemDriver;
公共类数据写入{
公共静态void main(字符串[]args){
连接conn=null;
语句stmt=null;
试一试{
MemDriver.register();
conn=DriverManager.getConnection(“jdbc:jena:mem:dataset=data.ttl”);
stmt=conn.createStatement();
stmt.executeUpdate(“前缀dc:\r\n”+
“插入数据\r\n”+
“{\r\n”+
“dc:标题\“一本新书\”;\r\n”+
“dc:创建者\“A.N.Other\”\r\N“+
"}");
}捕获(SQLE异常){
System.err.println(“SQL错误-”+e.getMessage());
}最后{
试一试{
stmt.close();
}捕获(SQLE异常){
e、 printStackTrace();
}
}
}
}
预期文件“data.n3”或“data.ttl”中的数据将变为以下内容:-

# Default graph
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix ns: <http://example.org/ns#> .

<http://example/book1> ns:price 42 .
<http://example/book1> dc:title "A new book" .
<http://example/book1> dc:creator "A.N.Other" .
#默认图形
@前缀dc:。
@前缀ns:。
ns:价格42。
dc:书名“一本新书”。
dc:创造者“A.N.Other”。

但是,在执行上述两个Java程序中的任何一个之后,这实际上都不会发生。我是否遗漏了什么或做了什么不正确的事情?

您正在使用哪个triple store?triple store是否引发任何异常?我使用ttl/n3文件作为内存数据。我没有任何例外。我的猜测是,执行insert查询时,由于某种原因,数据没有保存回文件??不,不会向文件写入任何内容。它被加载到内存中,因此,您只更新内存中的数据—不多也不少。您需要将数据写回磁盘。最简单的方法应该是使用方法
ds.getDefaultModel()。write(…)
方法重载了
write
方法,只需使用以语言为参数的方法,或者使用
RDFDataMgr.write(OutputStream,Dataset,Lang)
第二个参数是给定的数据集或模型,第三个参数是
Lang.NTRIPLES
(或任何您需要的参数)
# Default graph
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix ns: <http://example.org/ns#> .

<http://example/book1> ns:price 42 .
<http://example/book1> dc:title "A new book" .
<http://example/book1> dc:creator "A.N.Other" .