Drools之基础语法
一、规则文件
标准的规则文件以”.drl”结尾。
一套完整的规则文件内容如下:
- package:包名,只限于逻辑上的管理,若自定义的查询或函数位于同一包名,不管物理位置如何,都可以直接调用。
- import:规则引用问题,导入类或静态方法。
- global:全局变量,使用时需要单独定义变量类型
- function:自定义函数,可以理解为Java静态方法的一种变形,与JavaScript函数定义相似。
- queried:查询。
- rule end:规则内容中的规则体,是进行业务规则判断、处理业务结果的部分。
二、规则体语法结构
一个规则体包含三个部分,唯有attributes部分是可选,其他关键字都是必填信息。属性可选并不表示没有,属性是有默认值的,如规则默认是被激活的。
规则体语法结构如下:
- rule:规则开始,参数是规则的唯一名称
- attributes:规则属性,是rule与when之间的参数,为可选项
- when:规则条件部分,默认为true
- then:规则结果部分
- end:当前规则结束
三、匹配模式
LHS部分由一个或多个条件组成,条件又称pattern。多个pattern之间既可以使用and或or连接,又可以使用小括号确定pattern的优先级,默认条件是true。
pattern的”绑定变量名”是可选的,当前规则的RHS部分需要操作pattern匹配的参数,若要用到某些对象,则可以通过为该对象设定一个绑定变量名来实现对它的操作。对于绑定变量的命名,通常是为其添加一个”$”符号作为前缀,与对象的命名方法相同;绑定变量不仅可以用在对象上,也可以用在对象的属性上,作用是方便RHS部分的操作,同时也避免与Fact对象属性的使用相混淆。
“Field约束”是指当前对象中属性或方法的使用,如添加条件限制”name==’YC’,age==24”.
规则体中LHS部分绑定变量基本上有两种形式:一种是整个Fact变量的绑定,另一种是约束条件属性变量的绑定。
四、运算符
运算符是在程序中最常用的计算方法,一般的运算符包括”+、-、*、/、%”等,优先级与Java相同。
五、约束连接
匹配模式中有多种约束符的连接,常用的有”&&”(and)、”||”(or)、”,”(and)。这3个连接符号如果没有用括号来显示定义的优先级,那么”&&”优先级大于”||”优先级。
Drools自带的约束,共有6种比较操作符。
1.contains比较操作符
contains是用来检查一个Fact对象的某个属性值是否包含一个指定的对象值。其语法格式为:
Object[field[Collection/Array] contains | not contains value]
2.not contains 比较运算符
not contains的作用与contains相反,它是用来判断一个Fact对象的某个字段不包含一个指定的对象。
3.memberOf比较运算符
memberOf用来判断某个Fact对象的某个字段是否在一个或多个集合中。其语法格式为:
Object(fieldName memberOf | not memberOf value[Collection/Array])
4.not memberOf比较运算符
not memberOf与memberOf的作用相反,是用来判断Fact对象中某个字段不在某个集合中。
5.matches比较运算符
matches用来对某个Fact对象的字段与标准的Java正则表达式进行相似匹配,被比较的字符串可以是一个标准的Java正则表达式。但需要注意的是,正则表达式字符串中不用考虑”\”的转义问题,其语法为:
Object(fieldName matches | not matches "正则表达式")
6.not matches 比较运算符
not matches的作用与matches相反,是用来将某个Fact对象的字段与一个Java标准正则表达式进行匹配,若与正则表达式不匹配,则规则成立。
7.soundlike比较运算符
soundlike用来检查单词是否具有与给定值几乎相同的声音(使用英语发音)。基于Soundex算法的语法为:
Object(fieldName soundlike 'value')
8.str比较运算符
str不仅检查String字段是否以某一值开头/结尾,还可以判断字符串长度,其语法为:
Object(fieldName str[startWith|endWith|length] "String"|)
六、语法扩展
主要指List、Set、Map等元素操作。
七、规则文件drl
1.单行注释(使用”//“进行标记)
2.多行注释(以”/*“开始,以”*/“结束)
Drools之基础语法的更多相关文章
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- iOS-----正则表达式的基础语法
正则表达式简单语法总结 一.什么是正则表达式 从概念上来说,正则表达式也是一门小巧而精炼的语言,它可以用来简化检索特定的字符串,替换特定字符等功能,有许多开发语言工具,都内嵌支持正则表达式.那么一个正 ...
- python之最强王者(2)——python基础语法
背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...
- emmet 系列(1)基础语法
emmet 系列(1)基础语法 emmet 是一个能显著提升开发html和css开发效率的web开发者工具 emmet基本上目前已知的编辑器都有相应的插件,各个编辑器的emmet插件的下载地址:点我下 ...
- Scala基础语法 (一)
如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法. Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 我 ...
- Java基础语法
java基础学习总结——基础语法1 一.标识符
- javascript中正则表达式的基础语法
× 目录 [1]定义 [2]特点 [3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性 前面的话 正则表达式在人们的印象中可能是一堆无 ...
- Swift基础语法学习总结(转)
Swift基础语法学习总结 1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...
- 黑马程序员——OC语言基础语法 面向对象的思想
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...
随机推荐
- iOS - 多线程——GCD
什么是GCD Grand Central Dispatch(强大的调度器),是一个C语言API: 作用:多核并行运算的解决方案: GCD中有2个核心概念 ...
- 源码分析(1)-HashMap(JDK1.8)
UML类图 java.util.Map<K, V>接口,有4个实现类:HashMap.Hashtable.LinkedHashMap和TreeMap. 1.说明 (1)HashMap除允许 ...
- 关于Java优质代码的那些事
以前别人告诉我,代码都是粘贴复制,然后写多了,就有了自己的思想,然后1,2年过去了,我的代码质量并没有什么提高,问了一些博客园里的前辈,前辈们都是语重心长的说:"少年,多看书呀!" ...
- foreach 集合又抛经典异常了,这次一定要刨根问底
一:背景 1. 讲故事 最近同事在写一段业务逻辑的时候,程序跑起来总是报:集合已修改:可能无法执行枚举操作,硬是没有找到什么情况下会导致这个异常产生,就让我来找一下bug,其实这个异常在座的每个程序员 ...
- NASH:基于丰富网络态射和爬山算法的神经网络架构搜索 | ICLR 2018
论文提出NASH方法来进行神经网络结构搜索,核心思想与之前的EAS方法类似,使用网络态射来生成一系列效果一致且继承权重的复杂子网,本文的网络态射更丰富,而且仅需要简单的爬山算法辅助就可以完成搜索,耗时 ...
- (一)POI-新建excel文件
原文:https://blog.csdn.net/class157/article/details/92799521 package com.java.poi; import org.apache.p ...
- fiddler修改请求参数
1.打开fiddler ,点击界面左侧左侧底部 2.此图标为before request请求(修改请求参数时,设置这个,可以修改请求参数) 3..再次点击该按钮,将图标切换到下图after respo ...
- Web测试和app测试区别?
EB测试和APP测试从流程上来说,没有区别.都需要经历测试计划方案,用例设计,测试执行,缺陷管理,测试报告等相关活动.从技术上来说,WEB测试和APP测试其测试类型也基本相似,都需要进行功能测试,性能 ...
- 四分位数与pandas中的quantile函数
四分位数与pandas中的quantile函数 1.分位数概念 统计学上的有分位数这个概念,一般用p来表示.原则上p是可以取0到1之间的任意值的.但是有一个四分位数是p分位数中较为有名的. 所谓四分位 ...
- vue-drag-resize 可拖拽可缩放的标签,如何管理多个拖拽元素之间的zIndex?操作上需要保持当前激活的组件是最上层,但是在总体上,又要确保其图层管理的顺序。
麻烦总是不断出现,还好办法总比困难多, 1.公司开发一款可视化编辑html网页的多媒体编辑平台,牵扯到标签元素的拖拽,缩放,我找了找方法发现原生技术实现起来代码太多,麻烦,还好找到了一个vue组件,可 ...