流口水查询:奇怪的依赖

时间:2013-04-10 09:44:10

标签: drools

我对Drools有点新手,在编写查询时遇到了这种奇怪的行为。

首先,这里的Hotel类是PlaceImpl的子类,它实现了接口PlacePlaceImpl本身是OntologyClassImpl的子类(通过另一个类),其中方法getClasses()以最简单的方式实现:它返回已存在的java.util.Set个对象。简而言之,getClasses()接口和Place类都可以访问Hotel

我的问题是:即使匹配Hotel,以下查询也不会返回任何结果。

query "qryRomantic" 
    $e:   Hotel (classes contains Semantics.AMB_Romantic)
end

但是,如果我将Hotel替换为Place,则查询会返回所需的结果,尽管只为Hotel编写了ONLY条件设置规则,如下所示。 (这条规则实际上被解雇了。)

rule "Set semantic class Romantic"
no-loop
    when
        $hotel: Hotel( ... conditions go here ... )
    then
        modify ($hotel){
            addToClasses(Semantics.AMB_Romantic)
        }
end

它并没有就此结束。

如果我将另一个查询添加到规则文件中,完全相反的条件如下,

query "qryNonRomantic" 
    $e:   Hotel (classes not contains Semantics.AMB_Romantic)
end

然后第一个查询开始返回所需的结果,即使那时根本没有调用新查询!

我做错了什么?我真的很感激任何指针。

0 个答案:

没有答案