virtuoso-opensource:使用 jenaprovider,如何从文件而不是 URL 中读取数据?

virtuoso-opensource: using jenaprovider, how to read data from file instead of from URL?

使用 virtuosojena provider 从 URL 加载数据非常简单。以下代码完成这项工作:

    VirtGraph graph = new VirtGraph ("foaf", "jdbc:virtuoso://localhost:1111", "dba", "dba");

/*      Load data to Virtuoso       */

    System.out.print ("Begin read from 'http://xmlns.com/foaf/0.1/index.rdf'  ");
    graph.read("http://xmlns.com/foaf/0.1/index.rdf", "RDF/XML");

然而,当你想从本地文件加载它们时,情况就不同了。我试过这个:

    VirtGraph graph = new VirtGraph ("foaf", "jdbc:virtuoso://localhost:1111", "dba", "dba");

    graph.read("/tmp/index.rdf", "RDF/XML");
    graph.close();

但我最终遇到以下异常:

com.hp.hpl.jena.shared.JenaException: virtuoso.jdbc4.VirtuosoException: HC001: Connection Error in HTTP Client

有人知道如何使用 jenaprovider 从文件加载 rdf 吗?

配置设置 virt_jena2.jar virtjdbc4.jar

不要只提供文件名,而是使用 file URI。例如:

graph.read("file:///tmp/index.rdf", "RDF/XML");

关于你的第一个例子:

VirtGraph graph = new VirtGraph ("foaf", "jdbc:virtuoso://localhost:1111", "dba", "dba");
graph.read("http://xmlns.com/foaf/0.1/index.rdf", "RDF/XML");

它被转换为下一个 SPARQL 命令(在服务器端执行 - Sources):

load "http://xmlns.com/foaf/0.1/index.rdf" into graph <foaf>

并且此命令不允许将您的本地文件加载到 DBMS。 您可以使用 Jena 模型方法来加载本地文件。喜欢下一个 (Jena Model reference):

  Model model = VirtModel.openDatabaseModel("load:test", "jdbc:virtuoso://localhost:1111", "dba", "dba");
  InputStream in = FileManager.get().open( nfile );
  if (in == null) {
      throw new IllegalArgumentException( "File: " + nfile + " not found");
  }
  model.read(new InputStreamReader(in), null, "N-TRIPLE");
  model.close();