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