温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

drools规则语言的使用方法

发布时间:2021-06-25 09:40:50 来源:亿速云 阅读:282 作者:chen 栏目:大数据

这篇文章主要讲解了“drools规则语言的使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“drools规则语言的使用方法”吧!

简介:

DRL (Drools Rule Language)是drools规则语言的简称,在使用drools规则引擎的时候,我们经常把写好的规则放在.drl文件中,然后规则引擎再去加载规则,那么一个drl文件基本组成是什么样子的呢?继续向下看:

drools规则文件的组成

package //包名

import  //导入的哪些类

function  // 可选,定义的函数

query  // 可选,定义的查询

declare   //可选, 声明

global   // 可选,定义的全局变量

rule "规则名1" 
    // 属性
    when
        // 条件
    then
        // 符合条件后执行的动作
end

rule "rule2 name"
...

下面的一段示例DRL规则(注意这个例子只是一个规则,而不是整个规则文件的内容,所有它没有写出package,import)定义了在一个贷款决策服务中对年龄条件的限制:

rule "Underage"
  salience 15
  agenda-group "applicationGroup"
  when
    $application : LoanApplication()
    Applicant( age < 21 )
  then
    $application.setApproved( false );
    $application.setExplanation( "Underage" );
end

下图是一个规则文件几个元素一般顺序: drools规则语言的使用方法 package: drools中的package和java中的package语法一样,一个DRL文件只能有一个package而且必须是在第一个行,其他的元素都可以包含一个或多个,但是规则名称要唯一。 例如:

package com.cn.somepackage;

package后面的“;”是可选项,任何的规则属性都可以定义在包级别,这样就会成为规则的默认属性,同时如果在规则上重新设置属性,也会覆盖规则的默认属性 。 import:

drools规则语言的使用方法

类似于java中的import语句,用于导入相关要使用的类或对象,格式是packageName.objectName,多个import语句用多行分割,Drools引擎会自动导入和相同package下的类和*java.lang.*下的类。 例如:

import org.mortgages.LoanApplication;

function:

function的结构如下:

drools规则语言的使用方法

function的定义是放在drl规则文件中而不是java类中,定义了function在后面的规则中就可以调用了;除此之外,也可以在外面的java类中定义一个静态方法,再导入到drl文件中;例如:

  • 在drl文件中直接定义

function String hello(String applicantName) {
    return "Hello " + applicantName + "!";
}

rule "Using a function"
  when
    // Empty
  then
    System.out.println( hello( "James" ) );
end
  • 导入外部static方法

import function my.package.applicant.hello;

rule "Using a function"
  when
    // Empty
  then
    System.out.println( hello( "James" ) );
end

query: query语句在drl文件中是用来从drools引擎的working memory中查询出相关的facts。在drl文件中定义query语句,在java代码中调用就可以获取到查询的结果。通过:*ksession.getQueryResults("name")返回一个QueryResults *,name是查询的名称,这个name要在整个kbase中是唯一的。例如:

  • 在drl文件中定义query

query "people under the age of 21"
    $person : Person( age < 21 )
end
```
- 在java代码中调用
```
QueryResults results = ksession.getQueryResults( "people under the age of 21" );
System.out.println( "we have " + results.size() + " people under the age  of 21" );
```

感谢各位的阅读,以上就是“drools规则语言的使用方法”的内容了,经过本文的学习后,相信大家对drools规则语言的使用方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI