2014-09-22 7 views
0

Что произойдет, если мы поместим переменную в голову GenericRuleReasoner, которая не появляется в теле правила?Jena GenericRuleReasoner

Например, если мы имеем следующее правило:

rule1: (?x rdf:type :Person) -> (?y :father ?x) 

Правило гласит, что каждый человек имеет отца. Предположим, у нас есть тройка :a rdf:type :Person Как здесь ведет себя рассудитель? Будет ли он создавать новую тройку с пустым узлом, например _x :father :a?

+0

«В правиле говорится, что у каждого человека есть отец». Почему вы так говорите? Говорит ли это, что это зависит от того, что делает Йена с этим правилом. Если вы хотите «новую тройку с пустым узлом типа _x: father: a», тогда вам просто нужно написать '(? X rdf: type: Person), makeTemp (? Y) -> (? Y: father? X) '. Все это описано в документации. –

ответ

1

Я думаю, что он пожалуется на это. Это, в конце концов, двусмысленно: вы имеете в виду «есть ?y такой, что ...» или «для любого ?y ....»?

Из того, что вы говорите, ясно, что вы ожидаете прежнюю, экзистенциальную версию, потому что это то, что вводит bNode. Так что попробуйте:

rule1: makeTemp(?y), (?x rdf:type ex:Person) -> (?y ex:fatherOf ?x) 

или

rule1: makeInstance(?y, ex:father, ?x), (?x rdf:type ex:Person) -> (?y ex:fatherOf ?x) 

последний из которых даст вам последовательный отец узел, в то время как бывший просто вводит bNode.

+0

Я имею в виду, что существует? Y, так что? Y: father? X – riad

+0

Да, я понял, что из того, что вы сказали о введении bNode, это означает именно это. Я изменю свой ответ, чтобы было ясно. – user205512

 Смежные вопросы

  • Нет связанных вопросов^_^