我正在使用java在stardog中创建一个新数据库。
当我创建数据库并在localhost中导入RDF文件时,它正在工作。
但是当我在远程服务器上创建数据库时,我收到同一个RDF文件的文件未找到异常。
请查看我的代码
System.out.println("start updating db");
String myDBName = "myDB" ;
StardogDBMS dbms =
//StardogDBMS.toServer("snarl://localhost:5820/")
StardogDBMS.toServer("snarl://myRemoteServer:5820/")
.credentials("admin", "admin".toCharArray()).login();
File file = new File("src\\main\\webapp\\test.rdf"))
System.out.println("creating " + myDBName +" and loading the rdf file" );
dbms.disk(myDBName).create(file));
dbms.logout();
System.out.println("created " + myDBName +" and loaded the rdf file" );
请帮忙。是否有任何转变,例如将流传递到数据库以导入RDF文件。这是我得到的例外。
start updating db
creating myDB and loading the rdf file
File: xxx\xxxx\test.RDF Message: java.io.FileNotFoundException: xxx\xxxx\test.RDF (No such file or directory)
created myDB and loaded the rdf file
答案 0 :(得分:2)
错误消息表明磁盘数据库的批量加载程序找不到指定的文件。使用SNARL协议时,文件不会从客户端传输到服务器以进行批量加载,这可能是错误的来源。
如果服务器兼有客户端在同一台机器上运行,当服务器读取它时,相对路径可能不正确,该路径与STARDOG_HOME相关,在这种情况下可能不正确。因此,如果它们都在同一台机器上,请使用绝对路径,它应该可以工作。如果它们位于不同的计算机上,则使用服务器从计算机上的CLI进行批量加载。
如果要使用HTTP,文件将被传输,但由于将文件发送到服务器的网络开销,您将获得较差的批量加载性能。同样,最好通过服务器在机器上进行批量加载。
答案 1 :(得分:1)
在不知道dbms.disk(myDBName).create(file));
做什么的情况下很难说,但是你确定它没有尝试读取本地但不存在于远程服务器上的文件src\\main\\webapp\\test.rdf
吗?
答案 2 :(得分:1)
我猜迈克尔回答的是异常的原因。 我找到了解决这个问题的方法。
而不是创建数据库和批量加载RDF / OWL文件。创建与stardog DB的连接。并通过连接导入RDF文件。
示例代码如下所示
System.out.println("start updating db");
String myDBName = "myDB" ;
StardogDBMS dbms =
//StardogDBMS.toServer("snarl://localhost:5820/")
StardogDBMS.toServer("snarl://myRemoteServer:5820/")
.credentials("admin", "admin".toCharArray()).login();
File file = new File("src\\main\\webapp\\test.rdf"))
System.out.println("creating " + myDBName);
dbms.disk(myDBName).create());
dbms.logout();
aConn = ConnectionConfiguration.to(myDBName) // the name of the db to connect to
.credentials("admin", "admin") // the credentials with which to connect
.url("snarl://myRemoteServer:5820/")
.connect(); // now open the connection
System.out.println("importing files to "+myDBName);
aConn.begin();
aConn.add().io().format(RDFFormat.RDFXML).stream(file);
aConn.commit();
System.out.println("files imported to "+myDBName);
System.out.println("DB Updated");