我正在使用GenericRuleReasoner来推断本体中的虚拟事实。GenericRuleReasoner将推理规则作为输入中的数据模拟规则,在耶拿推理支持中进行解释。下面是附加到泛型推理器的DatalogRule示例:
String rules = "[r1: (?e1 st:runningTask st:gic_eth0) -> (?e1 rdf:type st:dataFromEthernet2IP)]";
Reasoner reasoner = new GenericRuleReasoner(Rule.parseRules(rules));
reasoner.setDerivationLogging(true);
InfModel inf = ModelFactory.createInfModel(reasoner, rawData);
当我在我的数据上测试这段代码时,它工作得很好,并推断出了2000多个虚拟事实。但是,当我更改Datalog规则以创建这样的空白节点时
String rules = "[r1: (?e1 st:runningTask st:gic_eth0) -> (_:p rdf:type st:dataFromEthernet2IP)]";
我只得到了推断的虚拟事实。
GenericRuleReasoner的数据模拟规则中的空白节点表示有问题吗?
发布于 2014-07-07 15:52:53
GenericRuleReasoner的数据模拟规则中的空白节点表示有问题吗?
是。在耶拿规则中,您不使用这样的空节点。链接到的文档包含一个规则语法,其中没有任何东西允许像_:p
这样的节点。Jena规则中节点的语法是:
node := uri-ref // e.g. http://foo.com/eg
or prefix:localname // e.g. rdf:type
or <uri-ref> // e.g. <myscheme:myuri>
or ?varname // variable
or 'a literal' // a plain string literal
or 'lex'^^typeURI // a typed literal, xsd:* type names support
如果要创建新的空白节点,请使用规则正文中的丁香素将?x
绑定到新的空白节点。例如,
[r1: (?e1 st:runningTask st:gic_eth0), makeTemp(?p)
->
(?p rdf:type st:dataFromEthernet2IP) ]
https://stackoverflow.com/questions/24611512
复制相似问题