0

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

3 回答 3

2

该错误消息表明磁盘数据库的批量加载程序找不到指定的文件。使用 SNARL 协议时,文件不会从客户端传输到服务器进行批量加载,这可能是错误的根源。

如果服务器和客户端都在同一台机器上运行,则服务器读取时您的相对路径可能不正确,该路径将相对于 STARDOG_HOME,并且在这种情况下可能不正确。因此,如果它们都在同一台机器上,请使用绝对路径,它应该可以工作。如果它们位于不同的机器上,请从 CLI 批量加载到带有服务器的机器上。

如果您想使用 HTTP,将传输文件,但由于将文件发送到服务器的网络开销,您将获得较差的批量加载性能。同样,您最好使用服务器在机器上进行批量加载。

于 2013-04-13T13:26:49.227 回答
1

我猜迈克尔回答的是异常的原因。我找到了解决这个问题的方法。

而不是创建数据库和批量加载 RDF/OWL 文件。创建与 stardog 数据库的连接。并通过连接导入 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");
于 2013-04-15T09:45:35.033 回答
1

不知道dbms.disk(myDBName).create(file));在做什么很难说,但是您确定它不是在尝试读取src\\main\\webapp\\test.rdf本地存在但不在远程服务器上的文件吗?

于 2013-04-12T12:22:57.337 回答