You have omitted the regular expressions from some of the variable definitions in DSL entries:
[when][] {attr:\S+} follows pattern {x:\S+} = startsWithFunction({attr},{x}) Restore them all, and it's OK. -W 2011/1/4 maverik j <maverikj...@gmail.com> > Here is the complete DSL/DSLR > > DSLr: > rule "Your First Rule" > > when > There is a Department > There is at least one Person > - with a valid subOrdinate > - check that name follows pattern "M" > then > >System.out.println("Test Generic Cosntranit done !!!"); > end > > DSL: > [keyword][]check that {conditions}= eval( {conditions} ) > [keyword][]AND = && > [keyword][]OR = || > [when][][Tt]here is an? {entity}= {entity}: {entity}() > [when][][Tt]here is at least one {entity}= exists {entity}: {entity}() > [when][]the {entity:\w+}'s {attr:\w+} = {entity}.get{attr}() > [when][]- with {attr} equal to {value} = {attr} == {value} > [when][]- with a valid {attr} = {attr} != null > > [when][]- with {attr} not equal to {value} = {attr} != {value} > [when][]- eval\( {whatever} \)= eval( {whatever} ) > [when][] {attr} equals {value} = {attr}.equals({value}) > [when][] {attr} is valid = {attr} != null > [when][] {attr} follows pattern {x} = startsWithFunction({attr},{x}) > > Function used in drl is: > function boolean startsWithFunction(String value, String beginning) { > if (value == null) return false; > if (beginning == null) return false; > return value.startsWith(beginning); > } > I am using drools version 5.1.1 > > Thanks & Regards, > -Maverik > > 2011/1/4 Wolfgang Laun <wolfgang.l...@gmail.com> > >> Do you have any comments ("#..." or "//...") between when and then? If so, >> please remove and try again. >> >> If this doesn't fix it, please post completely and exactly >> - the rule from the DSLR >> - the full DSL >> - Drools version. >> >> Thanks >> -W >> >> >> >> >> 2011/1/4 maverik j <maverikj...@gmail.com> >> >>> >>> >>> 2011/1/4 Wolfgang Laun <wolfgang.l...@gmail.com> >>> >>> >>>> >>>> 2011/1/4 maverik j <maverikj...@gmail.com> >>>> >>>> is there any restriction in terms of using custom function in >>>>> condition etc. >>>>> If I add function evaluation to conditions its messing up with dsl. For >>>>> pattern matching if I use custom function defined in drl then its not able >>>>> to parse that properly >>>>> >>>>> [when][] {attr:\S+} follows pattern {pattern:\S+} = >>>>> funcToEvalPattern({attr},( {pattern} ) >>>>> >>>> >>>> Is this exactly what you have in the DSL definition? It's syntactically >>>> incorrect. >>>> >>> >>> >>>> Sorry for that, it is actually >>>> >>> >>> >>>> [when][] {*attr*} follows pattern {pattern} = startsWithFunction( {* >>>> attr*}, {pattern} ) >>>>> >>>>> and is being added as last statement in DSL (for testing purpose I am >>>>> using same dsl as you have shown) >>>>> >>>> >>> >>>> in this case it is getting translated to >>>>> exists(Person:Person(subordinate != null , startsWithFunction( *eval*( >>>>> name, "I" ) ) ) >>>>> where as I was hoping this to be >>>>> exists(Person:Person(subordinate != null , *eval *(startsWithFunction( >>>>> name, "I" ) ) ) >>>>> >>>>> >>>> >>>> I cannot reproduce this. But it may depend on the order of your entries >>>> in you DSL file. >>>> >>>> Actually I tried changing order as well but didnt worked. I have >>> actually defined these common functions in drl and added that to >>> knowledgebase along with these DSL and DSLR. >>> >>> >>> >>>> -W >>>> >>>> >>>> >>>>> Regards, >>>>> -Maverik >>>>> >>>>> On Tue, Jan 4, 2011 at 12:24 PM, maverik j <maverikj...@gmail.com>wrote: >>>>> >>>>>> cool...this was of great help, I will try this out I think it shoudl >>>>>> solve the purpose. >>>>>> >>>>>> Thanks once again, >>>>>> Maverik >>>>>> >>>>>> 2011/1/3 Wolfgang Laun <wolfgang.l...@gmail.com> >>>>>> >>>>>> Try using eval as a last resort. A better (smaller, more robust) DSL >>>>>>> can be designed around facts and their attributes. >>>>>>> >>>>>>> "||" (and "OR") can be used, but setting parentheses in order to get >>>>>>> the priority right is difficult. In constraints, you may have to resort >>>>>>> to >>>>>>> "memberof" or "not memberof". >>>>>>> >>>>>>> Your sample isn't self-contained. But I think that the following DSL >>>>>>> and the DSLR might give you some ideas how to proceed. >>>>>>> >>>>>>> [keyword][]check that {conditions}= eval( {conditions} ) >>>>>>> [keyword][]AND = && >>>>>>> [keyword][]OR = || >>>>>>> >>>>>>> [when][][Tt]here is an? {entity}= {entity}: {entity}() >>>>>>> [when][][Tt]here is at least one {entity}= exists {entity}: >>>>>>> {entity}() >>>>>>> >>>>>>> [when][]the {entity:\w+}'s {attr:\w+} = {entity}.get{attr}() >>>>>>> >>>>>>> [when][]- with a valid {attr} = {attr}: {attr} != null >>>>>>> [when][]- with {attr} not equal to {value} = {attr} != {value} >>>>>>> [when][]- eval\( {whatever} \)=eval( {whatever} ) >>>>>>> >>>>>>> [when][] {attr:\S+} follows pattern {pattern:\S+} = {attr}.matches( >>>>>>> {pattern} ) >>>>>>> [when][] {attr:\S+} not equals? {value:\S+} = ! {attr}.equals( >>>>>>> {value} ) >>>>>>> [when][] {attr:\S+} is valid = {attr} != null >>>>>>> >>>>>>> rule "Rule 5" >>>>>>> when >>>>>>> There is a Department >>>>>>> There is at least one Person >>>>>>> - with name not equal to "xxx" >>>>>>> - with a valid subordinate >>>>>>> - check that the Person's Id is valid AND the Department's Id >>>>>>> follows pattern "I" AND the Department's HeadOfDpt not equal name >>>>>>> then >>>>>>> end >>>>>>> >>>>>>> Notice that "-check that..." must be written as a single line. >>>>>>> >>>>>>> -W >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> 2011/1/3 maverik j <maverikj...@gmail.com> >>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> We are planning to use DSL/DSRL approach with generic DSL template >>>>>>>> like say >>>>>>>> >>>>>>>> [condition][]The {object} has valid {field}={object}({field} != null >>>>>>>> ) >>>>>>>> >>>>>>>> [condition][]there is object {*obj*} that = {*obj*}() >>>>>>>> >>>>>>>> [condition][]- has {*attr*} equal {*val*} = {*attr*} == {*val*} >>>>>>>> >>>>>>>> [condition][]- has valid {*attr*} = {*attr*} != null >>>>>>>> >>>>>>>> [condition][]- and has {*attr*} equal {value}= && {*attr*} == >>>>>>>> {value} >>>>>>>> >>>>>>>> But there are quite few of requirements like to have DSL rules that >>>>>>>> can generate expression as follows: >>>>>>>> exists Employee( >>>>>>>> attribute name not equals "xxx" >>>>>>>> && the attribute subOrdinate is not null >>>>>>>> && eval( >>>>>>>> the attribute $dept.getId() is not null >>>>>>>> && attribute $dept.getId() follows pattern "I" >>>>>>>> && ( ! (the attribute $dept.getHeadOfDpt() equals name) >>>>>>>> ) >>>>>>>> ) >>>>>>>> >>>>>>>> I am not sure if this is possible with DSL. Using '-' operator we >>>>>>>> cannot really add '&&', '||' conditions it by-default expands to ',' >>>>>>>> separated and conditions. And wirtting generic rules with and/or is not >>>>>>>> really dynamic to allow any number of expressions in evaluation. >>>>>>>> >>>>>>>> i am struggling to get this run since long time so any help/thoughts >>>>>>>> on this would be highly appriciable !!! >>>>>>>> >>>>>>>> Thanks & Regards, >>>>>>>> -Maverik >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> rules-users mailing list >>>>>>>> rules-users@lists.jboss.org >>>>>>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> rules-users mailing list >>>>>>> rules-users@lists.jboss.org >>>>>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>>>>> >>>>>>> >>>>>> >>>>> >>>>> _______________________________________________ >>>>> rules-users mailing list >>>>> rules-users@lists.jboss.org >>>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>>> >>>>> >>>> >>>> _______________________________________________ >>>> rules-users mailing list >>>> rules-users@lists.jboss.org >>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>> >>>> >>> >>> _______________________________________________ >>> rules-users mailing list >>> rules-users@lists.jboss.org >>> https://lists.jboss.org/mailman/listinfo/rules-users >>> >>> >> >> _______________________________________________ >> rules-users mailing list >> rules-users@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/rules-users >> >> > > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > >
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users