RV: [rules-users] Checking an xml field

Scott Reed sreed at avacoda.com
Tue Oct 7 12:12:13 EDT 2008


Zaloa,
  I am not the right person to be answering your questions since I would 
not have expected these rules to compile. If they compile then what you 
are doing must be at least syntactically correct, but I won't be much 
help since you are using syntax I am not familiar with.
  I don't understand how you are able to reference fields of the objects 
with all upper case letters when the field names are all lower case. 
Does JAXP generate get methods for those fields? If so, perhaps those 
methods use all uppercase for the field names?
  I write rules with simple condition expressions that work with a flat 
object model. I didn't even know DRL syntax allowed rules that 
referenced sub-fields or array elements in the condition part (i.e. 
GEO[0].POSITION.LOC_ID) unless we used an eval expression.
  If I were doing what you are trying to do, I'd use an eval expression 
(which can handle any java boolean expression):

     When

                        OASISTSO10($e: EVENT)
                        eval($e.GEO[0].POSITION.LOCID.equals( "40005"))
            Then
                        Action

Otaduy del Paso, Zaloa [10/7/2008 11:51 AM] wrote:
>
> Scott,
>
>  
>
> The rules I have now, compile. The generated jaxb classes I have 
> regarding to what I'm trying to do are:
>
>  
>
> *EVENT.java*
>
>  
>
> *public* *class* EVENT {
>
>  
>
>     @XmlElement(name = "EVENT_ID", required = *true*)
>
>     *protected* String eventid;
>
>     @XmlElementRefs({
>
>         @XmlElementRef(name = "NODE_ID", namespace = 
> "http://oasis-fp6.org/schemas/TSO/1_0", type = JAXBElement.*class*),
>
>         @XmlElementRef(name = "OTHER_EVENT_ID", namespace = 
> "http://oasis-fp6.org/schemas/TSO/1_0", type = JAXBElement.*class*)
>
>     })
>
>     @XmlElement(name = "GEO")
>
>     *protected* List<EVENT.GEO> geo;
>
>     @XmlElement(name = "PREDICTED_CASUALTIES")
>
>     *protected* List<EVENT.PREDICTEDCASUALTIES> predictedcasualties;
>
>     @XmlElement(name = "TREND")
>
>     *protected* String trend;
>
> ........
>
>  
>
>  
>
>  
>
> *public* *static* *class* GEO {
>
>  
>
>         @XmlElement(name = "DESCRIPTION", required = *true*)
>
>         *protected* String description;
>
>         @XmlElement(name = "POSITION", required = *true*)
>
>         *protected* POSITION position;
>
>         @XmlElement(name = "WEATHER")
>
>         *protected* List<String> weather;
>
>         @XmlElement(name = "TEXT")
>
>         *protected* String text;
>
> }
>
>  
>
> *POSITION.java*
>
>  
>
> *public* *class* POSITION {
>
>  
>
>     @XmlElement(name = "LOC_ID")
>
>     *protected* String locid;
>
>     @XmlElement(name = "NAME")
>
>     *protected* String name;
>
>     @XmlElement(name = "COORD")
>
>     *protected* POSITION.COORD coord;
>
> .......
>
>  
>
> *public* *static* *class* COORD {
>
>  
>
>         @XmlElementRefs({
>
>             @XmlElementRef(name = "LON", namespace = 
> "http://oasis-fp6.org/schemas/TSO/1_0", type = JAXBElement.*class*),
>
>             @XmlElementRef(name = "HEIGHT", namespace = 
> "http://oasis-fp6.org/schemas/TSO/1_0", type = JAXBElement.*class*),
>
>             @XmlElementRef(name = "LAT", namespace = 
> "http://oasis-fp6.org/schemas/TSO/1_0", type = JAXBElement.*class*)
>
>         })
>
> }
>
>  
>
> I hope this is enough to understand what I'm working with. Sorry if I 
> didn't explain myself correctly.
>
>  
>
> Thanks in advance,
>
> *Zaloa Otaduy del Paso*
>
> ------------------------------------------------------------------------
>
> *De:* rules-users-bounces at lists.jboss.org 
> [mailto:rules-users-bounces at lists.jboss.org] *En nombre de *Scott Reed
> *Enviado el:* martes, 07 de octubre de 2008 17:39
> *Para:* Rules Users List
> *Asunto:* Re: RV: [rules-users] Checking an xml field
>
>  
>
> Zaloa,
> You haven't answered my question as what the problem is. Do these 
> rules compile?
> It seems to me that you have misunderstood how the condition part of 
> the rules work.
> I agree with David that it would help for you to study the manual some 
> more and to work through some of the tutorials.
> Since this is a Drools forum, there are probably not a lot of folks 
> who understand exactly how JAXP translates the XML into beans. You are 
> more likely to get help here if you include the relevant portions (get 
> methods) of the API output by JAXP.
>
> Otaduy del Paso, Zaloa [10/7/2008 11:22 AM] wrote:
>
> Hi David,
>
>  
>
> Thanks for your helpful response. The problem was that the element GEO 
> can appear 0 or many times so what I needed to write was this
>
>  
>
> when
>
>                         OASISTSO10($e: EVENT)
>
>                         OASISTSO10($e.*GEO[0].*POSITION.LOCID == "40005")
>
>             Then
>
>                         Action
>
>  
>
> instead of
>
>             when
>
>                         OASISTSO10($e: EVENT)
>
>                         OASISTSO10($e.GEO.POSITION.LOCID == "40005")
>
>             Then
>
>                         Action
>
>  
>
> Now I'm facing another problem. I need to check if the element GEO 
> exists before checking the POSITION, otherwise it throws an outofbound 
> exception.
>
> I tried with:
>
>  
>
>  when
>
>                         OASISTSO10($e: EVENT)
>
>                         EVENT($g: GEO)
>
>                         OASISTSO10($e.GEO[0].POSITION.LOCID matches  
> "40.*")
>
>  
>
> But it doesn't work. Any hints on this?
>
>  
>
> Thanks in advance,
>
> *Zaloa Otaduy del Paso*
>
> ------------------------------------------------------------------------
>
> *De:* rules-users-bounces at lists.jboss.org 
> <mailto:rules-users-bounces at lists.jboss.org> 
> [mailto:rules-users-bounces at lists.jboss.org] *En nombre de *David Sinclair
> *Enviado el:* martes, 07 de octubre de 2008 15:58
> *Para:* Rules Users List
> *Asunto:* Re: RV: [rules-users] Checking an xml field
>
>  
>
> Read the manual man. Your rules don't make any sense
>
> http://downloads.jboss.com/drools/docs/4.0.7.19894.GA/html_single/
>
>
> On Tue, Oct 7, 2008 at 9:49 AM, Scott Reed <sreed at avacoda.com 
> <mailto:sreed at avacoda.com>> wrote:
>
> What is the problem you are seeing? Do the rules compile ok?
>
> Otaduy del Paso, Zaloa [10/6/2008 12:08 PM] wrote:
>
> Does anybody know the answer to my question? I'm not able to solve 
> this issue and don't find any clarifying tutorial either....
>
>  
>
> Hi,
>
>  
>
> I'm new in drools and I'm having some problems accessing an xml field. 
> I'm using drools with jaxb to treat xml files that follow an specific 
> xsd. I have the following xml (this is just a piece of the xml):
>
>  
>
> <OASIS_TSO_1_0>
>
>       <EVENT>
>
> <EVENT_ID>EVENT_ID_03/10/2008 10:22:36</EVENT_ID>
>
> <NODE_ID>00</NODE_ID>
>
> <OTHER_EVENT_ID>Incidente UME</OTHER_EVENT_ID>
>
> <EVENT_TYPE>POL</EVENT_TYPE>
>
> <SOURCE>HUMDED</SOURCE>
>
> <SEVERITY>EXTREM</SEVERITY>
>
> <CERTAINTY>88</CERTAINTY>
>
> <DECL_DATIME>2008-10-03T10:20:47.0000000+02:00</DECL_DATIME>
>
> <GEO>
>
> <DESCRIPTION/>
>
> <POSITION>
>
> <LOC_ID>14021</LOC_ID>
>
> <COORD>
>
> <LAT>37.9811636567434</LAT>
>
> <LON>-4.85417587343286</LON>
>
> <HEIGHT>0</HEIGHT>
>
> </COORD>
>
> </POSITION>
>
> </GEO>
>
>      </EVENT>
>
> </OASIS_TSO_1_0>
>
>  
>
>  
>
> I already have a couple of rules working, but they are simple rules, 
> like this one:
>
>  
>
> rule "Rule1"
>
>     salience 10
>
> when
>
>                         OASISTSO10($e: EVENT)
>
> OASISTSO10($e.SEVERITY == "EXTREM") or OASISTSO10($e.SEVERITY == "SEVERE")
>
>             then
>
>                         action
>
>  
>
> The problem appears when I have to check the LOC_ID field and I don't 
> know how to access to it. I have tried several things but none of them 
> work
>
>  
>
> 1.
>
>             when
>
> OASISTSO10($e: EVENT)
>
>                         OASISTSO10($e.GEO.POSITION.LOCID == "40005")
>
>             then
>
> 2.
>
>             when
>
> OASISTSO10($e: EVENT)
>
> OASISTSO10($g: $e.GEO)
>
>                         OASISTSO10($p: $g.POSITION)
>
>                         OASISTSO10($p.LOCID  == "40005")
>
>             Then
>
>  
>
> I have also tried with ($e.GEO.POSITION.DESCRIPTION, just in case the 
> "_" character was the problem. But the same results... I have searched 
> also for examples with xmls but I haven't had luck.
>
> Any help would be appreciated. Thanks in advance,
>
>  
>
> Zaloa
>
>  
>
>  
>  
>
>
> ------------------------------------------------------------------------
>
>
>  
>  
>  
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>  
>
>  
>
>
> ------------------------------------------------------------------------
>
>
>  
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/rules-users
>   
> ------------------------------------------------------------------------
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20081007/e27c5d2d/attachment.html 


More information about the rules-users mailing list