[jboss-svn-commits] JBL Code SVN: r28471 - in labs/jbossrules/trunk/drools-process/drools-bpmn2: src and 15 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Jul 26 20:07:17 EDT 2009


Author: KrisVerlaenen
Date: 2009-07-26 20:07:17 -0400 (Sun, 26 Jul 2009)
New Revision: 28471

Added:
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/SequenceFlow.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ExclusiveGatewayHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ParallelGatewayHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ScriptTaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN20.xsd
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN2SemanticModule.conf
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/DiagramDefinition.xsd
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/DiagramInterchange.xsd
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/Semantic.xsd
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcess.xml
Modified:
   labs/jbossrules/trunk/drools-process/drools-bpmn2/
Log:
- initial bpmn2 commit


Property changes on: labs/jbossrules/trunk/drools-process/drools-bpmn2
___________________________________________________________________
Name: svn:ignore
   + .settings
target


Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/SequenceFlow.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/SequenceFlow.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/SequenceFlow.java	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,21 @@
+package org.drools.bpmn2.core;
+
+public class SequenceFlow {
+
+	private String sourceRef;
+	private String targetRef;
+	
+	public SequenceFlow(String sourceRef, String targetRef) {
+		this.sourceRef = sourceRef;
+		this.targetRef = targetRef;
+	}
+	
+	public String getSourceRef() {
+		return sourceRef;
+	}
+	
+	public String getTargetRef() {
+		return targetRef;
+	}
+	
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,85 @@
+package org.drools.bpmn2.xml;
+
+import java.util.HashSet;
+
+import org.drools.bpmn2.core.SequenceFlow;
+import org.drools.process.core.context.variable.Variable;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public abstract class AbstractNodeHandler extends BaseAbstractHandler implements Handler {
+
+    protected final static String EOL = System.getProperty( "line.separator" );
+
+    public AbstractNodeHandler() {
+        initValidParents();
+        initValidPeers();
+        this.allowNesting = false;
+    }
+    
+    protected void initValidParents() {
+        this.validParents = new HashSet<Class<?>>();
+        this.validParents.add(NodeContainer.class);
+    }
+    
+    protected void initValidPeers() {
+        this.validPeers = new HashSet<Class<?>>();
+        this.validPeers.add(null);
+        this.validPeers.add(Variable.class);
+        this.validPeers.add(Node.class);
+        this.validPeers.add(SequenceFlow.class);
+    }
+
+    public Object start(final String uri, final String localName, final Attributes attrs,
+                        final ExtensibleXmlParser parser) throws SAXException {
+        parser.startElementBuilder( localName, attrs );
+        NodeContainer nodeContainer = (NodeContainer) parser.getParent();
+        final Node node = createNode(attrs);
+        final String id = attrs.getValue("id");
+        node.setName(id);
+        node.setId(nodeContainer.getNodes().length);
+        nodeContainer.addNode(node);
+        return node;
+    }
+
+    protected abstract Node createNode(Attributes attrs);
+
+    public Object end(final String uri, final String localName,
+                      final ExtensibleXmlParser parser) throws SAXException {
+        final Element element = parser.endElementBuilder();
+        Node node = (Node) parser.getCurrent();
+        handleNode(node, element, uri, localName, parser);
+        return node;
+    }
+    
+    protected void handleNode(final Node node, final Element element, final String uri, 
+                              final String localName, final ExtensibleXmlParser parser)
+    	throws SAXException {
+    }
+    
+    public abstract void writeNode(final Node node, final StringBuilder xmlDump,
+    		                       final boolean includeMeta);
+    
+    protected void writeNode(final String name, final Node node, 
+    		                 final StringBuilder xmlDump) {
+    	xmlDump.append("    <" + name + " "); 
+        if (node.getName() != null) {
+            xmlDump.append("name=\"" + node.getName() + "\" ");
+        }
+    }
+    
+    protected void endNode(final StringBuilder xmlDump) {
+        xmlDump.append("/>" + EOL);
+    }
+
+    protected void endNode(final String name, final StringBuilder xmlDump) {
+        xmlDump.append("    </" + name + ">" + EOL);
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,24 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.EndNode;
+import org.xml.sax.Attributes;
+
+public class EndEventHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        return new EndNode();
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return EndNode.class;
+    }
+
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+		EndNode endNode = (EndNode) node;
+		writeNode("endEvent", endNode, xmlDump);
+		endNode(xmlDump);
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ExclusiveGatewayHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ExclusiveGatewayHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ExclusiveGatewayHandler.java	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,41 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.Join;
+import org.drools.workflow.core.node.Split;
+import org.xml.sax.Attributes;
+
+public class ExclusiveGatewayHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        final String type = attrs.getValue("gatewayDirection");
+        if ("converging".equals(type)) {
+        	Join join = new Join();
+        	join.setType(Join.TYPE_XOR);
+        	return join;
+        } else if ("diverging".equals(type)) {
+        	Split split = new Split();
+        	split.setType(Split.TYPE_XOR);
+        	return split;
+        } else {
+        	throw new IllegalArgumentException(
+    			"Unknown gateway direction: " + type);
+        }
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return Node.class;
+    }
+
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+		writeNode("exclusiveGateway", node, xmlDump);
+		if (node instanceof Split) {
+			xmlDump.append("gatewayDirection=\"diverging\" ");
+		} else if (node instanceof Join) {
+			xmlDump.append("gatewayDirection=\"converging\" ");
+		}
+		endNode(xmlDump);
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ParallelGatewayHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ParallelGatewayHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ParallelGatewayHandler.java	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,41 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.Join;
+import org.drools.workflow.core.node.Split;
+import org.xml.sax.Attributes;
+
+public class ParallelGatewayHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        final String type = attrs.getValue("gatewayDirection");
+        if ("converging".equals(type)) {
+        	Join join = new Join();
+        	join.setType(Join.TYPE_AND);
+        	return join;
+        } else if ("diverging".equals(type)) {
+        	Split split = new Split();
+        	split.setType(Split.TYPE_AND);
+        	return split;
+        } else {
+        	throw new IllegalArgumentException(
+    			"Unknown gateway direction: " + type);
+        }
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return Node.class;
+    }
+
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+		writeNode("exclusiveGateway", node, xmlDump);
+		if (node instanceof Split) {
+			xmlDump.append("gatewayDirection=\"diverging\" ");
+		} else if (node instanceof Join) {
+			xmlDump.append("gatewayDirection=\"converging\" ");
+		}
+		endNode(xmlDump);
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,101 @@
+package org.drools.bpmn2.xml;
+
+import java.util.HashSet;
+import java.util.List;
+
+import org.drools.bpmn2.core.SequenceFlow;
+import org.drools.definition.process.Node;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.workflow.core.impl.ConnectionImpl;
+import org.drools.workflow.core.impl.NodeImpl;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.drools.xml.ProcessBuildData;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class ProcessHandler extends BaseAbstractHandler implements Handler {
+	
+	public static final String CONNECTIONS = "BPMN.Connections";
+
+	@SuppressWarnings("unchecked")
+	public ProcessHandler() {
+		if ((this.validParents == null) && (this.validPeers == null)) {
+			this.validParents = new HashSet();
+			this.validParents.add(null);
+
+			this.validPeers = new HashSet();
+			this.validPeers.add(null);
+
+			this.allowNesting = false;
+		}
+	}
+
+	public Object start(final String uri, final String localName,
+			            final Attributes attrs, final ExtensibleXmlParser parser)
+			throws SAXException {
+		parser.startElementBuilder(localName, attrs);
+
+		final String id = attrs.getValue("id");
+		final String name = attrs.getValue("name");
+
+		RuleFlowProcess process = new RuleFlowProcess();
+		process.setId(id);
+		process.setName(name);
+		process.setType("RuleFlow");
+		process.setPackageName("org.drools.bpmn2");
+
+		((ProcessBuildData) parser.getData()).setProcess(process);
+		return process;
+	}
+
+	public Object end(final String uri, final String localName,
+			          final ExtensibleXmlParser parser) throws SAXException {
+		parser.endElementBuilder();
+		RuleFlowProcess process = (RuleFlowProcess) parser.getCurrent();
+		linkConnections(process);
+		return process;
+	}
+
+	public Class<?> generateNodeFor() {
+		return org.drools.definition.process.Process.class;
+	}
+	
+	@SuppressWarnings("unchecked")
+	private void linkConnections(RuleFlowProcess process) {
+		List<SequenceFlow> connections = (List<SequenceFlow>) process.getMetaData(CONNECTIONS);
+		if (connections != null) {
+			for (SequenceFlow connection: connections) {
+				String sourceRef = connection.getSourceRef();
+				String targetRef = connection.getTargetRef();
+				Node source = null;
+				for (Node node: process.getNodes()) {
+					if (sourceRef.equals(node.getName())) {
+						source = node;
+						break;
+					}
+				}
+				Node target = null;
+				for (Node node: process.getNodes()) {
+					if (targetRef.equals(node.getName())) {
+						target = node;
+						break;
+					}
+				}
+				if (source == null) {
+					throw new IllegalArgumentException(
+						"Could not find source " + sourceRef);
+				}
+				if (target == null) {
+					throw new IllegalArgumentException(
+						"Could not find target " + targetRef);
+				}
+				new ConnectionImpl(
+					source, NodeImpl.CONNECTION_DEFAULT_TYPE, 
+					target, NodeImpl.CONNECTION_DEFAULT_TYPE);
+			}
+		}
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,70 @@
+package org.drools.bpmn2.xml;
+
+import java.util.HashSet;
+import java.util.List;
+
+import org.drools.bpmn2.core.SequenceFlow;
+import org.drools.process.core.context.variable.Variable;
+import org.drools.process.core.datatype.impl.type.ObjectDataType;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class PropertyHandler extends BaseAbstractHandler implements Handler {
+
+	public PropertyHandler() {
+        initValidParents();
+        initValidPeers();
+        this.allowNesting = false;
+    }
+    
+    protected void initValidParents() {
+        this.validParents = new HashSet<Class<?>>();
+        this.validParents.add(NodeContainer.class);
+    }
+    
+    protected void initValidPeers() {
+        this.validPeers = new HashSet<Class<?>>();
+        this.validPeers.add(null);
+        this.validPeers.add(Variable.class);
+        this.validPeers.add(Node.class);
+        this.validPeers.add(SequenceFlow.class);
+    }
+    
+	@SuppressWarnings("unchecked")
+	public Object start(final String uri, final String localName,
+			            final Attributes attrs, final ExtensibleXmlParser parser)
+			throws SAXException {
+		parser.startElementBuilder(localName, attrs);
+
+		final String id = attrs.getValue("id");
+		final String itemSubjectRef = attrs.getValue("itemSubjectRef");
+
+		RuleFlowProcess process = (RuleFlowProcess) parser.getParent();
+		
+		List variables = process.getVariableScope().getVariables();
+		Variable variable = new Variable();
+		variable.setName(id);
+		// TODO add object type
+		variable.setType(new ObjectDataType());
+		variables.add(variable);
+
+		return variable;
+	}
+
+	public Object end(final String uri, final String localName,
+			          final ExtensibleXmlParser parser) throws SAXException {
+		parser.endElementBuilder();
+		return parser.getCurrent();
+	}
+
+	public Class<?> generateNodeFor() {
+		return SequenceFlow.class;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ScriptTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ScriptTaskHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ScriptTaskHandler.java	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,49 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.node.ActionNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.XmlDumper;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class ScriptTaskHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        ActionNode result = new ActionNode();
+        result.setAction(new DroolsConsequenceAction());
+        return result;
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return ActionNode.class;
+    }
+
+    protected void handleNode(final Node node, final Element element, final String uri, 
+            final String localName, final ExtensibleXmlParser parser) throws SAXException {
+    	super.handleNode(node, element, uri, localName, parser);
+        ActionNode actionNode = (ActionNode) node;
+        DroolsConsequenceAction action = (DroolsConsequenceAction) actionNode.getAction();
+		String language = element.getAttribute("scriptLanguage");
+		if (language != null) {
+			action.setDialect(language);
+		}
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        if (xmlNode instanceof Element) {
+    		action.setConsequence(xmlNode.getTextContent());
+        }
+	}
+
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+		ActionNode actionNode = (ActionNode) node;
+		writeNode("scriptTask", actionNode, xmlDump);
+		DroolsConsequenceAction action = (DroolsConsequenceAction) actionNode.getAction();
+		xmlDump.append("scriptLanguage=\"" + action.getDialect() + "\" >\n");
+		xmlDump.append("      <script>" + XmlDumper.replaceIllegalChars(action.getConsequence()) + "</script>\n");
+		endNode("scriptTask", xmlDump);
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,72 @@
+package org.drools.bpmn2.xml;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+import org.drools.bpmn2.core.SequenceFlow;
+import org.drools.process.core.context.variable.Variable;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class SequenceFlowHandler extends BaseAbstractHandler implements Handler {
+
+	public SequenceFlowHandler() {
+        initValidParents();
+        initValidPeers();
+        this.allowNesting = false;
+    }
+    
+    protected void initValidParents() {
+        this.validParents = new HashSet<Class<?>>();
+        this.validParents.add(NodeContainer.class);
+    }
+    
+    protected void initValidPeers() {
+        this.validPeers = new HashSet<Class<?>>();
+        this.validPeers.add(null);
+        this.validPeers.add(Variable.class);
+        this.validPeers.add(Node.class);
+        this.validPeers.add(SequenceFlow.class);
+    }
+    
+	@SuppressWarnings("unchecked")
+	public Object start(final String uri, final String localName,
+			            final Attributes attrs, final ExtensibleXmlParser parser)
+			throws SAXException {
+		parser.startElementBuilder(localName, attrs);
+
+		final String sourceRef = attrs.getValue("sourceRef");
+		final String targetRef = attrs.getValue("targetRef");
+
+		RuleFlowProcess process = (RuleFlowProcess) parser.getParent();
+		
+		List<SequenceFlow> connections = (List<SequenceFlow>)
+			process.getMetaData(ProcessHandler.CONNECTIONS);
+		if (connections == null) {
+			connections = new ArrayList<SequenceFlow>();
+			process.setMetaData(ProcessHandler.CONNECTIONS, connections);
+		}
+		SequenceFlow connection = new SequenceFlow(sourceRef, targetRef);
+		connections.add(connection);
+
+		return connection;
+	}
+
+	public Object end(final String uri, final String localName,
+			          final ExtensibleXmlParser parser) throws SAXException {
+		parser.endElementBuilder();
+		return parser.getCurrent();
+	}
+
+	public Class<?> generateNodeFor() {
+		return SequenceFlow.class;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,24 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.StartNode;
+import org.xml.sax.Attributes;
+
+public class StartEventHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        return new StartNode();
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return StartNode.class;
+    }
+
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+		StartNode startNode = (StartNode) node;
+		writeNode("startEvent", startNode, xmlDump);
+		endNode(xmlDump);
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,69 @@
+package org.drools.bpmn2.xml;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.process.core.Work;
+import org.drools.process.core.impl.WorkImpl;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class TaskHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        return new WorkItemNode();
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return WorkItemNode.class;
+    }
+
+    protected void handleNode(final Node node, final Element element, final String uri, 
+            final String localName, final ExtensibleXmlParser parser) throws SAXException {
+    	super.handleNode(node, element, uri, localName, parser);
+    	WorkItemNode workItemNode = (WorkItemNode) node;
+        String name = element.getAttribute("name");
+        Work work = new WorkImpl();
+        work.setName(name);
+    	workItemNode.setWork(work);
+    	
+    	Map<String, String> dataInputs = new HashMap<String, String>();
+    	org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+        	String nodeName = xmlNode.getNodeName();
+        	if ("ioSpecification".equals(nodeName)) {
+        		org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+        		while (subNode instanceof Element) {
+        			String subNodeName = subNode.getNodeName();
+                	if ("dataInput".equals(subNodeName)) {
+                		String id = ((Element) subNode).getAttribute("id");
+                		String inputName = ((Element) subNode).getAttribute("name");
+                		dataInputs.put(id, inputName);
+                	}
+                	subNode = subNode.getNextSibling();
+        		}
+        	} else if ("dataInputAssociation".equals(nodeName)) {
+        		// sourceRef
+        		org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+        		String from = subNode.getTextContent();
+        		// targetRef
+        		subNode = subNode.getNextSibling();
+        		String to = subNode.getTextContent();
+        		workItemNode.addInMapping(dataInputs.get(to), from);
+        	}
+    		xmlNode = xmlNode.getNextSibling();
+        }
+	}
+
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+		WorkItemNode workItemNode = (WorkItemNode) node;
+		writeNode("task", workItemNode, xmlDump);
+		endNode(xmlDump);
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,24 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.HumanTaskNode;
+import org.xml.sax.Attributes;
+
+public class UserTaskHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        return new HumanTaskNode();
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return HumanTaskNode.class;
+    }
+
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+		HumanTaskNode humanTaskNode = (HumanTaskNode) node;
+		writeNode("userTask", humanTaskNode, xmlDump);
+		endNode(xmlDump);
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN20.xsd
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN20.xsd	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN20.xsd	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified"	
+	xmlns="http://schema.omg.org/spec/BPMN/2.0"
+	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+	xmlns:di="http://www.omg.com/di/1.0.0"
+	targetNamespace="http://schema.omg.org/spec/BPMN/2.0">
+
+	<xsd:import namespace="http://www.omg.com/di/1.0.0" schemaLocation="DiagramInterchange.xsd"/>
+	<xsd:include schemaLocation="Semantic.xsd"/>
+
+	<xsd:element name="definitions" type="tDefinitions"/>
+	<xsd:complexType name="tDefinitions">
+		<xsd:sequence>
+			<xsd:element ref="import" minOccurs="0" maxOccurs="unbounded"/>
+			<xsd:element ref="extension" minOccurs="0" maxOccurs="unbounded"/>
+			<xsd:element ref="rootElement" minOccurs="0" maxOccurs="unbounded"/>
+			<xsd:element ref="di:diagram" minOccurs="0" maxOccurs="unbounded"/>
+			<xsd:element ref="relationship" minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
+		<xsd:attribute name="id" type="xsd:ID" use="optional"/>
+		<xsd:attribute name="targetNamespace" type="xsd:anyURI" use="required"/>
+		<xsd:attribute name="expressionLanguage" type="xsd:anyURI" use="optional" default="http://www.w3.org/1999/XPath"/>
+		<xsd:attribute name="typeLanguage" type="xsd:anyURI" use="optional" default="http://www.w3.org/2001/XMLSchema"/>
+		<xsd:anyAttribute namespace="##other" processContents="lax"/>
+	</xsd:complexType>
+	
+	<xsd:element name="import" type="tImport"/>
+	<xsd:complexType name="tImport">
+		<xsd:attribute name="namespace" type="xsd:anyURI" use="required"/>
+		<xsd:attribute name="location" type="xsd:string" use="required"/>
+		<xsd:attribute name="importType" type="xsd:anyURI" use="required"/>
+	</xsd:complexType>
+
+</xsd:schema>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN2SemanticModule.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN2SemanticModule.conf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN2SemanticModule.conf	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,14 @@
+uri=http://schema.omg.org/spec/BPMN/2.0
+
+process=org.drools.bpmn2.xml.ProcessHandler
+property=org.drools.bpmn2.xml.PropertyHandler
+
+startEvent=org.drools.bpmn2.xml.StartEventHandler
+endEvent=org.drools.bpmn2.xml.EndEventHandler
+exclusiveGateway=org.drools.bpmn2.xml.ExclusiveGatewayHandler
+parallelGateway=org.drools.bpmn2.xml.ParallelGatewayHandler
+scriptTask=org.drools.bpmn2.xml.ScriptTaskHandler
+task=org.drools.bpmn2.xml.TaskHandler
+userTask=org.drools.bpmn2.xml.UserTaskHandler
+
+sequenceFlow=org.drools.bpmn2.xml.SequenceFlowHandler
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/DiagramDefinition.xsd
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/DiagramDefinition.xsd	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/DiagramDefinition.xsd	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema targetNamespace="http://www.omg.com/dd/1.0.0" xmlns:dd="http://www.omg.com/dd/1.0.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+  <xsd:element name="namedElement" type="dd:NamedElement"/>
+  <xsd:element name="package" type="dd:Package"/>
+  <xsd:element name="viewDefinition" type="dd:ViewDefinition" abstract="true"/>
+  <xsd:element name="nodeDefinition" type="dd:NodeDefinition" substitutionGroup="dd:viewDefinition"/>
+  <xsd:element name="connectorDefinition" type="dd:ConnectorDefinition" substitutionGroup="dd:viewDefinition"/>
+  <xsd:element name="diagramDefinition" type="dd:DiagramDefinition" substitutionGroup="dd:viewDefinition"/>
+  <xsd:element name="childDefinition" type="dd:ChildDefinition"/>
+  <xsd:element name="styleDefinition" type="dd:StyleDefinition"/>
+  <xsd:element name="constraint" type="dd:Constraint"/>
+  
+  <xsd:complexType abstract="true" name="NamedElement">
+    <xsd:attribute name="name" type="xsd:NCName" use="required"/>
+  </xsd:complexType>
+  
+  <xsd:complexType name="Package">
+    <xsd:complexContent>
+      <xsd:extension base="dd:NamedElement">
+        <xsd:sequence>
+          <xsd:element maxOccurs="unbounded" minOccurs="0" ref="dd:viewDefinition"/>
+        </xsd:sequence>
+        <xsd:attribute name="nsURI" type="xsd:anyURI" use="required"/>
+        <xsd:attribute name="nsPrefix" type="xsd:NCName" use="required"/>
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+  <xsd:complexType abstract="true" name="ViewDefinition">
+    <xsd:complexContent>
+      <xsd:extension base="dd:NamedElement">
+        <xsd:sequence>
+          <xsd:element maxOccurs="unbounded" minOccurs="0" ref="dd:constraint"/>
+          <xsd:element maxOccurs="unbounded" minOccurs="0" ref="dd:styleDefinition"/>
+          <xsd:element maxOccurs="unbounded" minOccurs="0" ref="dd:childDefinition"/>
+        </xsd:sequence>
+        <xsd:attribute name="id" type="xsd:NCName" use="required"/>
+        <xsd:attribute name="abstract" type="xsd:boolean"/>
+        <xsd:attribute name="superDefinition" type="xsd:QName"/>
+        <xsd:attribute name="contextType" type="xsd:QName"/>
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+  
+  <xsd:complexType name="NodeDefinition">
+    <xsd:complexContent>
+      <xsd:extension base="dd:ViewDefinition"/>
+    </xsd:complexContent>
+  </xsd:complexType>
+  
+  <xsd:complexType name="ConnectorDefinition">
+    <xsd:complexContent>
+      <xsd:extension base="dd:ViewDefinition">
+        <xsd:attribute name="sourceDefinition" type="xsd:QName" use="required"/>
+        <xsd:attribute name="targetDefinition" type="xsd:QName" use="required"/>
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+  
+  <xsd:complexType name="DiagramDefinition">
+    <xsd:complexContent>
+      <xsd:extension base="dd:ViewDefinition"/>
+    </xsd:complexContent>
+  </xsd:complexType>
+  
+  <xsd:complexType name="ChildDefinition">
+    <xsd:complexContent>
+      <xsd:extension base="dd:NamedElement">
+        <xsd:attribute name="lowerBound" type="xsd:int" default="0" />
+        <xsd:attribute name="upperBound" type="xsd:int" default="-1"/>
+        <xsd:attribute name="typeDefinition" type="xsd:QName" use="required"/>
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+  
+  <xsd:complexType name="StyleDefinition">
+    <xsd:complexContent>
+      <xsd:extension base="dd:NamedElement">
+        <xsd:attribute name="default" type="xsd:string"/>
+        <xsd:attribute name="inherited" type="xsd:boolean" default="false"/>
+        <xsd:attribute name="type" type="xsd:QName" use="required"/>
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+  
+  <xsd:complexType name="Constraint">
+    <xsd:complexContent>
+      <xsd:extension base="dd:NamedElement">
+        <xsd:attribute name="condition" type="xsd:string" use="required"/>
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+
+</xsd:schema>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/DiagramInterchange.xsd
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/DiagramInterchange.xsd	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/DiagramInterchange.xsd	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema targetNamespace="http://www.omg.com/di/1.0.0" xmlns:dd="http://www.omg.com/dd/1.0.0" xmlns:di="http://www.omg.com/di/1.0.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+  <xsd:import namespace="http://www.omg.com/dd/1.0.0" schemaLocation="DiagramDefinition.xsd"/>
+  
+  <xsd:element name="view" type="di:View"/>
+  <xsd:element name="diagram" type="di:Diagram" substitutionGroup="di:view"/>
+  <xsd:element name="node" type="di:Node" substitutionGroup="di:view"/>
+  <xsd:element name="connector" type="di:Connector" substitutionGroup="di:view"/>
+  <xsd:element name="style" type="di:Style"/>
+  <xsd:element name="bendpoint" type="di:Bendpoint"/>
+  
+  <xsd:complexType abstract="true" name="View">
+    <xsd:sequence>
+      <xsd:element maxOccurs="unbounded" minOccurs="0" ref="di:style"/>
+      <xsd:element maxOccurs="unbounded" minOccurs="0" name="child" type="di:Node" form="qualified"/>
+    </xsd:sequence>
+    <xsd:attribute name="id" type="xsd:NCName" use="required"/>
+    <xsd:attribute name="context" type="xsd:anyURI"/>
+    <xsd:attribute name="definition" use="required">
+      <xsd:simpleType>
+        <xsd:list itemType="xsd:QName"/>
+      </xsd:simpleType>
+    </xsd:attribute>
+    <xsd:attribute name="targetConnector">
+      <xsd:simpleType>
+        <xsd:list itemType="xsd:anyURI"/>
+      </xsd:simpleType>
+    </xsd:attribute>
+    <xsd:attribute name="sourceConnector">
+      <xsd:simpleType>
+        <xsd:list itemType="xsd:anyURI"/>
+      </xsd:simpleType>
+    </xsd:attribute>
+  </xsd:complexType>
+  
+  <xsd:complexType name="Diagram">
+    <xsd:complexContent>
+      <xsd:extension base="di:View">
+        <xsd:sequence>
+          <xsd:element maxOccurs="unbounded" minOccurs="0" ref="di:connector"/>
+        </xsd:sequence>
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+  
+  <xsd:complexType name="Node">
+    <xsd:complexContent>
+      <xsd:extension base="di:View"/>
+    </xsd:complexContent>
+  </xsd:complexType>
+  
+  <xsd:complexType name="Connector">
+    <xsd:complexContent>
+      <xsd:extension base="di:View">
+        <xsd:sequence>
+          <xsd:element maxOccurs="unbounded" minOccurs="0" ref="di:bendpoint"/>
+        </xsd:sequence>
+        <xsd:attribute name="source" type="xsd:anyURI" use="required"/>
+        <xsd:attribute name="target" type="xsd:anyURI" use="required"/>
+      </xsd:extension>
+    </xsd:complexContent>
+  </xsd:complexType>
+  
+  <xsd:complexType name="Style">
+    <xsd:attribute name="name" type="xsd:NCName" use="required"/>
+    <xsd:attribute name="value" type="xsd:string" use="required"/>
+  </xsd:complexType>
+  
+  <xsd:complexType name="Bendpoint">
+    <xsd:attribute name="sourceX" type="xsd:int" use="required"/>
+    <xsd:attribute name="sourceY" type="xsd:int" use="required"/>
+    <xsd:attribute name="targetX" type="xsd:int" use="required"/>
+    <xsd:attribute name="targetY" type="xsd:int" use="required"/>
+  </xsd:complexType>
+  
+</xsd:schema>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/Semantic.xsd
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/Semantic.xsd	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/Semantic.xsd	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,1540 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified"
+	xmlns="http://schema.omg.org/spec/BPMN/2.0" 
+	xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+	targetNamespace="http://schema.omg.org/spec/BPMN/2.0">
+	
+	<xsd:element name="activity" type="tActivity"/>
+	<xsd:complexType name="tActivity" abstract="true">
+		<xsd:complexContent>
+			<xsd:extension base="tFlowNode">
+				<xsd:sequence>
+					<xsd:element ref="ioSpecification" minOccurs="0" maxOccurs="1"/>
+					<xsd:element ref="property" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="dataInputAssociation" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="dataOutputAssociation" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="activityResource" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="loopCharacteristics" minOccurs="0"/>
+				</xsd:sequence>
+				<xsd:attribute name="isForCompensation" type="xsd:boolean" default="false"/>
+				<xsd:attribute name="startQuantity" type="xsd:integer" default="1"/>
+				<xsd:attribute name="completionQuantity" type="xsd:integer" default="1"/>
+				<xsd:attribute name="default" type="xsd:IDREF" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="activityResource" type="tActivityResource"/>
+	<xsd:complexType name="tActivityResource">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element ref="resourceAssignmentExpression" minOccurs="0" maxOccurs="1"/>
+					<xsd:element ref="resourceParameterBinding" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="resourceRef" type="xsd:QName" use="required"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="adHocSubProcess" type="tAdHocSubProcess" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tAdHocSubProcess">
+		<xsd:complexContent>
+			<xsd:extension base="tSubProcess">
+				<xsd:sequence>
+					<xsd:element name="completionCondition" type="tExpression" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="cancelRemainingInstances" type="xsd:boolean" default="true"/>
+				<xsd:attribute name="ordering" type="tAdHocOrdering"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:simpleType name="tAdHocOrdering">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="parallel"/>
+			<xsd:enumeration value="sequential"/>
+		</xsd:restriction>
+	</xsd:simpleType>	
+
+	<xsd:element name="artifact" type="tArtifact"/>
+	<xsd:complexType name="tArtifact" abstract="true">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="assignment" type="tAssignment" />
+	<xsd:complexType name="tAssignment">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element name="from" type="tBaseElementWithMixedContent" minOccurs="1" maxOccurs="1"/>
+					<xsd:element name="to" type="tBaseElementWithMixedContent" minOccurs="1" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="language" type="xsd:anyURI"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+	
+	<xsd:element name="association" type="tAssociation" substitutionGroup="artifact"/>
+	<xsd:complexType name="tAssociation">
+		<xsd:complexContent>
+			<xsd:extension base="tArtifact">
+				<xsd:attribute name="sourceRef" type="xsd:QName" use="required"/>
+				<xsd:attribute name="targetRef" type="xsd:QName" use="required"/>
+				<xsd:attribute name="associationDirection" type="tAssociationDirection" default="none"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:simpleType name="tAssociationDirection">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="none"/>
+			<xsd:enumeration value="one"/>
+			<xsd:enumeration value="both"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+
+	<xsd:element name="auditing" type="tAuditing"/>
+	<xsd:complexType name="tAuditing">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement"/>
+		</xsd:complexContent>
+	</xsd:complexType>	
+
+	<xsd:element name="baseElement" type="tBaseElement"/>
+	<xsd:complexType name="tBaseElement" abstract="true">
+		<xsd:sequence>
+			<xsd:element ref="documentation" minOccurs="0" maxOccurs="unbounded"/>
+			<xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
+		<xsd:attribute name="id" type="xsd:ID" use="optional"/>
+		<xsd:anyAttribute namespace="##other" processContents="lax"/>
+	</xsd:complexType>
+	
+	<xsd:element name="baseElementWithMixedContent" type="tBaseElementWithMixedContent"/>
+	<xsd:complexType name="tBaseElementWithMixedContent" abstract="true" mixed="true">
+		<xsd:sequence>
+			<xsd:element ref="documentation" minOccurs="0" maxOccurs="unbounded"/>
+			<xsd:element ref="category" minOccurs="0" maxOccurs="unbounded"/>
+			<xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
+		<xsd:attribute name="id" type="xsd:ID" use="optional"/>
+		<xsd:anyAttribute namespace="##other" processContents="lax"/>
+	</xsd:complexType>
+
+	<xsd:element name="boundaryEvent" type="tBoundaryEvent" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tBoundaryEvent">
+		<xsd:complexContent>
+			<xsd:extension base="tCatchEvent">
+				<xsd:attribute name="cancelActivity" type="xsd:boolean" default="true"/>
+				<xsd:attribute name="attachedToRef" type="xsd:QName" use="required"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>			
+
+	<xsd:element name="businessRuleTask" type="tBusinessRuleTask" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tBusinessRuleTask">
+		<xsd:complexContent>
+			<xsd:extension base="tTask"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="callableElement" type="tCallableElement"/>
+	<xsd:complexType name="tCallableElement">
+		<xsd:complexContent>
+			<xsd:extension base="tRootElement">
+				<xsd:sequence>
+					<xsd:element name="supportedInterfaceRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="ioSpecification" minOccurs="0" maxOccurs="1"/>
+					<xsd:element ref="ioBinding" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="callActivity" type="tCallActivity" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tCallActivity">
+		<xsd:complexContent>
+			<xsd:extension base="tActivity">
+				<xsd:attribute name="calledElement" type="xsd:QName" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="callChoreographyActivity" type="tCallChoreographyActivity" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tCallChoreographyActivity">
+		<xsd:complexContent>
+			<xsd:extension base="tChoreographyActivity">
+				<xsd:sequence>
+					<xsd:element ref="participantAssociation" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>			
+				<xsd:attribute name="calledElement" type="xsd:QName" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="callConversation" type="tCallConversation" substitutionGroup="conversationNode"/>
+	<xsd:complexType name="tCallConversation">
+		<xsd:complexContent>
+			<xsd:extension base="tConversationNode">
+				<xsd:sequence>
+					<xsd:element ref="participantAssociation" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="calledElementRef" type="xsd:QName" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="cancelEventDefinition" type="tCancelEventDefinition" substitutionGroup="eventDefinition"/>
+	<xsd:complexType name="tCancelEventDefinition">
+		<xsd:complexContent>
+			<xsd:extension base="tEventDefinition"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="catchEvent" type="tCatchEvent"/>
+	<xsd:complexType name="tCatchEvent" abstract="true">
+		<xsd:complexContent>
+			<xsd:extension base="tEvent">
+				<xsd:sequence>
+					<xsd:element ref="dataOutput" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="dataOutputAssociation" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="outputSet" minOccurs="0" maxOccurs="1"/>
+					<xsd:element ref="eventDefinition" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="eventDefinitionRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="parallelMultiple" type="xsd:boolean" default="false"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="category" type="tCategory" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tCategory">
+		<xsd:complexContent>
+			<xsd:extension base="tRootElement">
+				<xsd:sequence>
+					<xsd:element ref="categoryValue" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="categoryValue" type="tCategoryValue"/>
+	<xsd:complexType name="tCategoryValue">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:attribute name="value" type="xsd:string" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="choreography" type="tChoreography" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tChoreography">
+		<xsd:complexContent>
+			<xsd:extension base="tCallableElement">
+				<xsd:sequence>
+					<xsd:element ref="flowElement" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="artifact" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="messageFlow" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="participant" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="conversation" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="conversationAssociation" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="messageFlowAssociation" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="participantAssociation" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="isClosed" type="xsd:boolean" default="false"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="choreographyActivity" type="tChoreographyActivity"/>
+	<xsd:complexType name="tChoreographyActivity" abstract="true">
+		<xsd:complexContent>
+			<xsd:extension base="tFlowNode">
+				<xsd:sequence>
+					<xsd:element name="participantRef" type="xsd:QName" minOccurs="2" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="initiatingParticipantRef" type="xsd:QName" use="required"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="choreographySubProcess" type="tChoreographySubProcess" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tChoreographySubProcess">
+		<xsd:complexContent>
+			<xsd:extension base="tChoreographyActivity">
+				<xsd:sequence>
+					<xsd:element ref="flowElement" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="artifact" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="choreographyTask" type="tChoreographyTask" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tChoreographyTask">
+		<xsd:complexContent>
+			<xsd:extension base="tChoreographyActivity">
+				<xsd:sequence>
+					<xsd:element name="messageFlowRef" type="xsd:QName" minOccurs="1" maxOccurs="unbounded"/>
+				</xsd:sequence>			
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="collaboration" type="tCollaboration" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tCollaboration">
+		<xsd:complexContent>
+			<xsd:extension base="tRootElement">
+				<xsd:sequence>
+					<xsd:element ref="participant" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="messageFlow" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="artifact" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="conversation" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="conversationAssociation" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="participantAssociation" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="messageFlowAssociation" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="isClosed" type="xsd:boolean" default="false"/>
+				<xsd:attribute name="choreographyRef" type="xsd:QName" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="communication" type="tCommunication" substitutionGroup="conversationNode"/>
+	<xsd:complexType name="tCommunication">
+		<xsd:complexContent>
+			<xsd:extension base="tConversationNode">
+				<xsd:sequence>
+					<xsd:element name="messageFlowRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="correlationKeyRef" type="xsd:QName" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="compensateEventDefinition" type="tCompensateEventDefinition" substitutionGroup="eventDefinition"/>
+	<xsd:complexType name="tCompensateEventDefinition">
+		<xsd:complexContent>
+			<xsd:extension base="tEventDefinition">
+				<xsd:attribute name="waitForCompletion" type="xsd:boolean"/>
+				<xsd:attribute name="activityRef" type="xsd:QName"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="complexBehaviorDefinition" type="tComplexBehaviorDefinition"/>
+	<xsd:complexType name="tComplexBehaviorDefinition">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element name="condition" type="tFormalExpression" minOccurs="1" maxOccurs="1"/>
+					<xsd:element name="event" type="tImplicitThrowEvent" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="complexGateway" type="tComplexGateway" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tComplexGateway">
+		<xsd:complexContent>
+			<xsd:extension base="tGateway">
+				<xsd:sequence>
+					<xsd:element name="activationCondition"  type="tExpression" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="default" type="xsd:IDREF"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+	
+	<xsd:element name="conditionalEventDefinition" type="tConditionalEventDefinition" substitutionGroup="eventDefinition"/>
+	<xsd:complexType name="tConditionalEventDefinition">
+		<xsd:complexContent>
+			<xsd:extension base="tEventDefinition">
+				<xsd:sequence>
+					<xsd:element name="condition" type="tExpression"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="conversation" type="tConversation" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tConversation">
+		<xsd:complexContent>
+			<xsd:extension base="tCallableElement">
+				<xsd:sequence>
+					<xsd:element ref="conversationNode" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="participant" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="artifact" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="messageFlow" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="messageFlowRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="correlationKey" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="conversationAssociation" type="tConversationAssociation"/>
+	<xsd:complexType name="tConversationAssociation">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element name="messageFlowRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="conversationRef" type="xsd:QName"/>
+				<xsd:attribute name="correlationKeyRef" type="xsd:QName"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="conversationNode" type="tConversationNode"/>
+	<xsd:complexType name="tConversationNode" abstract="true">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element name="participantRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="correlationKey" type="tCorrelationKey"/>
+	<xsd:complexType name="tCorrelationKey">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element name="correlationPropertyRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="correlationProperty" type="tCorrelationProperty" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tCorrelationProperty">
+		<xsd:complexContent>
+			<xsd:extension base="tRootElement">
+				<xsd:sequence>
+					<xsd:element ref="correlationPropertyRetrievalExpression" minOccurs="1" maxOccurs="unbounded"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="correlationPropertyBinding" type="tCorrelationPropertyBinding"/>
+	<xsd:complexType name="tCorrelationPropertyBinding">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element name="dataPath" type="tFormalExpression" minOccurs="1" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="correlationPropertyRef" type="xsd:QName" use="required"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="correlationPropertyRetrievalExpression" type="tCorrelationPropertyRetrievalExpression"/>
+	<xsd:complexType name="tCorrelationPropertyRetrievalExpression">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element name="messagePath" type="tFormalExpression" minOccurs="1" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="messageRef" type="xsd:QName" use="required"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="correlationSubscription" type="tCorrelationSubscription"/>
+	<xsd:complexType name="tCorrelationSubscription">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element ref="correlationPropertyBinding" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="process" type="xsd:QName" use="required"/>
+				<xsd:attribute name="correlationKeyRef" type="xsd:QName" use="required"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="dataAssociation" type="tDataAssociation" />
+	<xsd:complexType name="tDataAssociation" abstract="true">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element name="transformation" type="tFormalExpression" minOccurs="0" maxOccurs="1"/>
+					<xsd:element ref="assignment" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+	
+	<xsd:element name="dataInput" type="tDataInput" />
+	<xsd:complexType name="tDataInput">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element ref="dataState" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string" use="optional"/>
+				<xsd:attribute name="itemSubjectRef" type="xsd:QName" />
+				<xsd:attribute name="isCollection" type="xsd:boolean" default="false"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="dataInputAssociation" type="tDataInputAssociation" />
+	<xsd:complexType name="tDataInputAssociation">
+		<xsd:complexContent>
+			<xsd:extension base="tDataAssociation">
+				<xsd:sequence>
+					<xsd:element name="sourceRef" type="xsd:QName" minOccurs="1" maxOccurs="unbounded"/>
+					<xsd:element name="targetRef" type="xsd:QName" minOccurs="1" maxOccurs="1"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="dataObject" type="tDataObject" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tDataObject">
+		<xsd:complexContent>
+			<xsd:extension base="tFlowElement">
+				<xsd:sequence>
+					<xsd:element ref="dataState" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="itemSubjectRef" type="xsd:QName"/>
+				<xsd:attribute name="isCollection" type="xsd:boolean" default="false"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="dataOutput" type="tDataOutput" />
+	<xsd:complexType name="tDataOutput">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element ref="dataState" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string" use="optional" />
+				<xsd:attribute name="itemSubjectRef" type="xsd:QName"/>
+				<xsd:attribute name="isCollection" type="xsd:boolean" default="false"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="dataOutputAssociation" type="tDataOutputAssociation" />
+	<xsd:complexType name="tDataOutputAssociation">
+		<xsd:complexContent>
+			<xsd:extension base="tDataAssociation">
+				<xsd:sequence>
+					<xsd:element name="sourceRef" type="xsd:QName" minOccurs="1" maxOccurs="unbounded"/>
+					<xsd:element name="targetRef" type="xsd:QName" minOccurs="1" maxOccurs="1"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="dataState" type="tDataState" />
+	<xsd:complexType name="tDataState">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:attribute name="name" type="xsd:string"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="dataStore" type="tDataStore" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tDataStore">
+		<xsd:complexContent>
+			<xsd:extension base="tRootElement">
+				<xsd:sequence>
+					<xsd:element ref="dataState" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="capacity" type="xsd:integer"/>
+				<xsd:attribute name="isUnlimited" type="xsd:boolean" default="true"/>
+				<xsd:attribute name="itemSubjectRef" type="xsd:QName"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="dataStoreReference" type="tDataStoreReference" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tDataStoreReference">
+		<xsd:complexContent>
+			<xsd:extension base="tFlowElement">
+				<xsd:sequence>
+					<xsd:element ref="dataState" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="itemSubjectRef" type="xsd:QName"/>
+				<xsd:attribute name="dataStoreRef" type="xsd:QName"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="documentation" type="tDocumentation"/>
+	<xsd:complexType name="tDocumentation" mixed="true">
+		<xsd:sequence>
+			<xsd:any namespace="##any" processContents="lax" minOccurs="0"/>
+		</xsd:sequence>
+		<xsd:attribute name="id" type="xsd:ID" use="optional"/>
+	</xsd:complexType>
+	
+	<xsd:element name="endEvent" type="tEndEvent" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tEndEvent">
+		<xsd:complexContent>
+			<xsd:extension base="tThrowEvent"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="endPoint" type="tEndPoint" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tEndPoint">
+		<xsd:complexContent>
+			<xsd:extension base="tRootElement"/>
+		</xsd:complexContent>
+	</xsd:complexType>		
+	
+	<xsd:element name="error" type="tError" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tError">
+		<xsd:complexContent>
+			<xsd:extension base="tRootElement">
+				<xsd:attribute name="structureRef" type="xsd:QName"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="errorEventDefinition" type="tErrorEventDefinition" substitutionGroup="eventDefinition"/>
+	<xsd:complexType name="tErrorEventDefinition">
+		<xsd:complexContent>
+			<xsd:extension base="tEventDefinition">
+				<xsd:attribute name="errorCode" type="xsd:string"/>
+				<xsd:attribute name="errorRef" type="xsd:QName"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="escalation" type="tEscalation" substitutionGroup="rootElement"/>	
+	<xsd:complexType name="tEscalation">
+		<xsd:complexContent>
+			<xsd:extension base="tRootElement">
+				<xsd:attribute name="structureRef" type="xsd:QName"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+
+	<xsd:element name="escalationEventDefinition" type="tEscalationEventDefinition" substitutionGroup="eventDefinition"/>
+	<xsd:complexType name="tEscalationEventDefinition">
+		<xsd:complexContent>
+			<xsd:extension base="tEventDefinition">
+				<xsd:attribute name="escalationCode" type="xsd:string"/>
+				<xsd:attribute name="escalationRef" type="xsd:QName"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="event" type="tEvent" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tEvent" abstract="true">
+		<xsd:complexContent>
+			<xsd:extension base="tFlowNode"/>
+		</xsd:complexContent>
+	</xsd:complexType>	
+	
+	<xsd:element name="eventBasedGateway" type="tEventBasedGateway" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tEventBasedGateway">
+		<xsd:complexContent>
+			<xsd:extension base="tGateway">
+				<xsd:attribute name="instantiate" type="xsd:boolean" default="false"/>
+				<xsd:attribute name="eventGatewayType" type="tEventBasedGatewayType" default="Exclusive"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+	
+	<xsd:simpleType name="tEventBasedGatewayType">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="Exclusive"/>
+			<xsd:enumeration value="Parallel"/>
+		</xsd:restriction>
+	</xsd:simpleType>	
+
+	<xsd:element name="eventDefinition" type="tEventDefinition" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tEventDefinition" abstract="true">
+		<xsd:complexContent>
+			<xsd:extension base="tRootElement"/>
+		</xsd:complexContent>
+	</xsd:complexType>			
+
+	<xsd:element name="exclusiveGateway" type="tExclusiveGateway" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tExclusiveGateway">
+		<xsd:complexContent>
+			<xsd:extension base="tGateway">
+				<xsd:attribute name="default" type="xsd:IDREF" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+	
+	<xsd:element name="expression" type="tExpression"/>
+	<xsd:complexType name="tExpression">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElementWithMixedContent"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="extension" type="tExtension"/>
+	<xsd:complexType name="tExtension">
+		<xsd:sequence>
+			<xsd:element ref="documentation" minOccurs="0" maxOccurs="unbounded"/>
+		</xsd:sequence>
+		<xsd:attribute name="definition" type="xsd:QName"/>
+		<xsd:attribute name="mustUnderstand" type="xsd:boolean" use="optional" default="false"/>
+	</xsd:complexType>
+	
+	<xsd:element name="flowElement" type="tFlowElement"/>
+	<xsd:complexType name="tFlowElement" abstract="true">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element ref="auditing" minOccurs="0" maxOccurs="1"/>
+					<xsd:element ref="monitoring" minOccurs="0" maxOccurs="1"/>
+					<xsd:element name="categoryValueRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="flowNode" type="tFlowNode"/>
+	<xsd:complexType name="tFlowNode" abstract="true">
+		<xsd:complexContent>
+			<xsd:extension base="tFlowElement">
+				<xsd:sequence>
+					<xsd:element name="incoming" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="outgoing" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+
+	<xsd:element name="formalExpression" type="tFormalExpression" substitutionGroup="expression"/>
+	<xsd:complexType name="tFormalExpression" mixed="true">
+		<xsd:complexContent>
+			<xsd:extension base="tExpression">
+				<xsd:attribute name="language" type="xsd:anyURI" use="optional"/>
+				<xsd:attribute name="evaluatesToTypeRef" type="xsd:QName"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="gateway" type="tGateway" abstract="true"/>
+	<xsd:complexType name="tGateway">
+		<xsd:complexContent>
+			<xsd:extension base="tFlowNode">
+				<xsd:attribute name="gatewayDirection" type="tGatewayDirection" default="unspecified"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+	
+	<xsd:simpleType name="tGatewayDirection">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="unspecified"/>
+			<xsd:enumeration value="converging"/>
+			<xsd:enumeration value="diverging"/>
+			<xsd:enumeration value="mixed"/>
+		</xsd:restriction>
+	</xsd:simpleType>	
+	
+	<xsd:element name="globalBusinessRuleTask" type="tGlobalBusinessRuleTask" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tGlobalBusinessRuleTask">
+		<xsd:complexContent>
+			<xsd:extension base="tGlobalTask"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="globalChoreographyTask" type="tGlobalChoreographyTask" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tGlobalChoreographyTask">
+		<xsd:complexContent>
+			<xsd:extension base="tCallableElement">
+				<xsd:sequence>
+					<xsd:element ref="participant" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="messageFlow" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="initiatingParticipantRef" type="xsd:QName"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+	
+	<xsd:element name="globalCommunication" type="tGlobalCommunication" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tGlobalCommunication">
+		<xsd:complexContent>
+			<xsd:extension base="tCallableElement">
+				<xsd:sequence>
+					<xsd:element ref="participant" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="messageFlow" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="correlationKey" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="globalManualTask" type="tGlobalManualTask" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tGlobalManualTask">
+		<xsd:complexContent>
+			<xsd:extension base="tGlobalTask"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="globalScriptTask" type="tGlobalScriptTask"  substitutionGroup="rootElement"/>
+	<xsd:complexType name="tGlobalScriptTask">
+		<xsd:complexContent>
+			<xsd:extension base="tGlobalTask">
+				<xsd:sequence>
+					<xsd:element ref="script" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="scriptLanguage" type="xsd:anyURI"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="globalTask" type="tGlobalTask" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tGlobalTask">
+		<xsd:complexContent>
+			<xsd:extension base="tCallableElement">
+				<xsd:sequence>
+					<xsd:element ref="performer" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="globalUserTask" type="tGlobalUserTask" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tGlobalUserTask">
+		<xsd:complexContent>
+			<xsd:extension base="tGlobalTask">
+				<xsd:sequence>
+					<xsd:element ref="rendering" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="implementation" type="tUserTaskImplementation" default="unspecified"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="group" type="tGroup" substitutionGroup="artifact"/>
+	<xsd:complexType name="tGroup">
+		<xsd:complexContent>
+			<xsd:extension base="tArtifact">
+				<xsd:attribute name="categoryRef" type="xsd:QName" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="humanPerformer" type="tHumanPerformer" substitutionGroup="performer"/>
+	<xsd:complexType name="tHumanPerformer">
+		<xsd:complexContent>
+			<xsd:extension base="tPerformer"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="implicitThrowEvent" type="tImplicitThrowEvent" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tImplicitThrowEvent">
+		<xsd:complexContent>
+			<xsd:extension base="tThrowEvent"/>
+		</xsd:complexContent>
+	</xsd:complexType>				
+	
+	<xsd:element name="inclusiveGateway" type="tInclusiveGateway" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tInclusiveGateway">
+		<xsd:complexContent>
+			<xsd:extension base="tGateway">
+				<xsd:attribute name="default" type="xsd:IDREF" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+	
+	<xsd:element name="inputSet" type="tInputSet" />
+	<xsd:complexType name="tInputSet">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element name="dataInputRefs" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="optionalInputRefs" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="whileExecutingInputRefs" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="outputSetRefs" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string" />
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="interface" type="tInterface" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tInterface">
+		<xsd:complexContent>
+			<xsd:extension base="tRootElement">
+				<xsd:sequence>
+					<xsd:element ref="operation" minOccurs="1" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string" use="required"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="intermediateCatchEvent" type="tIntermediateCatchEvent" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tIntermediateCatchEvent">
+		<xsd:complexContent>
+			<xsd:extension base="tCatchEvent"/>
+		</xsd:complexContent>
+	</xsd:complexType>			
+
+	<xsd:element name="intermediateThrowEvent" type="tIntermediateThrowEvent" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tIntermediateThrowEvent">
+		<xsd:complexContent>
+			<xsd:extension base="tThrowEvent"/>
+		</xsd:complexContent>
+	</xsd:complexType>				
+
+	<xsd:element name="ioBinding" type="tInputOutputBinding" />
+	<xsd:complexType name="tInputOutputBinding">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:attribute name="operationRef" type="xsd:QName" use="required"/>
+				<xsd:attribute name="inputDataRef" type="xsd:IDREF" use="required"/>
+				<xsd:attribute name="outputDataRef" type="xsd:IDREF" use="required"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="ioSpecification" type="tInputOutputSpecification" />
+	<xsd:complexType name="tInputOutputSpecification">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element ref="dataInput" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="dataOutput" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="inputSet" minOccurs="1" maxOccurs="unbounded"/>
+					<xsd:element ref="outputSet" minOccurs="1" maxOccurs="unbounded"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="itemDefinition" type="tItemDefinition" substitutionGroup="rootElement"/>	
+	<xsd:complexType name="tItemDefinition">
+		<xsd:complexContent>
+			<xsd:extension base="tRootElement">
+				<xsd:attribute name="structureRef" type="xsd:QName"/>
+				<xsd:attribute name="isCollection" type="xsd:boolean" default="false"/>
+				<xsd:attribute name="itemKind" type="tItemKind" default="Information"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>		
+	
+	<xsd:simpleType name="tItemKind">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="Information"/>
+			<xsd:enumeration value="Physical"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+
+	<xsd:element name="lane" type="tLane"/>
+	<xsd:complexType name="tLane">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element name="partitionElement" type="tBaseElement" minOccurs="0" maxOccurs="1"/>
+					<xsd:element name="flowElementRef" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="childLaneSet" type="tLaneSet" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="partitionElementRef" type="xsd:IDREF"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="laneSet" type="tLaneSet"/>
+	<xsd:complexType name="tLaneSet">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element ref="lane" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="linkEventDefinition" type="tLinkEventDefinition" substitutionGroup="eventDefinition"/>
+	<xsd:complexType name="tLinkEventDefinition">
+		<xsd:complexContent>
+			<xsd:extension base="tEventDefinition">
+				<xsd:attribute name="name" type="xsd:string" use="required"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="loopCharacteristics" type="tLoopCharacteristics"/>
+	<xsd:complexType name="tLoopCharacteristics" abstract="true">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement"/>
+		</xsd:complexContent>
+	</xsd:complexType>	
+
+	<xsd:element name="manualTask" type="tManualTask" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tManualTask">
+		<xsd:complexContent>
+			<xsd:extension base="tTask"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="message" type="tMessage" substitutionGroup="rootElement"/>	
+	<xsd:complexType name="tMessage">
+		<xsd:complexContent>
+			<xsd:extension base="tRootElement">
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="structureRef" type="xsd:QName"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>		
+	
+	<xsd:element name="messageEventDefinition" type="tMessageEventDefinition" substitutionGroup="eventDefinition"/>
+	<xsd:complexType name="tMessageEventDefinition">
+		<xsd:complexContent>
+			<xsd:extension base="tEventDefinition">
+				<xsd:sequence>
+					<xsd:element name="operationRef" type="xsd:QName" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="messageRef" type="xsd:QName"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="messageFlow" type="tMessageFlow"/>
+	<xsd:complexType name="tMessageFlow">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:attribute name="name" type="xsd:string" use="optional"/>
+				<xsd:attribute name="sourceRef" type="xsd:QName" use="required"/>
+				<xsd:attribute name="targetRef" type="xsd:QName" use="required"/>
+				<xsd:attribute name="messageRef" type="xsd:QName"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="messageFlowAssociation" type="tMessageFlowAssociation"/>
+	<xsd:complexType name="tMessageFlowAssociation">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:attribute name="innerMessageFlowRef" type="xsd:QName" use="required"/>
+				<xsd:attribute name="outerMessageFlowRef" type="xsd:QName" use="required"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="monitoring" type="tMonitoring"/>
+	<xsd:complexType name="tMonitoring">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement"/>
+		</xsd:complexContent>
+	</xsd:complexType>	
+
+	<xsd:element name="multiInstanceLoopCharacteristics" type="tMultiInstanceLoopCharacteristics"  substitutionGroup="loopCharacteristics"/>
+	<xsd:complexType name="tMultiInstanceLoopCharacteristics">
+		<xsd:complexContent>
+			<xsd:extension base="tLoopCharacteristics">
+				<xsd:sequence>
+					<xsd:element name="loopCardinality" type="tExpression" minOccurs="0" maxOccurs="1"/>
+					<xsd:element name="loopDataInput" type="tDataInput" minOccurs="0" maxOccurs="1"/>
+					<xsd:element name="loopDataOutput" type="tDataOutput" minOccurs="0" maxOccurs="1"/>
+					<xsd:element name="inputDataItem" type="tProperty" minOccurs="0" maxOccurs="1"/>
+					<xsd:element name="outputDataItem" type="tProperty" minOccurs="0" maxOccurs="1"/>
+					<xsd:element ref="complexBehaviorDefinition" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="completionCondition" type="tExpression" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="isSequential" type="xsd:boolean" default="false"/>
+				<xsd:attribute name="behavior" type="tMultiInstanceFlowCondition" default="all"/>
+				<xsd:attribute name="oneBehaviorEventRef" type="xsd:QName" use="optional"/>
+				<xsd:attribute name="noneBehaviorEventRef" type="xsd:QName" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+	
+	<xsd:simpleType name="tMultiInstanceFlowCondition">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="none"/>
+			<xsd:enumeration value="one"/>
+			<xsd:enumeration value="all"/>
+			<xsd:enumeration value="complex"/>
+		</xsd:restriction>
+	</xsd:simpleType>	
+	
+	<xsd:element name="operation" type="tOperation"/>
+	<xsd:complexType name="tOperation">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element name="inMessageRef" type="xsd:QName" minOccurs="1" maxOccurs="1"/>
+					<xsd:element name="outMessageRef" type="xsd:QName" minOccurs="0" maxOccurs="1"/>
+					<xsd:element name="errorRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string" use="required"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="outputSet" type="tOutputSet" />
+	<xsd:complexType name="tOutputSet">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element name="dataOutputRefs" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="optionalOutputRefs" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="whileExecutingOutputRefs" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="inputSetRefs" type="xsd:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="parallelGateway" type="tParallelGateway" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tParallelGateway">
+		<xsd:complexContent>
+			<xsd:extension base="tGateway"/>
+		</xsd:complexContent>
+	</xsd:complexType>	
+
+	<xsd:element name="participant" type="tParticipant"/>
+	<xsd:complexType name="tParticipant">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element name="interfaceRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="endPointRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="participantMultiplicity" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="partnerRoleRef" type="xsd:QName" use="optional"/>
+				<xsd:attribute name="partnerEntityRef" type="xsd:QName" use="optional"/>
+				<xsd:attribute name="processRef" type="xsd:QName" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="participantAssociation" type="tParticipantAssociation"/>
+	<xsd:complexType name="tParticipantAssociation">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element name="innerParticipantRef" type="xsd:QName" minOccurs="1" maxOccurs="1"/>
+					<xsd:element name="outerParticipantRef" type="xsd:QName" minOccurs="1" maxOccurs="1"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="participantMultiplicity" type="tParticipantMultiplicity"/>
+	<xsd:complexType name="tParticipantMultiplicity">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:attribute name="minimum" type="xsd:int"/>
+				<xsd:attribute name="maximum" type="xsd:int"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="partnerEntity" type="tPartnerEntity" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tPartnerEntity">
+		<xsd:complexContent>
+			<xsd:extension base="tRootElement">
+				<xsd:attribute name="name" type="xsd:string"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="partnerRole" type="tPartnerRole" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tPartnerRole">
+		<xsd:complexContent>
+			<xsd:extension base="tRootElement">
+				<xsd:attribute name="name" type="xsd:string"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="performer" type="tPerformer" substitutionGroup="activityResource"/>
+	<xsd:complexType name="tPerformer">
+		<xsd:complexContent>
+			<xsd:extension base="tActivityResource"/>
+		</xsd:complexContent>
+	</xsd:complexType>	
+	
+	<xsd:element name="potentialOwner" type="tPotentialOwner" substitutionGroup="performer"/>
+	<xsd:complexType name="tPotentialOwner">
+		<xsd:complexContent>
+			<xsd:extension base="tHumanPerformer"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="process" type="tProcess" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tProcess">
+		<xsd:complexContent>
+			<xsd:extension base="tCallableElement">
+				<xsd:sequence>
+					<xsd:element ref="auditing" minOccurs="0" maxOccurs="1"/>
+					<xsd:element ref="monitoring" minOccurs="0" maxOccurs="1"/>
+					<xsd:element ref="property" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="laneSet" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="flowElement" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="artifact" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="supports" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="processType" type="tProcessType" default="none"/>
+				<xsd:attribute name="isClosed" type="xsd:boolean" default="false"/>
+				<xsd:attribute name="definitionalCollaborationRef" type="xsd:QName" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:simpleType name="tProcessType">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="none"/>
+			<xsd:enumeration value="executable"/>
+			<xsd:enumeration value="non-executable"/>
+			<xsd:enumeration value="public"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+
+	<xsd:element name="property" type="tProperty" />
+	<xsd:complexType name="tProperty">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element ref="dataState" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="itemSubjectRef" type="xsd:QName"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="receiveTask" type="tReceiveTask" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tReceiveTask">
+		<xsd:complexContent>
+			<xsd:extension base="tTask">
+				<xsd:attribute name="implementation" type="tServiceImplementation" default="WebService"/>
+				<xsd:attribute name="instantiate" type="xsd:boolean" default="false"/>
+				<xsd:attribute name="messageRef" type="xsd:QName" use="optional"/>
+				<xsd:attribute name="operationRef" type="xsd:QName" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+	
+	<xsd:element name="relationship" type="tRelationship"/>
+	<xsd:complexType name="tRelationship">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element name="source" type="xsd:QName" minOccurs="1" maxOccurs="unbounded"/>
+					<xsd:element name="target" type="xsd:QName" minOccurs="1" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="type" type="xsd:string" use="required"/>
+				<xsd:attribute name="direction" type="tRelationshipDirection"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+
+	<xsd:simpleType name="tRelationshipDirection">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="none"/>
+			<xsd:enumeration value="forward"/>
+			<xsd:enumeration value="backward"/>
+			<xsd:enumeration value="both"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	
+	<xsd:element name="rendering" type="tRendering"/>
+	<xsd:complexType name="tRendering">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="resource" type="tResource" substitutionGroup="rootElement"/>
+	<xsd:complexType name="tResource">
+		<xsd:complexContent>
+			<xsd:extension base="tRootElement">
+				<xsd:sequence>
+					<xsd:element ref="resourceParameter" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="name" type="xsd:string" use="required"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="resourceAssignmentExpression" type="tResourceAssignmentExpression"/>
+	<xsd:complexType name="tResourceAssignmentExpression">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element ref="expression" minOccurs="1" maxOccurs="1"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+
+	<xsd:element name="resourceParameter" type="tResourceParameter"/>
+	<xsd:complexType name="tResourceParameter">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="type" type="xsd:QName"/>
+				<xsd:attribute name="isRequired" type="xsd:boolean"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="resourceParameterBinding" type="tResourceParameterBinding"/>
+	<xsd:complexType name="tResourceParameterBinding">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement">
+				<xsd:sequence>
+					<xsd:element ref="expression" minOccurs="1" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="parameterRef" type="xsd:QName" use="required"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+
+	<xsd:element name="rootElement" type="tRootElement"/>
+	<xsd:complexType name="tRootElement" abstract="true">
+		<xsd:complexContent>
+			<xsd:extension base="tBaseElement"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="scriptTask" type="tScriptTask" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tScriptTask">
+		<xsd:complexContent>
+			<xsd:extension base="tTask">
+				<xsd:sequence>
+					<xsd:element ref="script" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="scriptLanguage" type="xsd:anyURI"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>		
+	
+	<xsd:element name="script" type="tScript"/>
+	<xsd:complexType name="tScript" mixed="true">
+		<xsd:sequence>
+			<xsd:any namespace="##any" processContents="lax" minOccurs="0"/>
+		</xsd:sequence>
+	</xsd:complexType>	
+
+	<xsd:element name="sendTask" type="tSendTask" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tSendTask">
+		<xsd:complexContent>
+			<xsd:extension base="tTask">
+				<xsd:attribute name="implementation" type="tServiceImplementation" default="WebService"/>
+				<xsd:attribute name="messageRef" type="xsd:QName" use="optional"/>
+				<xsd:attribute name="operationRef" type="xsd:QName" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+
+	<xsd:element name="sequenceFlow" type="tSequenceFlow" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tSequenceFlow">
+		<xsd:complexContent>
+			<xsd:extension base="tFlowElement">
+				<xsd:sequence>
+					<xsd:element name="conditionExpression"  type="tExpression" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+				<xsd:attribute name="sourceRef" type="xsd:IDREF" use="required"/>
+				<xsd:attribute name="targetRef" type="xsd:IDREF" use="required"/>
+				<xsd:attribute name="isImmediate" type="xsd:boolean" default="true"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="serviceTask" type="tServiceTask" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tServiceTask">
+		<xsd:complexContent>
+			<xsd:extension base="tTask">
+				<xsd:attribute name="implementation" type="tServiceImplementation" default="WebService"/>
+				<xsd:attribute name="operationRef" type="xsd:QName" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+	
+	<xsd:simpleType name="tServiceImplementation">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="WebService"/>
+			<xsd:enumeration value="Other"/>
+			<xsd:enumeration value="Unspecified"/>
+		</xsd:restriction>
+	</xsd:simpleType>
+	
+	<xsd:element name="signal" type="tSignal" substitutionGroup="rootElement"/>	
+	<xsd:complexType name="tSignal">
+		<xsd:complexContent>
+			<xsd:extension base="tRootElement">
+				<xsd:attribute name="name" type="xsd:string"/>
+				<xsd:attribute name="structureRef" type="xsd:QName"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+
+	<xsd:element name="signalEventDefinition" type="tSignalEventDefinition" substitutionGroup="eventDefinition"/>
+	<xsd:complexType name="tSignalEventDefinition">
+		<xsd:complexContent>
+			<xsd:extension base="tEventDefinition">
+				<xsd:attribute name="signalRef" type="xsd:QName"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="standardLoopCharacteristics" type="tStandardLoopCharacteristics"  substitutionGroup="loopCharacteristics"/>
+	<xsd:complexType name="tStandardLoopCharacteristics">
+		<xsd:complexContent>
+			<xsd:extension base="tLoopCharacteristics">
+				<xsd:sequence>
+					<xsd:element name="loopCondition" type="tExpression" minOccurs="0"/>
+				</xsd:sequence>
+				<xsd:attribute name="testBefore" type="xsd:boolean" default="false"/>
+				<xsd:attribute name="loopMaximum" type="xsd:integer" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>	
+
+	<xsd:element name="startEvent" type="tStartEvent" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tStartEvent">
+		<xsd:complexContent>
+			<xsd:extension base="tCatchEvent">
+				<xsd:attribute name="isInterrupting" type="xsd:boolean" default="false"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>			
+	
+	<xsd:element name="subConversation" type="tSubConversation" substitutionGroup="conversationNode"/>
+	<xsd:complexType name="tSubConversation">
+		<xsd:complexContent>
+			<xsd:extension base="tConversationNode">
+				<xsd:sequence>
+					<xsd:element ref="conversationNode" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="artifact" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="correlationKeyRef" type="xsd:QName" use="optional"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="subProcess" type="tSubProcess" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tSubProcess">
+		<xsd:complexContent>
+			<xsd:extension base="tActivity">
+				<xsd:sequence>
+					<xsd:element ref="flowElement" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="artifact" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="triggeredByEvent" type="xsd:boolean" default="false"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="task" type="tTask" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tTask">
+		<xsd:complexContent>
+			<xsd:extension base="tActivity"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:element name="terminateEventDefinition" type="tTerminateEventDefinition" substitutionGroup="eventDefinition"/>
+	<xsd:complexType name="tTerminateEventDefinition">
+		<xsd:complexContent>
+			<xsd:extension base="tEventDefinition"/>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="textAnnotation" type="tTextAnnotation" substitutionGroup="artifact"/>
+	<xsd:complexType name="tTextAnnotation">
+		<xsd:complexContent>
+			<xsd:extension base="tArtifact">
+				<xsd:sequence>
+					<xsd:element ref="text" minOccurs="0" maxOccurs="1"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="text" type="tText"/>
+	<xsd:complexType name="tText" mixed="true">
+		<xsd:sequence>
+			<xsd:any namespace="##any" processContents="lax" minOccurs="0"/>
+		</xsd:sequence>
+	</xsd:complexType>
+
+	<xsd:element name="throwEvent" type="tThrowEvent"/>
+	<xsd:complexType name="tThrowEvent" abstract="true">
+		<xsd:complexContent>
+			<xsd:extension base="tEvent">
+				<xsd:sequence>
+					<xsd:element ref="dataInput" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="dataInputAssociation" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element ref="inputSet" minOccurs="0" maxOccurs="1"/>
+					<xsd:element ref="eventDefinition" minOccurs="0" maxOccurs="unbounded"/>
+					<xsd:element name="eventDefinitionRef" type="xsd:QName" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>			
+	
+	<xsd:element name="timerEventDefinition" type="tTimerEventDefinition" substitutionGroup="eventDefinition"/>
+	<xsd:complexType name="tTimerEventDefinition">
+		<xsd:complexContent>
+			<xsd:extension base="tEventDefinition">
+				<xsd:choice>
+					<xsd:element name="timeDate" type="tExpression" minOccurs="0" maxOccurs="1"/>
+					<xsd:element name="timeCycle" type="tExpression" minOccurs="0" maxOccurs="1"/>
+				</xsd:choice>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:element name="transaction" type="tTransaction" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tTransaction">
+		<xsd:complexContent>
+			<xsd:extension base="tActivity">
+				<xsd:attribute name="method" type="tTransactionMethod" default="compensate"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+	
+	<xsd:simpleType name="tTransactionMethod">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="compensate"/>
+			<xsd:enumeration value="image"/>
+			<xsd:enumeration value="store"/>
+		</xsd:restriction>
+	</xsd:simpleType>	
+	
+	<xsd:element name="userTask" type="tUserTask" substitutionGroup="flowElement"/>
+	<xsd:complexType name="tUserTask">
+		<xsd:complexContent>
+			<xsd:extension base="tTask">
+				<xsd:sequence>
+					<xsd:element ref="rendering" minOccurs="0" maxOccurs="unbounded"/>
+				</xsd:sequence>
+				<xsd:attribute name="implementation" type="tUserTaskImplementation" default="unspecified"/>
+			</xsd:extension>
+		</xsd:complexContent>
+	</xsd:complexType>
+
+	<xsd:simpleType name="tUserTaskImplementation">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="unspecified"/>
+			<xsd:enumeration value="other"/>
+			<xsd:enumeration value="webService"/>
+			<xsd:enumeration value="humanTaskWebService"/>
+		</xsd:restriction>
+	</xsd:simpleType>	
+
+</xsd:schema>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,54 @@
+package org.drools.bpmn2;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderError;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.io.ResourceFactory;
+import org.drools.process.instance.impl.demo.SystemOutWorkItemHandler;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+public class SimpleBPMNProcessTest extends TestCase {
+
+	public void testMinimalProcess() throws Exception {
+		KnowledgeBase kbase = createKnowledgeBase("BPMN2-MinimalProcess.xml");
+		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+		ksession.startProcess("Minimal");
+	}
+
+	public void testEvaluationProcess() throws Exception {
+		KnowledgeBase kbase = createKnowledgeBase("BPMN2-EvaluationProcess.xml");
+		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+		ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
+		ksession.getWorkItemManager().registerWorkItemHandler("RegisterRequest", new SystemOutWorkItemHandler());
+		Map<String, Object> params = new HashMap<String, Object>();
+		params.put("employee", "UserId-12345");
+		ksession.startProcess("Evaluation", params);
+	}
+
+	private KnowledgeBase createKnowledgeBase(String process) throws Exception {
+		KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
+		((PackageBuilderConfiguration) conf).initSemanticModules();
+		((PackageBuilderConfiguration) conf).loadSemanticModule("BPMN2SemanticModule.conf");
+		KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
+		kbuilder.add(ResourceFactory.newClassPathResource(process), ResourceType.DRF);
+		if (!kbuilder.getErrors().isEmpty()) {
+			for (KnowledgeBuilderError error: kbuilder.getErrors()) {
+				System.err.println(error);
+			}
+			throw new IllegalArgumentException("Errors while parsing knowledge base");
+		}
+		KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+		kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+		return kbase;
+	}
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+             targetNamespace="http://www.example.org/EvaluationExample"
+             typeLanguage="http://www.java.com/javaTypes"
+             expressionLanguage="http://www.mvel.org/2.0"
+             xmlns="http://schema.omg.org/spec/BPMN/2.0"
+             xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+             xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+             xmlns:tns="http://www.example.org/EvaluationExample">
+
+  <!-- resources -->
+  <resource id="projectManager" name="Project Manager"/>
+  <resource id="humanResourceManager" name="HR Manager"/>
+  
+  <!-- item definitions -->
+  <itemDefinition id="employeeId" structureRef="java.lang.String" />
+  
+  <process id="Evaluation" name="Evaluation Process">
+    
+    <!-- process variables -->
+    <property id="employee" itemSubjectRef="tns:employeeId" />
+  
+    <!-- nodes -->  
+    <startEvent id="StartProcess"/>
+    <scriptTask id="Log" scriptLanguage="java">
+      <script>System.out.println("Processing evaluation for employee " + employee);</script>
+    </scriptTask>
+    <parallelGateway id="Diverge" gatewayDirection="diverging"/>
+    <task id="RegisterRequest" name="RegisterRequest">
+      <ioSpecification>
+        <dataInput id="employeeInputSet" name="employeeId" itemSubjectRef="tns:employeeId" />
+        <inputSet>
+          <dataInputRefs>employeeInputSet</dataInputRefs>
+        </inputSet>
+        <outputSet/>
+      </ioSpecification>
+      <dataInputAssociation>
+        <sourceRef>employee</sourceRef>
+        <targetRef>employeeInputSet</targetRef>
+      </dataInputAssociation>
+    </task>
+    <userTask id="Two">
+    </userTask>
+    <parallelGateway id="Converge" gatewayDirection="converging"/>
+    <endEvent id="EndProcess"/>
+    
+    <!-- connections -->
+    <sequenceFlow sourceRef="StartProcess" targetRef="Log"/>
+    <sequenceFlow sourceRef="Log" targetRef="Diverge"/>
+    <sequenceFlow sourceRef="Diverge" targetRef="RegisterRequest"/>
+    <sequenceFlow sourceRef="Diverge" targetRef="Two"/>
+    <sequenceFlow sourceRef="RegisterRequest" targetRef="Converge"/>
+    <sequenceFlow sourceRef="Two" targetRef="Converge"/>
+    <sequenceFlow sourceRef="Converge" targetRef="EndProcess"/>
+    
+  </process>
+</definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcess.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcess.xml	2009-07-27 00:07:17 UTC (rev 28471)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+             targetNamespace="http://www.example.org/MinimalExample"
+             typeLanguage="http://www.java.com/javaTypes"
+             expressionLanguage="http://www.mvel.org/2.0"
+             xmlns="http://schema.omg.org/spec/BPMN/2.0"
+             xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+             xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+             xmlns:tns="http://www.example.org/MinimalExample">
+
+  <process id="Minimal" name="Minimal Process">
+    <startEvent id="StartProcess"/>
+    <sequenceFlow sourceRef="StartProcess" targetRef="Hello"/>
+    <scriptTask id="Hello" scriptLanguage="java">
+      <script>System.out.println("Hello World");</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="Hello" targetRef="EndProcess"/>
+    <endEvent id="EndProcess"/>
+  </process>
+</definitions>



More information about the jboss-svn-commits mailing list