我们可以在单个TDB目录中创建多个数据集

时间:2018-04-06 10:18:48

标签: jena tdb

String directory = "directoryPath"; 
Dataset dataset = TDBFactory.createDataset(directory);
Dataset datasetnew = TDBFactory.createDataset(directory);

数据集是对TDB目录的引用还是类似于TDB目录中的文件夹? datasetnew会再次创建对Directory的引用,还是会创建单独的datset文件夹? 基本上,我有一个用例,即每个用户创建一个数据集,用户可以保存所有模型,不会干扰其他用户的模型。

如果不是这样的话,有人可以建议我一个方法!

1 个答案:

答案 0 :(得分:3)

指定同一目录时,不会创建新目录。实际上,datasetdatsetnew都指向同一个物理RDF存储。即如果您尝试在两者上创建交易,您将获得Currently in an active transaction org.apache.jena.dboe.transaction.txn.TransactionException。所以不,你不能在一个TDB目录中创建多个数据集。

另一个观察结果是你似乎在使用TDB1而不是TDB2。 TDB2是更高版本,因此它是最好的。然后您的代码将如下所示:

  Path path = Paths.get(".").toAbsolutePath().normalize();      
  String dbDir = path.toFile().getAbsolutePath() + "/db/"; 

  Location location = Location.create(dbDir);

  Dataset dataset = TDB2Factory.connectDataset(location);
  String strQuery = "INSERT DATA {<http://dbpedia.org/resource/Grace_Hopper> <http://xmlns.com/foaf/0.1/surname> \"Hopper\" .}";

  dataset.begin(ReadWrite.WRITE);
  UpdateRequest updateRequest = UpdateFactory.create(strQuery);
  UpdateProcessor updateProcessor = UpdateExecutionFactory.create(updateRequest, dataset);

  updateProcessor.execute();
  dataset.commit();
  dataset.close();