[rules-users] xslt for converting rule XML from drools 2 to jboss rule 4
Mark Proctor
mproctor at codehaus.org
Fri Feb 1 12:47:25 EST 2008
arina he wrote:
> 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.
Could you update the wiki page with this information? You can upload the
jar and cut and paste your instructions into the wiki page:
http://wiki.jboss.org/wiki/Wiki.jsp?page=Drools2Migration
Once you've done that I'll also do a small blog referencing that page.
>
>
>
> On 12/22/07, *arina he* <arina.he at gmail.com
> <mailto: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.
>
heh, nice to have a happy customer. Drools 5.0 will have some api
changes, but the basic stuff should work with no changes - actually
JSR94 will now have any changes, so this won't impact you, although
ofcourse you'll miss out on all the new power we are adding :) We are
trying to have full backwards compatability with 4.0 DRL and 5.0 DRL
>
>
>
>
> On Dec 19, 2007 12:59 PM, Mark Proctor <mproctor at codehaus.org
> <mailto: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 list rules-users at lists.jboss.org
>> <mailto:rules-users at lists.jboss.org>
>> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
> https://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/9a1e0a74/attachment.html
More information about the rules-users
mailing list