Как использовать пустой узел в правилах журнала данных для GenericRuleReasoner?

Я использую GenericRuleReasoner для вывода виртуальных фактов в своей онтологии. GenericRuleReasoner принимает правила вывода как правило журнала данных во входных данных, как объясняется в поддержке вывода jena. вот пример 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 виртуальных фактов. Однако, когда я изменил правило журнала данных, чтобы создать такие пустые узлы,

String rules = "[r1: (?e1 st:runningTask st:gic_eth0) -> (_:p rdf:type st:dataFromEthernet2IP)]";

Я получаю только на основании виртуальных выводов.

Есть ли проблема с моим пустым представлением узла в правиле журнала данных для GenericRuleReasoner?


person Fopa Léon Constantin    schedule 07.07.2014    source источник
comment
Дублировано по адресу answers.semanticweb.com/questions/29084/.   -  person Joshua Taylor    schedule 11.07.2014


Ответы (1)


Есть ли проблема с моим пустым представлением узла в правиле журнала данных для GenericRuleReasoner?

да. Такие пустые узлы не используются в правилах Йены. Документ, на который вы ссылаетесь, включает грамматику правил, и в нем нет ничего такого, что разрешил бы что-то вроде _:p в качестве узла. Синтаксис узлов в правилах Йены:

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) ]
person Joshua Taylor    schedule 07.07.2014