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@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@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