杰斯的奇怪行为

时间:2015-05-13 04:53:40

标签: ontology rules jess

我想使用Jess在家庭本体中找到Bob的孩子。以下规则应该这样做:

(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)   
)

但是,不幸的是,它只打印出只有Bob作为他/她父母的孩子。例如,如果一个人将Bob和Mary作为他/她的父母,则该规则将不匹配。

1 个答案:

答案 0 :(得分:0)

不知道如何定义#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)   
)