字段约束连接

  • 用于字段约束
  • 对象内部多个约束连接,采用“&&”(and)、“||”(or)和“,”(and)
  • 执行顺序:“&&”(and)、“||”(or)和“,”

字段约束操作符

  • >、>=、<、<=、= =、!=
  • contains:包含 A contains B, A中包含B
  • not contains:与contains相反
  • memberOf:单个对象属于某个集合,this表示当前对象
  • not memberOf:与memberof相反
  • matches:正则表达式,匹配
  • not matches:正则表达式,不匹配

contains 、 not contains

  1. package com.sample
  2.  
  3. import com.bean.Customer;
  4. import com.bean.Account;
  5.  
  6. rule "contains"
  7. when
  8. $account : Account();
  9. $customer : Customer(name=="七夜雪" && accounts contains $account);
  10. then
  11. System.out.println( "contains test success" );
  12. end
  13.  
  14. rule "not contains"
  15. when
  16. $account : Account();
  17. $customer : Customer(name=="七夜雪" && accounts not contains $account);
  18. then
  19. System.out.println( "not contains test success" );
  20. end
  1. /**
  2. * 字段约束符,contains
  3. * @throws Exception
  4. */
  5. @Test
  6. public void testContainsRule() throws Exception {
  7. KnowledgeBase kbase = readKnowledgeBase("Contains.drl");
  8. StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
  9. KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
  10. Customer customer = new Customer();
  11. customer.setName("七夜雪");
  12. Account account1 = new Account();
  13. account1.setNum(100);
  14. Account account2 = new Account();
  15. account2.setNum(100);
  16. customer.getAccounts().add(account1); //not contains
  17. //customer.getAccounts().add(account2); // contains
  18. ksession.insert(customer);
  19. ksession.insert(account2);
  20. ksession.fireAllRules();
  21. logger.close();
  22. }

memberOf 、not memberOf

  1. package com.sample
  2.  
  3. import com.bean.Customer;
  4. import com.bean.Account;
  5.  
  6. rule "Memberof"
  7. when
  8. $customer : Customer();
  9. //当前的account是$customer.getAccounts()的一个成员
  10. $account : Account(this memberOf $customer.getAccounts());
  11. then
  12. System.out.println( "memberOf test success and account is " + $account.getName() );
  13. end
  14.  
  15. rule "not Memberof"
  16. when
  17. $customer : Customer();
  18. //当前的account不是$customer.getAccounts()的一个成员
  19. $account : Account(this not memberOf $customer.getAccounts());
  20. then
  21. System.out.println( "not memberOf test success and account is " + $account.getName() );
  22. end
  1. /**
  2. * 字段约束符,memberOf
  3. * @throws Exception
  4. */
  5. @Test
  6. public void testMemberOfRule() throws Exception {
  7. KnowledgeBase kbase = readKnowledgeBase("Members.drl");
  8. StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
  9. KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
  10. Customer customer = new Customer();
  11. Account account1 = new Account();
  12. account1.setName("碧落");
  13. Account account2 = new Account();
  14. account2.setName("黄泉");
  15. customer.getAccounts().add(account1);
  16. ksession.insert(customer);
  17. ksession.insert(account1);
  18. ksession.insert(account2);
  19. ksession.fireAllRules();
  20. logger.close();
  21. }

matches 、 not matches

  1. package com.sample
  2.  
  3. import com.bean.Customer;
  4. import com.bean.Account;
  5.  
  6. rule "Matchs"
  7. when
  8. $customer : Customer(name matches "qiye*");
  9. then
  10. System.out.println( "Matchs test success and customer is " + $customer.getName() );
  11. end
  12.  
  13. rule "not Matchs"
  14. when
  15. $customer : Customer(name not matches "qiye*");
  16. then
  17. System.out.println( "not Matchs test success and customer is " + $customer.getName() );
  18. end
  1. /**
  2. * 字段约束符,memberOf
  3. * @throws Exception
  4. */
  5. @Test
  6. public void testMatcherRule() throws Exception {
  7. KnowledgeBase kbase = readKnowledgeBase("Matchs.drl");
  8. StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
  9. Customer customer = new Customer();
  10. customer.setName("qiyexue");
  11. Customer customer1 = new Customer();
  12. customer1.setName("biluo");
  13. ksession.insert(customer);
  14. ksession.insert(customer1);
  15. ksession.fireAllRules();
  16. }

fact对象代码:http://www.cnblogs.com/qiyexue/p/7822670.html

