我为 Jena 制作了一些新的内置插件。我想创建一个图书馆,我可以把它们都放在那里。
我怎样才能做到这一点 ?在这种情况下如何创建我的规则?我需要在规则文件中导入一些文件吗?
我为 Jena 制作了一些新的内置插件。我想创建一个图书馆,我可以把它们都放在那里。
我怎样才能做到这一点 ?在这种情况下如何创建我的规则?我需要在规则文件中导入一些文件吗?
请注意,由于这个问题非常广泛,我的回答只是对整体设计的一组建议。首先,我们将从 Jena 的做法开始。
Apache Jena 将其规则文件作为类路径资源存储在其分发 jar 中。jena-core
有一个名为的包(目录)etc
,其中存储了几个规则文件。Jena 实施的推理器实际上只是GenericRuleReasoner
具有特定规则集。例如,FBRuleReasoner#loadRules()
方法用于检索此推理器将使用的规则集。你应该看看它是从哪里调用的,以便弄清楚你将如何使用这样的范例。
在您的系统中,我建议构建您自己的ReasonerFactory
(我们称之为MyReasonerFactory
)的实现。在MyReasonerFactory
中,您可以有一个静态初始化块,它将Builtin
为您的特定域推理器注册 s。当有人调用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();
}
}