[rules-users] xslt for converting rule XML from drools 2 to jboss rule 4

Mark Proctor mproctor at codehaus.org
Fri Feb 1 12:47:25 EST 2008


arina he wrote:
> Hi,
>  
> I did some tailoring, the attached zip files contains three parts:
>  
>   1,One readme file showing the structure and how to run;
>   2,The compiled class jar RuleConverter.jar which will convert given 
> file to new one
>   3,The eclipse project jar ConvertProject for any one might 
> be interested.
>  
> welcome comments.
Could you update the wiki page with this information? You can upload the 
jar and cut and paste your instructions into the wiki page:
http://wiki.jboss.org/wiki/Wiki.jsp?page=Drools2Migration

Once you've done that I'll also do a small blog referencing that page.
>  
>
>  
> On 12/22/07, *arina he* <arina.he at gmail.com 
> <mailto:arina.he at gmail.com>> wrote:
>
>     Hi Mark,
>
>     I have a simple app converting around 30 drl files with about 230
>     rules using this xslt, I was able to run all those rules without
>     any manually modification after covertion which was my goal -:),
>     lazy me.  this xslt should cover most cases.
>
>     it converts two major parts: functions to package, rule to rule,
>     and  as well as some minor tags such as import. out of those
>     "functions" part is a little hard, but I managed do it though xslt.
>
>     since my rules are not very complex ones, I'm sure there are some
>     case I don't cover. so  far I know two  issues:
>       1, the attribute for rules is not covered since I don't local
>     attribute for individual rule, we use global  vars,
>       2, need put xml schema into header.
>
>     should be more, and that's why I put up here so that people can
>     give comments and suggestion to make its coverage wider and more
>     useful.
>
>     BTW, this is only for  "XML-to-XML" format, not drl format.
>
>     one thing I was impressed by the Jboss Rule 4 is the backward
>     compatibility. we were coded against JSR94 interface, after
>     upgrade from drools 2 to 4, I only did a minor change on global
>     variable. it works perfectly. good work Mark.
>
heh, nice to have a happy customer. Drools 5.0 will have some api 
changes, but the basic stuff should work with no changes - actually 
JSR94 will now have any changes, so this won't impact you, although 
ofcourse you'll miss out on all the new power we are adding :) We are 
trying to have full backwards compatability with 4.0 DRL and 5.0 DRL
>
>
>
>
>     On Dec 19, 2007 12:59 PM, Mark Proctor <mproctor at codehaus.org
>     <mailto:mproctor at codehaus.org>> wrote:
>
>         arina he wrote:
>>         I was scraping internet for one xslt when I was converting
>>         drools 2 to jboss rule 4, but couldn't find one,
>         did you read this?
>         http://wiki.jboss.org/wiki/Wiki.jsp?page=Drools2Migration
>>          
>>         so I rolled up sleeves and created one by myself, put up here
>>         in case anyone need it too.
>         How complete is it? Do you have any unit tests? If so we
>         should add this as a contrib project for other users.
>>          
>>         welcome comments.
>>          
>>         Arina.
>         Keep up the good work :)
>>          
>>          
>>
>>         <?
>>
>>         xml version="1.0" encoding="UTF-8"?>
>>
>>         <
>>
>>         xsl:stylesheet version="1.0"
>>         xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs
>>         ="http://www.w3.org/2001/XMLSchema" xmlns:fn=
>>         "http://www.w3.org/2005/xpath-functions" xmlns:java=
>>         "http://drools.org/semantics/java" > <xsl:output method="xml"
>>         version="1.0" indent= "yes" omit-xml-declaration="yes"/>
>>         <xsl:template match="/" > <package name="com.sample ">
>>         <global identifier="doc" type="Document" />
>>         <xsl:apply-templates /> </ package> </xsl:template>
>>         <xsl:template name="javaimport" match="java:import"> <import
>>         name="{.}" /> </xsl:template> <xsl:template
>>         name="javaFunction" match="java:functions"> <xsl:if
>>         test="contains(.,'public')" > <xsl:call-template name=
>>         "separate"> <xsl:with-param name="str"
>>         select="substring-after(.,'public ')" /> </xsl:call-template>
>>         </xsl:if> </xsl:template> <xsl:template name="separate" >
>>         <xsl:param name="str" /> <xsl:choose> <xsl:when
>>         test="contains($str,'public')" > <xsl:call-template name=
>>         "drlFn"> <xsl:with-param name="fnBody"
>>         select="substring-before($str,'public')" />
>>         </xsl:call-template> <xsl:call-template name= "separate">
>>         <xsl:with-param name="str"
>>         select="substring-after($str,'public ')" />
>>         </xsl:call-template> </xsl:when> <xsl:otherwise>
>>         <xsl:call-template name= "drlFn"> <xsl:with-param
>>         name="fnBody" select="$str" /> </xsl:call-template>
>>         </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template
>>         name="drlFn" > <xsl:param name="fnBody" /> <function
>>         name="{substring-before(substring-after($fnBody,' '),'(')}"
>>         return-type="{substring-before($fnBody,' ')}"> <xsl:if
>>         test="normalize-space(substring-before(substring-after($fnBody,'('
>>         ),')' ))!=''" > <xsl:call-template name= "params">
>>         <xsl:with-param name="paramStr"
>>         select="normalize-space(substring-before(substring-after($fnBody,'('
>>         ),')' ))" /> </xsl:call-template> </xsl:if> <body>
>>         <xsl:call-template name= "bdy"> <xsl:with-param name="bdyStr"
>>         select="substring-after($fnBody,'{' )" />
>>         </xsl:call-template> </body> </function> </xsl:template>
>>         <xsl:template name="bdy" > <xsl:param name="bdyStr" />
>>         <xsl:value-of select="substring-before($bdyStr,'}')" />
>>         <xsl:if test="contains(substring-after($bdyStr,'}'),'}')" >
>>
>>         }
>>
>>         <xsl:call-template name= "bdy"> <xsl:with-param name="bdyStr"
>>         select="substring-after($bdyStr,'}')" /> </xsl:call-template>
>>         </xsl:if> </xsl:template> <xsl:template name="params" >
>>         <xsl:param name="paramStr" /> <xsl:choose> <xsl:when
>>         test="contains($paramStr,',')" > <xsl:call-template name=
>>         "buildIdentifier"> <xsl:with-param name="tpy"
>>         select="substring-before($paramStr,' ')" /> <xsl:with-param
>>         name="idt"
>>         select="substring-after(substring-before($paramStr,','),' ')"
>>         /> </xsl:call-template> <xsl:call-template name= "params">
>>         <xsl:with-param name="paramStr"
>>         select="normalize-space(substring-after($paramStr,','))"/>
>>         </xsl:call-template> </xsl:when> <xsl:otherwise>
>>         <xsl:call-template name= "buildIdentifier"> <xsl:with-param
>>         name="tpy" select="substring-before($paramStr,' ')" />
>>         <xsl:with-param name="idt"
>>         select="substring-after($paramStr,' ')" />
>>         </xsl:call-template> </xsl:otherwise> </xsl:choose>
>>         </xsl:template> <xsl:template name="buildIdentifier" >
>>         <xsl:param name="tpy" /> <xsl:param name="idt" /> <parameter
>>         identifier="{$idt}" type="{$tpy}" /> </xsl:template>
>>         <xsl:template name="rules" match="rule" > <rule
>>         name="{@name}" > <xsl:if test="java:condition" > <lhs>
>>         <and-constraint-connective> <xsl:for-each
>>         select="java:condition" > <eval><xsl:value-of
>>         select="normalize-space(.)" disable-output-escaping="no"
>>         /></eval> </xsl:for-each> </and-constraint-connective> </lhs>
>>         </ xsl:if> <xsl:for-each select="java:consequence" > <rhs>
>>         <xsl:value-of select="." /> </rhs> </xsl:for-each> </rule>
>>         </xsl:template>
>>
>>         </
>>
>>         xsl:stylesheet>
>>         ------------------------------------------------------------------------
>>         _______________________________________________ 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/20080201/9a1e0a74/attachment.html 


More information about the rules-users mailing list