Drools学习笔记3—Conditions / LHS—字段约束连接&字段约束操作符的更多相关文章

  1. Drools学习笔记2—Conditions / LHS 匹配模式&条件元素

    Rule的LHS由条件元素(Conditional Elements—CE)和匹配模式(Patterns)组成 Patterns被用来指示出fact的字段约束 每个约束必须为true才能让RHS的ac ...

  2. 开源规则引擎 Drools 学习笔记 之 -- 1 cannot be cast to org.drools.compiler.kie.builder.impl.InternalKieModule

    直接进入正题 我们在使用开源规则引擎 Drools 的时候, 启动的时候可能会抛出如下异常: Caused by: java.lang.ClassCastException: cn.com.cheng ...

  3. Drools学习笔记

    Drools是一款基于Java的开源规则引擎 实现了将业务决策从应用程序中分离出来. 优点: 1.简化系统架构,优化应用 2.提高系统的可维护性和维护成本 3.方便系统的整合 4.减少编写“硬代码”业 ...

  4. ESP8266学习笔记6:ESP8266规范wifi连接操作

    一.前言 我整理了从2015年至今关于ESP8266的学习笔记,梳理出来了开发环境.基础功能.进阶学习三大部分.方便自己和他人.可点此查看,欢迎交流. 之前在笔记4<ESP8266的SmartC ...

  5. Docker学习笔记之--.Net Core项目容器连接mssql容器(环境:centos7)

    前一节演示在docker中安装mssql,地址:Docker学习笔记之--安装mssql(Sql Server)并使用Navicat连接测试(环境:centos7) 本节演示 .Net Core项目容 ...

  6. Drools学习笔记-01-在eclipse indgo集成Drools5.5

    1.1.条件 Drools它是一个基于Java开源规则引擎.因此,使用Drools以及前需要安装在开发机器JDK周边环境,Drools5.5需要JDK版本号的1.5或者更多. 1.2.开发环境搭建 大 ...

  7. Drools学习笔记4—Consequence/RHS

    Right Hand Side,当LHS所有条件满足才会执行 可以使用LHS部分定义的绑定变量.全局变量.或者直接编写JAVA代码. 提供宏函数操作working memory fact对象,如ins ...

  8. Drools学习笔记1—规则文件

    Facts(即普通的POJO) 指普通业务对象插入到Workingmemory后的对象规则可以对fact对象进行任意的对象操作是规则与应用系统交换的桥梁返回FactHandler对象,是插入到Work ...

  9. HTTP学习笔记(一)报文和连接管理

    对TCP/IP协议簇有些了解的同学们应该都知道.TCP/IP协议通过精简ISO网络7层协议(事实上了解历史渊源的话,TCP/IP协议本来目的并非简化ISO的7层协议.仅仅是因为ISO协议簇制定速度慢于 ...

随机推荐

  1. R语言笔记002——sample()函数

    sample()函数 sample(x,size,replace=FALSE) x表示一个或多个向量,size表示从x中随机取的样本个数,replace=FALSE表示不放回抽样,即不会选取到相同的值 ...

  2. mac 下面配置gradle

    最近刚开始用gradle,先向大家介绍一下怎么配置gradle的环境变量吧: 1.下载最新安装包gradle-xxx-all.zip:http://www.gradle.org,并解压到/Users/ ...

  3. linux防火墙开关

    对于普通Linux机器开关防火墙命令: 1重启后生效 chkconfig iptables off chkconfig iptables on 2即时生效 serivce iptables statu ...

  4. Android使用SVG小结

    SVG的全称是Scalable Vector Graphics,叫可缩放矢量图形.它和位图(Bitmap)相对,SVG不会像位图一样因为缩放而让图片质量下降.它的优点在于节约空间,使用方便. andr ...

  5. jenkins显示发送邮件成功,但未收到邮件

    一. 构建的控制台输出显示日志发送成功,但是未收到邮件 今天在完成构建的时候,破天荒的发现构建的控制台输出显示日志发送成功,但QQ邮箱的确没收到邮件 15:22:40 D:\python_worksh ...

  6. python中常用的文件和目录操作(一)

    常用的文件操作 1. 打开文件 open,它是一个内置函数,可以直接调用 语法:file object = open(file_name, [access_mode]),这里我们会创建一个file对象 ...

  7. Swift 3.0 on Ubuntu 15.10

    一.安装swift 3.0 1. 下载 https://swift.org/download/ 找到swift-3.0 ubuntu 15.10版本下载: https://swift.org/buil ...

  8. Unity自带寻路Navmesh

    自带寻路Navmesh的三大组件: 1.Nav Mesh Agent:主要挂在寻路物体上 2.Off Mesh Link:实现区域转移功能(例如,有时不一定只是在地面上进行寻路,可能有些高高的平台,平 ...

  9. 2.mysql优化---增删改优化

    整理自互联网 补充知识点:操作数据语句优化的认识 通常情况下,当访问某张表的时候,读取者首先必须获取该表的锁,如果有写入操作到达,那么写入者一直等待读取者完成操作(查询开始之后就不能中断,因此允许读取 ...

  10. php redis 操作手册

    String 类型操作 string是redis最基本的类型,而且string类型是二进制安全的.意思是redis的string可以包含任何数据.比如jpg图片或者序列化的对象 1 $redis-&g ...