Drools使用dsl语言

简介: Drools使用dsl语言

Drools 为了对非开发人员更加友好,提供了dsl语言的支持,通过dsl再转换成drl文件来进行执行。


DSL简介

DSL == Domain Specific Language

以贴近业务领域的方式,即以类自然语言的方式来构造软件,使得我们不用花费太多精力就能看懂代码所对应的业务含义 。

它是创建规则语言的一种方式,致力于解决我们的问题域 。

DSL相当于一个转换器,它能将某一领域内的术语转换成规则语言。


Drools DSL背后的概念很简单。创建一个包含面向业务的概念的字典文件,并将其翻译成DRL。


定义DSL文件

基本内容格式如下:


[when] There is a person = $p:Person()
[when] - id greater than {id:\d*} = id > {id}
[then] print = System.out.println("I am fired!")

上面就是一个简单的dsl文件的定义,它遵从如下语法格式:

[<scope>][<type definition>]<dsl expression>=<replacement text>
其中
[when] or [condition] 定义的语法应用于LHS
[then] or [consequence] 定义的语法应用于RHS
[*]  以上两者都适用
[keyword] 关键字,比如no-loop这一类属性

使用DSL文件

新建dslr后缀的文件,里面的语法为:

rule 'test-dsl'
when
    There is a person
    - id greater than 10
then
    print
end

执行dsl文件的转换

public class Demo14 extends BaseDemo {
  public static void main(String[] args) throws IOException, DroolsParserException {
    String dslContent = "[when] There is a person = $p:Person()\n" +
        "[when] - id greater than {id:\\d*} = id > {id}\n" +
        "[then] print = System.out.println(\"I am fired!\")";
    String dslrContent = "rule 'test-dsl'\n" +
        "\n" +
        "when\n" +
        "    There is a person\n" +
        "    - id greater than 10\n" +
        "then\n" +
        "    print\n" +
        "end";
    DefaultExpanderResolver resolver = new DefaultExpanderResolver(new StringReader(dslContent));
    DrlParser parser = new DrlParser();
    String string = parser.getExpandedDRL(dslrContent,resolver);
    System.out.println(string);
  }
}

打印出的结果为:

rule 'test-dsl'
when
    $p:Person(id > 10)
then
    System.out.println("I am fired!")
end

就是正常写的drl文件的内容。

拓展

当然,也可以直接在dsls中通过expander来引入规则到dslr中,比如:

rule 'test-dsl'
expander demo.dsl
when
    There is a person
    - id greater than 10
then
    print
end

然后通过kmodule.xml中像常规drl文件使用一样来使用dslr文件。

目录
相关文章
|
XML 自然语言处理 Java
Kotlin 使用DSL构建语法结构 看这一篇就够了~
Kotlin 使用DSL构建语法结构 看这一篇就够了~
2080 0
Kotlin 使用DSL构建语法结构 看这一篇就够了~
|
Java Spring
4、Drools规则引擎-Drools入门案例
Drools的实现并不难,关键是了解他的语法即可
293 0
4、Drools规则引擎-Drools入门案例
|
XML 自然语言处理 IDE
一杆到底:DSL 领域特定语言
一、DSL了解1、DSL介绍DSL(Domain Specific Language)是针对某一领域,具有受限表达性的一种计算机程序设计语言。 常用于聚焦指定的领域或问题,这就要求 DSL 具备强大的表现力,同时在使用起来要简单。说到DSL,大家也会自然的想到通用语言(如Java、C等)。为什么没有一种语言同时 兼具『简洁』和『业务表达』能力呢?从信息论本质上来讨论这个问题,每个语言的程序都可以抽
12345 0
一杆到底:DSL 领域特定语言
|
SQL 程序员 数据库
【Kotlin】Kotlin 领域特定语言 DSL 原理 一 ( DSL 简介 | 函数 / 属性扩展 )
【Kotlin】Kotlin 领域特定语言 DSL 原理 一 ( DSL 简介 | 函数 / 属性扩展 )
314 0
|
开发框架 自然语言处理 前端开发
一种新的DSL生成和通用语言框架:pypy
本文关键字:DSL框架和自动化生成工具,pypy as dsl framework and jit framework
889 0
一种新的DSL生成和通用语言框架:pypy
|
Web App开发 JavaScript 前端开发
mobl:针对移动Web开发的DSL
  简介   现在,针对移动设备像智能手机和平板电脑的应用开发很流行。Apple公司的AppStore(针对iPhone、iPod和iPad)拥有超过350,000种应用,而Android的marketplace也快速追赶上来,现在已经拥有超过200,000种应用。
1251 0
|
Kotlin SQL
Kotlin领域特定语言(DSL)
一、DSL的概念 只在特定领域内使用的语言 例如: —HTML、Gradle、SQL等等 特点: 计算机编程语言 具有语言的表达能力 有限的表达能力 关注某个特定的领域 二、下面用DSL来写一个例子吧 需要下面五个类: 三、创建一个Node节点的接口 package cn.
1400 0
|
数据可视化 程序员 API
《领域特定语言》一2.2为何需要DSL
本节书摘来自华章出版社《领域特定语言》一书中的第2章,第2.2节,作者 (英)Martin Fowler,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1819 0
|
XML 测试技术 数据格式
《领域特定语言》一第3章 实现DSL 3.1DSL处理之架构
本节书摘来自华章出版社《领域特定语言》一书中的第3章,第3.1节,作者 (英)Martin Fowler,更多章节内容可以访问云栖社区“华章计算机”公众号查看
1890 0
|
XML SQL API
《领域特定语言》一第2章 使用DSL 2.1定义DSL
本节书摘来自华章出版社《领域特定语言》一书中的第2章,第2.1节,作者 (英)Martin Fowler,更多章节内容可以访问云栖社区“华章计算机”公众号查看
2278 0