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 <[EMAIL PROTECTED]> 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="[EMAIL PROTECTED]" > <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 [EMAIL > PROTECTED]://lists.jboss.org/mailman/listinfo/rules-users > > > > _______________________________________________ > 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