Droolsのruleファイルの宣言構造

droolsではルールは基本的にdrlファイルに書いていきます。when+then以外に目をむけるとサンプルみても、何この構文?ってなっちゃいます。でも大きい構造をふまえてちょっと分解するだけで少し読みやすくなります。大きくはこういう構造です。

package package-name
・・・
imports
・・・
globals
・・・
functions
・・・
queries
・・・
rules
・・・

packageはjavaに近いですね、namespace的な位置づけです。細かいことはあとでも書くと思うけどdrl,xmlファイルからASTつかって最終的にpackageというルールの集まりを作ります。その時にルールエンジン上で一意になる名前がコレになりますですよ。
importsもjavaと一緒です。javaのルールエンジンなのでjavaとの連携が当然シームレスに行われないとダメなんです。その時にはバシっとimportです。
globalsはグローバル変数の宣言です。複数パッケージ間で共有されます。
functionsはファンクション、関数です。うわー、このルール共通化してまとめたい、このルールファイル上でーって時に使います。複雑な部分になるとjavaでやったりdroolsのルールでやったりする境界がどっちつかずみたいなところがでてくるときもあるかと思います。その際にdrlでまとめたくなったら間違いなくfunctionで宣言です。
queryもクエリー、そのまんまです。
で、最後のrulesにてルールを書くとなっています。大きい構文はこうなってます。ちなみにrulesの中のルールの構文はこんな感じ。

rule "name"
    attributes
when
    LHS
then
    RHS
end

ルール名があってどんな時(when)、何すんねん(then)で書きます。というのを書いたのがruleの基本構造であります、っていうか一目瞭然(モア風)