我对Drools有点新手,在编写查询时遇到了这种奇怪的行为。
首先,这里的Hotel
类是PlaceImpl
的子类,它实现了接口Place
。 PlaceImpl
本身是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
然后第一个查询开始返回所需的结果,即使那时根本没有调用新查询!
我做错了什么?我真的很感激任何指针。