本文最新版已更新至: http://thinkinside.tk/2012/12/06/rule_language.html
在規則引擎中,通常會使用某種表述性的語言(而不是編程語言)來描述規則。所以規則描述語言也是規則引擎的一個重要組成部分。
目前在規則描述語言方面,並沒有一個通用的標准獲得規則引擎廠商的廣泛支持,大部分規則描述語言都是廠商私有的。
大體來說,規則語言可以分為結構化的(Structured)和基於標記的(Markup,通常為xml)。
常見的規則描述語言包括:
語言 | 類型 | 廠商 |
---|---|---|
srl(Structured Rule Language) | 結構化 | Fair Isaac(以前是Blaze Software) |
drl(Drools Rule Language) | 結構化 | Jboss(以前是drools.org) |
RuleML(Rule Markup Language) | xml | www.ruleml.org |
SRML(Simple Rule Markup Language) | xml | 無 |
BRML(Business Rules Markup Language) | xml | 無 |
SWRL(A Semantic Web Rule Language) | xml | www.daml.org |
不管是哪種規則描述語言,都需要描述一組條件以及在此條件下執行的操作(即規則)。
下面是一個drl的例子:
package com.sample import com.sample.DroolsTest.Message; rule "Hello World" when m : Message( status == Message.HELLO, myMessage : message ) then System.out.println( myMessage ); m.setMessage( "Goodbye cruel world" ); m.setStatus( Message.GOODBYE ); update( m ); end rule "GoodBye" when Message( status == Message.GOODBYE, myMessage : message ) then System.out.println( myMessage ); end