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.
arina he wrote:did you read this?I was scraping internet for one xslt when I was converting drools 2 to jboss rule 4, but couldn't find one,
http://wiki.jboss.org/wiki/Wiki.jsp?page=Drools2Migration
How complete is it? Do you have any unit tests? If so we should add this as a contrib project for other users.so I rolled up sleeves and created one by myself, put up here in case anyone need it too.
Keep up the good work :)welcome comments.Arina.
<?
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