SPARQL更新isin';t为RDF数据与Jena JDBC和Jena RDFConnection协作
我在图形中有以下数据(命名为“data.n3”或“data.ttl”,我尝试了这两个扩展):-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
#默认图形
@前缀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" .