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

arina he arina.he at gmail.com
Fri Feb 1 09:35:44 EST 2008


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.



On 12/22/07, arina he <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.
>
>
> On Dec 19, 2007 12:59 PM, Mark Proctor <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 listrules-users at lists.jboss.orghttps://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/b42dd1ac/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Converter.zip
Type: application/zip
Size: 63805 bytes
Desc: not available
Url : http://lists.jboss.org/pipermail/rules-users/attachments/20080201/b42dd1ac/attachment.zip 


More information about the rules-users mailing list