前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Drools使用dsl语言

Drools使用dsl语言

作者头像
程序新视界
发布2022-05-09 19:27:15
7890
发布2022-05-09 19:27:15
举报
文章被收录于专栏:丑胖侠丑胖侠丑胖侠

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文件。

原文链接:http://www.choupangxia.com/topic/detail/97

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DSL简介
  • 定义DSL文件
  • 使用DSL文件
  • 执行dsl文件的转换
  • 拓展
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档