[rules-dev] Rule Parameters/Aliases
Mark Proctor
mproctor at codehaus.org
Fri Jul 18 13:31:38 EDT 2008
Found this:
http://www.ilog.com/products/jrules/documentation/jrules67/rtsohelp/wbg_config7.html
"A ruleset parameter is the equivalent of a global variable"
So a ruleset parameter is nothing more than a global, so just use our
globals as is and you get IN_OUT capabilities. I would strongly advise
you against representing your entire model this way and just using evals.
Mark
Mark Proctor wrote:
>
> Yoni Mazar wrote:
>> Hi all,
>> We are at the begining of a new clinical decision-support project. We
>> plan using drools (using Eclipse) in order to manage and execute our
>> business logic. As part of our research, we also evaluated JRules
>> which has a feature that
>> is very important to us and we could not find in Drools.
> I've reference the ilog manual on in/out parameters if anyone doesn't
> know what they are:
> http://www.ilog.com/products/jrules/documentation/jrules67/rsruleset/rs_rls_parameters.html#1026848
>
> http://www.ilog.com/products/jrules/documentation/jrules67/rsruleset/rs_rls_tskcreatingrulesetparams.html
>
>
> I don't see the difference between a global and an IN_OUT parameter,
> and I don't see the value of specifically saying which parameters are
> IN and which are OUT. It doesn't seem that parameters are facts, they
> are not asserted into the engine and propagated through the working
> memory - atleaast I don't think they are, the manual doesn't say
> clearly enough, it just says they can be referenced from any ruleset
> component, which seems to be akin to how we do globals.
>> Unless we missed it out, we will probably try and add this functionality
>> ourselves.
>>
>> In JRules, one can define a ruleset (corresponds to a package) with
>> parameters. Each parameter has a datatype (a class), a direction
>> (in/out/inout), and an alias. Then, within the rules, the user can
>> refer to the parameter alias. For
>> example, a user can define a ruleset with the following parameters:
>> *class=LabResult, direction=in, alias=hemoglobin *class=LabResult,
>> direction=in, alias=creatinin
>> Then, within a rule, one can write: when hemoglobin.value<10 and
>> creatinin.value>34 then...
> We can do the same with globals, but what that actually means is you
> have a rule that doesn't use any working memory objects, and you put
> the constraints into one big eval - no pattern matching, so you are
> turning the rule engine into a scripting engine rather than a
> production rule system.
>
> If they are indeed facts that allow for pattern matching, then it
> seems that they constraint by the variable name rather than by object
> type. I've never liked this, again why not just use mvel directly as a
> scripting engine. But I have thought of how this would be possible,
> somethign I call Named Facts - where asserted facts can be given a
> unique string identifier and a pattern can be told to not only
> constraint against that object type, but also against that variable
> name. However this is something that users can emulate themselves now,
> by just putting an "identifier" field on their facts and constraining
> on it in the pattern. If someone comes up with a clean way for
> supporting named facts and provides a patch we will consider including
> it, but it's not one of our priorities at the moment.
>
>
>> Now, the application retrieves the patient data accordingly
>> (hemoglobin and creatinine data separetly - even though they are of
>> the same type) and sets
>> the ruleset parameters:
>> ruleset.parameters.add("hemoglobin",hemoglobinFact)
>> ruleset.parameters.add("creatinin",creatininFact)
>> It is important that the definition of the aliases will be done
>> outside of
>> the rule (and not by defining in-rule variables)
>>
>> This approach simplifies the rules since some of the filtering is being
>> applied externally (not in the rule itself)
>>
> sounds like it simplifies it, by turning it into a scripting engine
> where all facts are variables with identifiers.
>> Does someone has an idea how to bridge this gap using Drools? Are
>> there any workarounds that can be used in order to avoid changes in
>> code?
>>
> Hopefully my main paragraph above shows you how to emulate this.
>> And here we can use your help:
>> We are new to Drools (and still have to dive into the big ocean of
>> code that
>> exists). The following features
>>
>> 1) defining parameters (in the package level...something like import)
>> 2) adding in/out modifiers (can be used in LHS, RHS, or both)
>> 3) allowing assignment of aliases to parameters 4) adding such
>> functionality to the rule editor (auto-complete ,type safety)
>>
>> Where should we start?
>> Do you have any ideas that can help start this process (e.g. relevant
>> classes, modules)?
>> We would appreciate any help regarding any of the items in the list
>> above.
>> Any hints, suggestions, directions, referals and so on.
>>
> IF IN_OUT params are nothign more than globals and big fat evails,
> then you have nothing to do.
>
> If they are named facts, it won't be easy, but you could try the
> following approach:
> 1) update drools to support named facts, as described previously, this
> will involve a special type of ObjectType I imagine, and you'll have
> to change how it matches ObjectTypes so that it also has access to the
> possible variable name.
> 2) figure out a sane syntax, that is not ambigious, to allow pattern
> matching on named facts, and update our Antlr files to support this.
> 4) I don't konw if in/out parameters are useful for a stateful
> session, or only stateless. Either way you will probably want to
> create some Context object that contains these parameters and then you
> "insert" them using smething like insertWithParameters( myParams ).
> With stateless it'll execute and return results directly, with
> stateful you'll have to figure out how that'll work with possible
> incremental inserts and fireallrules being called separately.
> 4) Write lots of tests ot make sure it doesn't break anything
>> Thanks a lot.
>>
>> Yoni
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20080718/2d60d145/attachment.html
More information about the rules-dev
mailing list