带有print builtin规则的Jena list语句

时间:2018-04-18 11:36:20

标签: jena built-in jena-rules

我正在努力学习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);

1 个答案:

答案 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。

我写过关于耶拿规则herehere的文章。