【问题标题】:Jena list statements with print builtin rule带有 print 内置规则的 Jena 列表语句
【发布时间】:2018-04-18 11:36:19
【问题描述】:

我正在尝试了解 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

我可以只在打印命令中列出语句吗?打印语句在控制台中打印。我想在我的 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);

【问题讨论】:

    标签: jena built-in jena-rules


    【解决方案1】:

    好的,如果我理解正确,您有 2 个问题:

    (1) 你想知道你是否可以使用规则来打印你的三元组,并且

    (2) 您想知道是否可以将 Jena 规则中的内容写入您的 GUI。

    答案(1)

    您可以通过类似的规则打印您的三元组

    [rulePrintTriples: (?s ?p ?o) -> print(?s, ?p, ?o)]
    

    虽然我认为您不应该这样做,因为它可能非常低效。此外,Jena 已经有办法轻松做到这一点,即:

    RDFDataMgr.write(System.out, model, RDFFormat.TTL);
    

    答案(2)

    是的,您可以将规则写入您的 GUI,但为此您必须创建自己的内置类型,如 here 所述。假设您的 GUI 使用某种 MVC 模式,您可以在使用自定义规则代码触发规则时更新 GUI 的模型。

    同样,您是否要这样做可能是有问题的,因为在您的 GUI 尚未初始化的情况下它可能会很脆弱。一种更强大的方法是将三元组添加到 Jena 模型中,然后在初始化 GUI 时,针对 Jena 模型运行 SPARQL 查询并以这种方式填充 GUI。

    我写过关于耶拿规则herehere

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-29
      相关资源
      最近更新 更多