字段约束连接

  • 用于字段约束
  • 对象内部多个约束连接,采用“&&”(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

package com.sample

import  com.bean.Customer;
import com.bean.Account; rule "contains"
when
$account : Account();
$customer : Customer(name=="七夜雪" && accounts contains $account);
then
System.out.println( "contains test success" );
end rule "not contains"
when
$account : Account();
$customer : Customer(name=="七夜雪" && accounts not contains $account);
then
System.out.println( "not contains test success" );
end
  /**
* 字段约束符,contains
* @throws Exception
*/
@Test
public void testContainsRule() throws Exception {
KnowledgeBase kbase = readKnowledgeBase("Contains.drl");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
Customer customer = new Customer();
customer.setName("七夜雪");
Account account1 = new Account();
account1.setNum(100);
Account account2 = new Account();
account2.setNum(100);
customer.getAccounts().add(account1); //not contains
//customer.getAccounts().add(account2); // contains
ksession.insert(customer);
ksession.insert(account2);
ksession.fireAllRules();
logger.close();
}

memberOf 、not memberOf

package com.sample

import  com.bean.Customer;
import com.bean.Account; rule "Memberof"
when
$customer : Customer();
//当前的account是$customer.getAccounts()的一个成员
$account : Account(this memberOf $customer.getAccounts());
then
System.out.println( "memberOf test success and account is " + $account.getName() );
end rule "not Memberof"
when
$customer : Customer();
//当前的account不是$customer.getAccounts()的一个成员
$account : Account(this not memberOf $customer.getAccounts());
then
System.out.println( "not memberOf test success and account is " + $account.getName() );
end
  /**
* 字段约束符,memberOf
* @throws Exception
*/
@Test
public void testMemberOfRule() throws Exception {
KnowledgeBase kbase = readKnowledgeBase("Members.drl");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
Customer customer = new Customer();
Account account1 = new Account();
account1.setName("碧落");
Account account2 = new Account();
account2.setName("黄泉");
customer.getAccounts().add(account1);
ksession.insert(customer);
ksession.insert(account1);
ksession.insert(account2);
ksession.fireAllRules();
logger.close();
}

matches 、 not matches

package com.sample

import  com.bean.Customer;
import com.bean.Account; rule "Matchs"
when
$customer : Customer(name matches "qiye*");
then
System.out.println( "Matchs test success and customer is " + $customer.getName() );
end rule "not Matchs"
when
$customer : Customer(name not matches "qiye*");
then
System.out.println( "not Matchs test success and customer is " + $customer.getName() );
end
  /**
* 字段约束符,memberOf
* @throws Exception
*/
@Test
public void testMatcherRule() throws Exception {
KnowledgeBase kbase = readKnowledgeBase("Matchs.drl");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
Customer customer = new Customer();
customer.setName("qiyexue");
Customer customer1 = new Customer();
customer1.setName("biluo");
ksession.insert(customer);
ksession.insert(customer1);
ksession.fireAllRules();
}

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. 使用iView时报"Parsing error: x-invalid-end-tag"错误的解决方案

    一. 问题日志 二. 问题原因iView将标签渲染为原生html标签时,由于这些标签是自闭合的,所以有end标签会报错. 三. 解决方案修改配置文件,忽略该项检查: 根目录下 - .eslintrc. ...

  2. MapReduce-二进制输入

    Hadoop的MapReduce不只是可以处理文本信息,它还可以处理二进制格式的数据1. 关于SequenceFileInputFormat类Hadoop的顺序文件格式存储二进制的键/值对的序列.由于 ...

  3. IOS 被拒 关于 iPhone running iOS 10.3.1 on Wi-Fi connected to an IPv6 network.

    问题: Guideline 2.1 - Performance Thank you for your resubmission. However, we discovered one or more ...

  4. JavaScript 正则表达收集整理

    JavaScript 正则表达收集整理 //可为空 /^\s*$/ //密码验证,必须且只含有数字和字母,可以拥有英文符号,6-17位 /(?=.{,})(?=.*\d)(?=.*[a-z])[\x2 ...

  5. 第一个DirectX程序include、lib设置问题

    1.fatal error LNK1104: cannot open file "d3d9.lib" 解决方案: (1)项目 -->属性 --> 配置属性 --> ...

  6. Python爬虫之利用BeautifulSoup爬取豆瓣小说(二)——回车分段打印小说信息

    在上一篇文章中,我主要是设置了代理IP,虽然得到了相关的信息,但是打印出来的信息量有点多,要知道每打印一页,15个小说的信息全部会显示而过,有时因为屏幕太小,无法显示全所有的小说信息,那么,在这篇文章 ...

  7. macvim/babun+spf13-vim

    mac: macvim brew install macvim --with-cscope --with-lua --with-override-system-vim brew linkapps ma ...

  8. Spring使用proxool连接池 管理数据源

    一.Proxool连接池简介及其配置属性概述 Proxool是一种Java数据库连接池技术.是sourceforge下的一个开源项目,这个项目提供一个健壮.易用的连接池,最为关键的是这个连接池提供监控 ...

  9. 炫酷tab栏--第三方开源--NavigationTabStrip

    github下载地址:https://github.com/DevLight-Mobile-Agency/NavigationTabStrip 这个开源项目很强大,只是一个自定义的控件,只有一个类 / ...

  10. 剑指offer--12.不用加减乘除做加法

    位运算,好久没用了 &:都为1,结果为1 ^:相同为0,不同为1 |:有1,结果为1 <<:左移 ----------------------------------------- ...