0

GenericRuleReasoner を使用して、オントロジーの仮想事実を推測しています。GenericRuleReasoner は、 jena inference supportで説明するように、推論ルールを入力の Datalog ルールとして受け取ります。一般的な推論にアタッチされた 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 のデータログ ルールの空白ノード表現に問題はありますか?

4

1 に答える 1

1

GenericRuleReasoner のデータログ ルールの空白ノード表現に問題はありますか?

はい。Jena ルールでは、このような空白ノードは使用しません。リンク先のドキュメントにはrules の文法_: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

新しい空白ノードを作成する場合は、ルールの本文でmakeTemp(?x) bulitinを使用して、新しい空白ノードにバインド?xします。例えば、

[r1: (?e1 st:runningTask st:gic_eth0), makeTemp(?p)
     ->
     (?p rdf:type st:dataFromEthernet2IP) ]
于 2014-07-07T15:52:53.827 に答える