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.
On 12/22/07, arina he <arina.he(a)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.
On Dec 19, 2007 12:59 PM, Mark Proctor <mproctor(a)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@lists.jboss.orghttps://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>