1.3 Knowledge Representation

                                                                             Knowledge Representation

   1.3.1 Production Rules
           规则或Production Rules在Drools里由规则成立时处理动作(LHS)和规则不成立时处理动作(RHS)两部分和其它下面一些而外的属性组成。
               。salience
               。agenda-group
               。auto-focus
               。activation-group
               。no-loop
               。duration

 

rule “ < name > ”    
    
< attribute >   < value >     
    when        
        
< LHS >     
    then        
        
< RHS >
end
      LHS由规则的名称和逻辑组合条件组成。下面则是符合规则条件下要执行的指定的动作。中间属性列用来约束初始数据。 
      Drools现在支持的逻辑条件有:
      。“and”
      。“or”
      。“not”
      。“exists”
      "forall"和"accumulate"在不久也会加入。下面的字段约束是容许的
      。Literal Constraint                 (字符串约束)
      。Bound Variable Constraint   (变量范围约束)
      。Return Value                        (范围值约束)
      。Predicate                              (断言)

          下面的语言指导介绍更详细的关于它们的消息
          Working Memory在匹配初始数据或修改数据后的时候根据LHS 的条件,把所有匹配的规则激活。一旦规则被激活放入Agenda 里就
   有可能会被按照执行顺序调用规则RHS的动作。LHS和RHS的关系就下面语句关系一样:
            
if  (  < LHS >  ) {
     
<RHS>
}
       尽管“if”在像“if-else if...else”中是执行语句的一部分,规则使用“when”的语义确定规则是否被激活,则规则LHS被匹配。规则
   像    “package”一样关联到命名空间。其它的规则引擎叫这个叫规则集合(Rule Set)。命名空间(Package)可以声明imports其它Package,
   全局变 量, 函数和规则。
  
package  com.sample

import  java.util.List
import  com.sample.Cheese

global List cheeses

function 
void  exampleFunction(Cheese cheese)  {
    System.out.println( cheese );
}


rule “A Cheesey Rule”
    when
        cheese : Cheese( type 
==   " stilton "  )
    then
        exampleFunction( cheese );
        cheeses.add( cheese );
end
      
      上面的例子使用一列单独的字符串变量约束的规则来匹配Cheese 。
rule  " Cheddar Cheese "
    when
        Cheese( type 
==   " cheddar "  )
    then
        System.out.println( 
" cheddar "  );
end
      这个例子和下面是相同的:
public   void  cheddarCheese(Cheese cheese)  {
    
if ( cheese.getType().equals("cheddar"{
        System.out.println( 
"cheddar" );
    }

}
      规则引擎完全把业务规则和数据分离。改变Working Memory里的初始数据时候,规则不像方法和函数一样可以被直调用。规则引擎可以向java一样声明做什么而不是怎么做。


First Order Logic

你可能感兴趣的:(1.3 Knowledge Representation)