Stardog数据库创建,提供文件未找到异常

时间:2013-04-12 08:41:14

标签: java rdf stardog

我正在使用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

3 个答案:

答案 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");