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

arina he arina.he at gmail.com
Sat Dec 22 00:15:53 EST 2007


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/20071222/1b5bcb85/attachment.html 


More information about the rules-users mailing list