Re: [xsl] Petri net to BPEL model transformation > How to find patterns?

Subject: Re: [xsl] Petri net to BPEL model transformation > How to find patterns?
From: "bryan rasmussen" <rasmussen.bryan@xxxxxxxxx>
Date: Mon, 4 Sep 2006 15:21:20 +0200
The book Professional XSL from Wrox had some transforms for working
with Petri Nets, can't remember exactly what was being done though.

Michael Corning, whose transforms were used, has a homepage here (not
sure about current status of it)
http://authors.aspalliance.com/mcorning/ where some mention is made of
the petri nets stuff.

Cheers,
Bryan

On 9/4/06, stgn@xxxxxxx <stgn@xxxxxxx> wrote:
Hello

How can I find/describe patterns in a Petri net graph with XSLT?

For instance a sequence, a concurrency, AND-split, AND-join, OR-split,
OR-join or a while loop.

Below you see a Petri net model (source model) which I would like to
transform into a BPEL model (target model).

Can you tell me what the corresponding XSLT code would look like?

My problem is to find patterns in a graph representation (Petri net)
and to transform them into a tree representation (BPEL). It might be
that such a transformation is not possible with the Petri net example
given below or that the Petri net XML would need further information
(for example an attribute attached to a transition saying "this is the
start of an AND-split").

I am grateful for any hints. If you need any further information to
solve the problem, please let me know.

Regards
Sagi

--------------------
source model
--------------------
<?xml version="1.0"?>
<petrinet>

        <!-- start of Petri net -->
        <place id="1"></place>
        <transition id="2"></transition>

        <!-- upper flow of concurrency -->
        <place id="10"></place>
        <transition id="11"></transition>
        <place id="12"></place>
        <transition id="13"></transition>
        <place id="14"></place>

        <!-- lower flow of concurrency -->
        <place id="20"></place>
        <transition id="21"></transition>
        <place id="22"></place>

        <!-- end of Petri net -->
        <transition id="3"></transition>
        <place id="4"></place>

        <!-- arcs connecting places and transitions -->
        <arc>
                <from>1</from>
                <to>2</to>
        </arc>
        <!-- next 2 arcs define an AND-split -->
        <arc>
                <from>2</from>
                <to>10</to>
        </arc>
        <arc>
                <from>2</from>
                <to>20</to>
        </arc>
        <!-- upper flow of concurrency -->
        <arc>
                <from>10</from>
                <to>11</to>
        </arc>
        <arc>
                <from>11</from>
                <to>12</to>
        </arc>
        <arc>
                <from>12</from>
                <to>13</to>
        </arc>
        <arc>
                <from>13</from>
                <to>14</to>
        </arc>
        <!-- lower flow of concurrency -->
        <arc>
                <from>20</from>
                <to>21</to>
        </arc>
        <arc>
                <from>21</from>
                <to>22</to>
        </arc>

        <!-- next 2 arcs define an AND-join -->
        <arc>
                <from>14</from>
                <to>3</to>
        </arc>
        <arc>
                <from>22</from>
                <to>3</to>
        </arc>
        <arc>
                <from>3</from>
                <to>4</to>
        </arc>
</petrinet>



--------------------
target model
--------------------
<?xml version="1.0"?>

<process>
        <sequence>
                <invoke name="2"/>
                <flow>
                        <!-- upper flow of concurrency -->
                        <sequence>
                                <invoke name="11"/>
                                <invoke name="13"/>
                        </sequence>
                        <!-- lower flow of concurrency -->
                        <sequence>
                                <invoke name="21"/>
                        </sequence>
                </flow>
                <invoke name="3"/>
        </sequence>
</process>

Current Thread