为新的内置Jena创建一个库

时间:2014-05-13 20:15:25

标签: java jena built-in jena-rules

我为耶拿制作了一些新的内置插件。我想创建一个库,我可以放置所有这些库。

我该怎么做?如何在这种情况下创建我的规则?我需要在规则文件中导入一些文件吗?

1 个答案:

答案 0 :(得分:1)

请注意,由于这个问题非常广泛,我的答案仅仅是针对整体设计的一系列建议。首先,我们将从耶拿的做法开始。

Apache Jena将其规则文件作为类路径资源存储在其分发jar中。 jena-core有一个名为etc的包(目录),其中存储了多个规则文件。 Jena实施的推荐者实际上只是具有特定规则集的GenericRuleReasoner。例如,FBRuleReasoner#loadRules()方法用于检索此推理器将使用的规则集。您应该查看它的调用位置,以便弄清楚如何使用这样的范例。

在您的系统中,我建议构建您自己的ReasonerFactory实现(让我们称之为MyReasonerFactory)。在MyReasonerFactory中,您可以拥有一个静态初始化块,该块将为您的特定于域的推理器注册Builtin。当有人拨打ReasonerFactory#create(Resource)时,您可以从类路径加载规则,然后创建一个使用这些规则的GenericRuleReasoner

一些伪代码(可能无法编译)如下:

public class MyReasonerFactory implements ReasonerFactory

    private static final String RULE_LOC = "/some/directory/in/my/jar/filename.extensiondoesntmatter";

    static {
        // register your builtins
    }

    @Override
    public RuleReasoner create(Resource r) {
        final GenericRuleReasoner reasoner = new GenericRuleReasoner(this, r);
        reasoner.setRules(FBRuleReasoner.loadRules(RULE_LOC));
        return reasoner;
    }

    @Override
    public String getUri() {
        return "urn:ex:yourReasoner";
    }

    @Override
    public Model getCapabilities() {
        // Your capabilities are identical to GenericRuleReasoner's
        return GenericRuleReasonerFactory.theInstance().getCapabilities();
    }
}