我正在努力学习Jena和GenericRuleReasoner的工作原理。我从Apache Jena教程中获取了这个。
[transitiveRule: (?A demo:p ?B), (?B demo:p ?C) -> (?A > demo:p ?C) ]
[symmetricRule: (?Y demo:p ?X) -> (?X demo:p ?Y) ]
如果我想添加另一个声明
[testPrintRule: (?X demo:p ?Y) -> print(?Y, "for testing")] //Print only this
我是否可以仅在打印命令中列出语句? print语句在控制台中打印。我想在我的UI中显示。
这就是我目前在耶拿做的三重奏。如果我错了,我很抱歉,我是初学者。
Property p = ReadOntology.model.getProperty(ns + "demo:p");
List rules = Rule.rulesFromURL(FileLocations.getRulesLoc());
Reasoner reasoner = new GenericRuleReasoner( rules );
InfModel infModel = ModelFactory.createInfModel( reasoner, ReadOntology.model);
StmtIterator train = infModel.listStatements(null, p, (RDFNode)null);
答案 0 :(得分:1)
好的,如果我理解正确,你有2个问题:
(1)您想知道是否可以使用规则打印三元组,
(2)您想知道是否可以将Jena规则中的内容写入GUI。
回答(1)
您可以通过
等规则打印三联[rulePrintTriples: (?s ?p ?o) -> print(?s, ?p, ?o)]
虽然我不认为你应该这样做,因为它可能效率很低。此外,耶拿已经有办法轻松地做到这一点,即:
RDFDataMgr.write(System.out, model, RDFFormat.TTL);
回答(2)
是的,你可以有一个规则来写你的GUI,但为此你必须按照here的说明创建你自己的内置类型。假设您的GUI使用某种MVC模式,则可以在使用自定义规则代码触发规则时更新GUI模型。
同样,您是否想要这样做可能会有疑问,因为在您尚未初始化GUI的情况下它可能会很脆弱。一种更强大的方法是将三元组添加到Jena模型中,稍后,例如,在初始化GUI时,对Jena模型运行SPARQL查询并以这种方式填充GUI。