Jess 的奇怪行为
Strange behavior in Jess
我想使用 Jess 在 ontology 家庭中找到 Bob children。应遵循以下规则:
(defrule FindBobChildren
(object (is-a https://wiki.csc.calpoly.edu/OntologyTutorial/family_example.owl#Person)
(OBJECT ?oi)
(https://wiki.csc.calpoly.edu/OntologyTutorial/family_example.owl#hasParent
?b&:(eq (instance-name ?b) (instance-name https://wiki.csc.calpoly.edu/OntologyTutorial/family_example.owl#Bob)))
)
=>
(printout t "Bob children:" (instance-name ?oi) crlf)
)
但是,不幸的是,它只打印出 children who have only Bob as his/her parent。例如,如果某人的 Bob 和 Mary 为 his/her parent,那么它不会被规则匹配。
不知道#Person 的模板是如何定义的,这很困难,但是根据您描述的行为,我推断#hasParent 是一个多槽。因此,使用这个:
(defrule FindBobChildren
(object (is-a #Person)
(OBJECT ?oi)
(#hasParent $? ?b&:(eq (instance-name ?b)(instance-name #Bob)) $?
)
)
=>
(printout t "Bob children:" (instance-name ?oi) crlf)
)
我想使用 Jess 在 ontology 家庭中找到 Bob children。应遵循以下规则:
(defrule FindBobChildren
(object (is-a https://wiki.csc.calpoly.edu/OntologyTutorial/family_example.owl#Person)
(OBJECT ?oi)
(https://wiki.csc.calpoly.edu/OntologyTutorial/family_example.owl#hasParent
?b&:(eq (instance-name ?b) (instance-name https://wiki.csc.calpoly.edu/OntologyTutorial/family_example.owl#Bob)))
)
=>
(printout t "Bob children:" (instance-name ?oi) crlf)
)
但是,不幸的是,它只打印出 children who have only Bob as his/her parent。例如,如果某人的 Bob 和 Mary 为 his/her parent,那么它不会被规则匹配。
不知道#Person 的模板是如何定义的,这很困难,但是根据您描述的行为,我推断#hasParent 是一个多槽。因此,使用这个:
(defrule FindBobChildren
(object (is-a #Person)
(OBJECT ?oi)
(#hasParent $? ?b&:(eq (instance-name ?b)(instance-name #Bob)) $?
)
)
=>
(printout t "Bob children:" (instance-name ?oi) crlf)
)