【发布时间】:2014-07-24 03:34:06
【问题描述】:
我正在使用 Jena,我想将新的本体更新到我的 tdb 中。 例如。 我的本体中有 100 行,在我添加一些规则并运行推理器后,现在有 105 行。 而且我需要在我的 tdb 中更新这 5 个额外的行。 我怎样才能完成这项工作?
我尝试用谷歌搜索它,我发现了两种方法。一个是使用 sparql 来更新,另一个是截断 tdb 并将新模型添加到其中。
还有其他更好的解决方案吗?
谢谢你
--
代码
void after_reasoner(Model m) {
String yago = "http://yago-knowledge.org/resource/";
Reasoner reasoner = new GenericRuleReasoner(
Rule.rulesFromURL("file:./rules/act.rule"));
InfModel inf1 = ModelFactory.createInfModel(reasoner, m);
PrintUtil.registerPrefix("yago", "http://yago-knowledge.org/resource/");
}
同样,我的问题是如何处理我的 tdb 的新“infmodel”。 我只想更新新的事实。
这是我从 tdb 获取模型的方法。
Model tdb_write_return() {
String directory = "./tdb";
Dataset dataset = TDBFactory.createDataset(directory);
dataset.begin(ReadWrite.WRITE);
String ns = "http://www.darrell.com.tw/ontologies/";
Model model = dataset.getNamedModel(ns);
dataset.commit();
dataset.end();
dataset.close();
return model;
}
【问题讨论】:
-
你能澄清一下你实际上在做什么吗? TDB 是一个 RDF 三元组存储,所以我假设当您说“行”时,您的意思是三元组。如果您不在 Java 代码范围内,那么使用 SPARQL 是更新三元组存储的最自然方法,但如果您正在编写 Java 代码,那么您可以轻松地检索数据集中命名图的模型并向它们添加语句与耶拿。
-
是的,你有我的问题。但问题是,在使用了推理器之后。我得到了一个包含旧模型和新三元组的 Infmodel。我对如何将 Infmodel 放入 tdb 和更新感到困惑,因为它包含我的旧模型。不只是新海龟。谢谢你。
-
请显示一些代码。到目前为止你做了什么?什么没有按您预期的方式工作?一个 TDB 数据集可以包含多个图,不清楚您是要覆盖一个,还是只是添加到它,或者是什么。请说明您目前在做什么,以及哪些方面不起作用。
-
只需更新代码,感谢您的回复
标签: sparql jena tdb jena-rules