<rdf:RDF
    xmlns:s='http://snipsnap.org/rdf/snip-schema#'
    xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
    xml:base='http://www.gridworkflow.org/snips/gridworkflow/rdf'>
    <s:Snip rdf:ID='GWorkflowDL'
         s:name='GWorkflowDL'
         s:cUser='bassheide'
         s:oUser='bassheide'
         s:mUser='bassheide'>
        <s:content>1 Grid Workflow Description Language&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;-----------&#xD;&#xA;__Up to date information about the Grid Workflow Description Language is available at the {link:GWorkflowDL software development site|http://www.gridworkflow.org/kwfgrid/gworkflowdl/docs/}__&#xD;&#xA;&#xD;&#xA;Current GWorkflowDL examples are available at {link:myExperiment.org|http://www.myexperiment.org/workflows/search?query=GWorkflowDL} &#xD;&#xA;-----------&#xD;&#xA;&#xD;&#xA;The Grid Workflow Description Language ([GWorkflowDL]) is being developed in the context of the [K-Wf Grid] and the [CoreGRID] projects as an extension of the existing Grid Job Definition Language ([GJobDL]), an XML-based language that makes use of the formalism of [Petri net]s in order to describe the dynamic behaviour of distributed Grid jobs. The GJobDL was developed for the [Fraunhofer Resource Grid]. &#xD;&#xA;&#xD;&#xA;The advanced GWorkflowDL has the following features: &#xD;&#xA;1. In principle, the rules of coloured [Petri net]s apply \[Jensen:94\].&#xD;&#xA;1. Definition of transitions: may have reference to an [OWL] description of \{operation, WSClassOperation, list of WSOperations, WSOperation\}.&#xD;&#xA;1. A transition may also refer to a whole sub net -&gt; hierarchical approach.&#xD;&#xA;1. Edges link transitions to input places and output places. Edge expressions are used to relate input places to a specific parameter of a Web Service operation.&#xD;&#xA;1. Definition of places: may have reference to an OWL description of data or parameters for type checking.&#xD;&#xA;1. Transitions may be annotated with conditions. Conditions could be expressed by XPath queries, by Web Service operations or other (user-defined) modules that return a Boolean value.&#xD;&#xA;1. Tokens are placed on places and contain high-level control information (e.g., true or false) or data related to the input and output parameters of the Web Service operations. Tokens store the state of the workflow.&#xD;&#xA;&#xD;&#xA;One implementation of a [Workflow Engine] for the [GWorkflowDL] is the so-called [GWES] (Grid Workflow Execution Service).&#xD;&#xA;&#xD;&#xA;1.1.1 GWorkflowDL XML Schema&#xD;&#xA;&#xD;&#xA;Figure \[GWorkflowDL0.4\] represents the XML Schema of the GWorkflowDL version 0.4. The root element is called ~~&lt;workflow&gt;~~, which contains the optional element ~~&lt;description&gt;~~ with a human-readable description of the workflow, and several occurrences of the elements ~~&lt;transition&gt;~~ and ~~&lt;place&gt;~~ that define the Petri net of the workflow. The element ~~&lt;transition&gt;~~ contains a child element ~~&lt;KWfGridExtension&gt;~~ which represents the special K-Wf Grid mapping of transitions onto several levels of abstraction regarding Web Service operations. The child elements ~~&lt;inputPlace&gt;~~ and ~~&lt;outputPlace&gt;~~ define the edges of the net.&#xD;&#xA;&#xD;&#xA;{image:gworkflowdl_0_4.gif}&#xD;&#xA;&#xD;&#xA;~~__Figure \[GWorkflowDL0.4\]:__ Graphical representation of the XML Schema of the GWorkflowDL version 0.4. Legend of the symbols: ?=0..1; *=0,1,2,...; +=1,2,3,...~~&#xD;&#xA;&#xD;&#xA;The following XML code shows the complete XML Schema of the GWorkflowDL version 0.4. &#xD;&#xA;&#xD;&#xA;{code:XML}&#xD;&#xA;&lt;?xml version = &quot;1.0&quot; encoding = &quot;UTF-8&quot;?&gt;&#xD;&#xA;&lt;xs:schema xmlns:xs = &quot;http://www.w3.org/2001/XMLSchema&quot;&gt;&#xD;&#xA; &lt;xs:annotation&gt;&#xD;&#xA;  &lt;xs:documentation&gt;&#xD;&#xA;   Copyright K-Wf Grid project team (http://www.kwfgrid.net/)  2005 &#xD;&#xA;   Written by Andreas Hoheisel, Hans-Werner Pohl, and Tilman Linden&#xD;&#xA;   Fraunhofer FIRST (http://www.first.fraunhofer.de/)&#xD;&#xA;  &lt;/xs:documentation&gt;&#xD;&#xA; &lt;/xs:annotation&gt;&#xD;&#xA; &lt;xs:element name = &quot;workflow&quot;&gt;&#xD;&#xA;  &lt;xs:complexType&gt;&#xD;&#xA;   &lt;xs:sequence&gt;&#xD;&#xA;    &lt;xs:element ref = &quot;description&quot; minOccurs = &quot;0&quot;/&gt;&#xD;&#xA;    &lt;xs:choice minOccurs = &quot;0&quot; maxOccurs = &quot;unbounded&quot;&gt;&#xD;&#xA;     &lt;xs:element name = &quot;transition&quot;&gt;&#xD;&#xA;      &lt;xs:complexType&gt;&#xD;&#xA;       &lt;xs:sequence&gt;&#xD;&#xA;        &lt;xs:element ref = &quot;description&quot; minOccurs = &quot;0&quot;/&gt;&#xD;&#xA;        &lt;xs:element name = &quot;inputPlace&quot; type = &quot;placeRef&quot; maxOccurs = &quot;unbounded&quot;/&gt;&#xD;&#xA;        &lt;xs:element name = &quot;outputPlace&quot; type = &quot;placeRef&quot; maxOccurs = &quot;unbounded&quot;/&gt;&#xD;&#xA;        &lt;xs:element name = &quot;KWfGridExtension&quot; minOccurs = &quot;0&quot;&gt;&#xD;&#xA;         &lt;xs:complexType&gt;&#xD;&#xA;          &lt;xs:sequence&gt;&#xD;&#xA;           &lt;xs:element name = &quot;condition&quot; type = &quot;xs:string&quot; minOccurs = &quot;0&quot; maxOccurs = &quot;unbounded&quot;/&gt;&#xD;&#xA;           &lt;xs:element name = &quot;operation&quot; minOccurs = &quot;0&quot;&gt;&#xD;&#xA;            &lt;xs:complexType&gt;&#xD;&#xA;             &lt;xs:sequence&gt;&#xD;&#xA;              &lt;xs:element name = &quot;WSClassOperation&quot; minOccurs = &quot;0&quot;&gt;&#xD;&#xA;               &lt;xs:complexType&gt;&#xD;&#xA;                &lt;xs:sequence&gt;&#xD;&#xA;                 &lt;xs:element name = &quot;WSOperation&quot; minOccurs = &quot;0&quot; maxOccurs = &quot;unbounded&quot;&gt;&#xD;&#xA;                  &lt;xs:complexType&gt;&#xD;&#xA;                   &lt;xs:attribute name = &quot;selected&quot; default = &quot;false&quot; type = &quot;xs:boolean&quot;/&gt;&#xD;&#xA;                   &lt;xs:attribute name = &quot;name&quot; type = &quot;xs:string&quot;/&gt;&#xD;&#xA;                   &lt;xs:attribute name = &quot;owl&quot; type = &quot;xs:string&quot;/&gt;&#xD;&#xA;                  &lt;/xs:complexType&gt;&#xD;&#xA;                 &lt;/xs:element&gt;&#xD;&#xA;                &lt;/xs:sequence&gt;&#xD;&#xA;                &lt;xs:attribute name = &quot;name&quot; type = &quot;xs:string&quot;/&gt;&#xD;&#xA;                &lt;xs:attribute name = &quot;owl&quot; type = &quot;xs:string&quot;/&gt;&#xD;&#xA;               &lt;/xs:complexType&gt;&#xD;&#xA;              &lt;/xs:element&gt;&#xD;&#xA;             &lt;/xs:sequence&gt;&#xD;&#xA;             &lt;xs:attribute name = &quot;name&quot; type = &quot;xs:string&quot;/&gt;&#xD;&#xA;             &lt;xs:attribute name = &quot;owl&quot; type = &quot;xs:string&quot;/&gt;&#xD;&#xA;            &lt;/xs:complexType&gt;&#xD;&#xA;           &lt;/xs:element&gt;&#xD;&#xA;          &lt;/xs:sequence&gt;&#xD;&#xA;         &lt;/xs:complexType&gt;&#xD;&#xA;        &lt;/xs:element&gt;&#xD;&#xA;       &lt;/xs:sequence&gt;&#xD;&#xA;       &lt;xs:attribute name = &quot;ID&quot; use = &quot;required&quot; type = &quot;xs:ID&quot;/&gt;&#xD;&#xA;      &lt;/xs:complexType&gt;&#xD;&#xA;     &lt;/xs:element&gt;&#xD;&#xA;     &lt;xs:element name = &quot;place&quot;&gt;&#xD;&#xA;      &lt;xs:complexType&gt;&#xD;&#xA;       &lt;xs:sequence&gt;&#xD;&#xA;        &lt;xs:element ref = &quot;description&quot; minOccurs = &quot;0&quot;/&gt;&#xD;&#xA;        &lt;xs:element name = &quot;token&quot; minOccurs = &quot;0&quot; maxOccurs = &quot;unbounded&quot;/&gt;&#xD;&#xA;       &lt;/xs:sequence&gt;&#xD;&#xA;       &lt;xs:attribute name = &quot;ID&quot; use = &quot;required&quot; type = &quot;xs:ID&quot;/&gt;&#xD;&#xA;      &lt;/xs:complexType&gt;&#xD;&#xA;     &lt;/xs:element&gt;&#xD;&#xA;    &lt;/xs:choice&gt;&#xD;&#xA;   &lt;/xs:sequence&gt;&#xD;&#xA;  &lt;/xs:complexType&gt;&#xD;&#xA; &lt;/xs:element&gt;&#xD;&#xA; &lt;xs:complexType name = &quot;placeRef&quot;&gt;&#xD;&#xA;  &lt;xs:attribute name = &quot;placeID&quot; use = &quot;required&quot; type = &quot;xs:string&quot;/&gt;&#xD;&#xA;  &lt;xs:attribute name = &quot;edgeExpression&quot; type = &quot;xs:string&quot;/&gt;&#xD;&#xA; &lt;/xs:complexType&gt;&#xD;&#xA; &lt;xs:element name = &quot;description&quot; type = &quot;xs:string&quot;/&gt;&#xD;&#xA;&lt;/xs:schema&gt;&#xD;&#xA;{code}&#xD;&#xA;&#xD;&#xA;1.1.1 Example&#xD;&#xA;&#xD;&#xA;Figure \[PetriNet\] shows the graphical representation of a Petri net-based workflow description that contains two operations (weatherModel, and visualisation). The data that is available is represented by the token on the place &quot;begin&quot;. The following code snippet shows the corresponding XML description of this workflow. The first transition ~~weatherModel~~ has been mapped onto a concrete Web Service operation while the second transition ~~visualisation~~ is still on an abstract level.&#xD;&#xA;&#xD;&#xA;{image:PetriNetWeather_small.jpg}&#xD;&#xA;&#xD;&#xA;~~__Figure \[PetriNet\].__ The graphical representation of a simple, Petri-net-based workflow description.~~&#xD;&#xA;&#xD;&#xA;{code:XML}&#xD;&#xA;&lt;?xml version = &quot;1.0&quot; encoding = &quot;ISO-8859-1&quot;?&gt;&#xD;&#xA;&lt;workflow xmlns:xsi = &quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:noNamespaceSchemaLocation = &quot;http://www.gridworkflow.org/fhrg/gworkflowdl_0_4.xsd&quot;&gt;&#xD;&#xA; &lt;description&gt;example workflow  involving a weather model and a visualisation of the output data&lt;/description&gt;&#xD;&#xA; &lt;place ID = &quot;begin&quot;&gt;&#xD;&#xA;  &lt;token&gt;gridftp://fhrg.first.fraunhofer.de/data/mm5input.dat&lt;/token&gt;&#xD;&#xA; &lt;/place&gt;&#xD;&#xA; &lt;place ID = &quot;end&quot;/&gt;&#xD;&#xA; &lt;!-- transition related to a specific web service operation --&gt;&#xD;&#xA; &lt;transition ID = &quot;weatherModel&quot;&gt;&#xD;&#xA;  &lt;description&gt;weather model&lt;/description&gt;&#xD;&#xA;  &lt;inputPlace placeID = &quot;begin&quot; edgeExpression = &quot;input&quot;/&gt;&#xD;&#xA;  &lt;outputPlace placeID = &quot;weatherModelOutput&quot; edgeExpression = &quot;output&quot;/&gt;&#xD;&#xA;  &lt;KWfGridExtension&gt;&#xD;&#xA;   &lt;operation name = &quot;weatherModel&quot; owl = &quot;weatherModel.xml&quot;&gt;&#xD;&#xA;    &lt;WSClassOperation name = &quot;MM5&quot; owl = &quot;mm5.xml&quot;&gt;&#xD;&#xA;     &lt;WSOperation name = &quot;mm5@first&quot; owl = &quot;http://fhrg.first.fraunhofer.de/ws/mm5/calc&quot;/&gt;&#xD;&#xA;     &lt;WSOperation name = &quot;mm5@cyfronet&quot; owl = &quot;http://agh.edu.pl/ws/mm5/calc&quot;/&gt;&#xD;&#xA;     &lt;WSOperation name = &quot;mm5@iisas&quot; owl = &quot;http://savba.sk/ws/mm5/calc&quot; selected = &quot;true&quot;/&gt;&#xD;&#xA;    &lt;/WSClassOperation&gt;&#xD;&#xA;   &lt;/operation&gt;&#xD;&#xA;  &lt;/KWfGridExtension&gt;&#xD;&#xA; &lt;/transition&gt;&#xD;&#xA; &lt;place ID = &quot;weatherModelOutput&quot;/&gt;&#xD;&#xA; &lt;!-- transition related to an abstract operation that is not defined yet --&gt;&#xD;&#xA; &lt;transition ID = &quot;visualisation&quot;&gt;&#xD;&#xA;  &lt;description&gt;Visualisation of weather data&lt;/description&gt;&#xD;&#xA;  &lt;inputPlace placeID = &quot;weatherModelOutput&quot; edgeExpression = &quot;input&quot;/&gt;&#xD;&#xA;  &lt;outputPlace placeID = &quot;end&quot; edgeExpression = &quot;output&quot;/&gt;&#xD;&#xA;  &lt;KWfGridExtension&gt;&#xD;&#xA;   &lt;operation name = &quot;weatherVisualisation&quot; owl = &quot;weatherVisualisation.xml&quot;/&gt;&#xD;&#xA;  &lt;/KWfGridExtension&gt;&#xD;&#xA; &lt;/transition&gt;&#xD;&#xA;&lt;/workflow&gt;&#xD;&#xA;{code}</s:content>
        <s:mTime>2008-12-05 14:27:45.315</s:mTime>
        <s:cTime>2005-05-31 17:45:10.74</s:cTime>
        <s:comments
             rdf:type='http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag'/>
        <s:snipLinks>
            <rdf:Bag>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Workflow Description Languages'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#K-Wf Grid'/>
                <rdf:li rdf:resource='#GWES'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Workflow Composition Tools'/>
                <rdf:li rdf:resource='#snipsnap-search'/>
                <rdf:li rdf:resource='#snipsnap-notfound'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Workflow Description Languages/'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Petri net'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Grid Workflow'/>
                <rdf:li rdf:resource='#SAWE'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Workflow Engines'/>
                <rdf:li rdf:resource='#GJobDL'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Workflow Engine'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Workflow+Description+Languages'/>
                <rdf:li rdf:resource='#Triana'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Hot Topics'/>
                <rdf:li rdf:resource='#j.reichwald'/>
                <rdf:li rdf:resource='#XScufl'/>
                <rdf:li rdf:resource='#Gridbus'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Petri Net'/>
                <rdf:li rdf:resource='#CoreGRID'/>
                <rdf:li rdf:resource='#DAGMan'/>
                <rdf:li rdf:resource='#snipsnap-index'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Glossary/GWorkflowDL'/>
                <rdf:li rdf:resource='#CppWfMS'/>
                <rdf:li rdf:resource='#EnterpriseGrids'/>
                <rdf:li rdf:resource='#gridbus'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Fraunhofer Resource Grid'/>
                <rdf:li rdf:resource='#WfMS'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Glossary/Task Migration'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Grid Job Handler'/>
                <rdf:li rdf:resource='#Kepler'/>
                <rdf:li rdf:resource='#GRMS'/>
                <rdf:li rdf:resource='#Projects'/>
                <rdf:li rdf:resource='#Karajan'/>
                <rdf:li rdf:resource='#GridLab'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#'/>
                <rdf:li rdf:resource='#OWL-S'/>
                <rdf:li rdf:resource='#WSDL'/>
                <rdf:li rdf:resource='#Events'/>
                <rdf:li rdf:resource='#GEODISE'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Workflow Patterns'/>
                <rdf:li rdf:resource='#j.chen'/>
                <rdf:li rdf:resource='#Grid.it'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Grid workflow'/>
                <rdf:li rdf:resource='#Researchers'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#GRID superscalar'/>
                <rdf:li rdf:resource='#bassheide'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#start/2006-02-17/1'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#UML activity diagram'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#SnipSnap/config'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#Glossary/Links'/>
                <rdf:li rdf:resource='#BPML'/>
                <rdf:li rdf:resource='#t.heinis'/>
                <rdf:li rdf:resource='#m.s.shields'/>
                <rdf:li rdf:resource='#BPEL4WS'/>
                <rdf:li rdf:resource='#WfMC'/>
                <rdf:li rdf:resource='#DAGman'/>
                <rdf:li rdf:resource='#CAT'/>
                <rdf:li rdf:resource='#Freeflou'/>
                <rdf:li rdf:resource='#Diligent'/>
                <rdf:li rdf:resource='http://www.gridworkflow.org/snips/gridworkflow/rdf#K-Wf+Grid'/>
                <rdf:li rdf:resource='#NextGrid'/>
                <rdf:li rdf:resource='#Glossary'/>
            </rdf:Bag>
        </s:snipLinks>
        <s:attachments>
            <rdf:Bag>
                <rdf:li>
                    <s:Attachment rdf:about='http://www.gridworkflow.org/snips/gridworkflow/space/GWorkflowDL/PetriNetWeather_small.jpg'
                         s:fileName='PetriNetWeather_small.jpg'
                         s:contentType='image/jpeg'
                         s:size='10837'>
                        <s:date>Tue May 31 17:50:45 CEST 2005</s:date>
                    </s:Attachment>
                </rdf:li>
                <rdf:li>
                    <s:Attachment rdf:about='http://www.gridworkflow.org/snips/gridworkflow/space/GWorkflowDL/gworkflowdl_0_4.gif'
                         s:fileName='gworkflowdl_0_4.gif'
                         s:contentType='image/gif'
                         s:size='16926'>
                        <s:date>Tue May 31 17:50:03 CEST 2005</s:date>
                    </s:Attachment>
                </rdf:li>
            </rdf:Bag>
        </s:attachments>
    </s:Snip>
</rdf:RDF>
