title: How to extend BPMN 2.0
body: <p>Currently, I'm investigating the ways to extend BPMN. I want to create a new task type with less properties than a task and also with some non-BPMN properties and a new type of pool.</p>
  
  <p>Until now I saw that  people mentioned of two ways, using Extension Points and using an external schema. Unfortunately in Internet, I could not find that many resources to understand these methods extensively. </p>
  
  <p>What I understood from these methods:</p>
  
  <ul>
  <li><p><strong>Extension Points:</strong> There are some standard extension points provided by BPMN engine vendors (Aktiviti, jBPM, etc...). For instance in Activiti there is a Custom Service Task which can be extended with user desired properties but I did not find any resources if this newly created extension task can be deployed on the Aktiviti workflow engine and also it would be nice to see the new BPMN schema for this extension.</p></li>
  <li><p><strong>Using an external schema:</strong> Defining desired properties in an external schema and referencing this schema from Semantic.xsd. In this case we will also need to adapt our Workflow Engine but it's more flexible than the method I mentioned before or am I missing missing something? </p></li>
  </ul>
  
  <p>The only thing that is not clear is this method does not extend directly task definition so these properties can be used by every element in BPMN?</p>
  
  <p>An example external schema is:</p>
  
  <pre><code>    &lt;?xml version="1.0" encoding="UTF-8"?&gt;
      &lt;xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified"
      xmlns="http://myproject.org//bpmn/extensions/NEWTask"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
      xmlns:exvar="http://myproject.org/externalDefs"
      targetNamespace="http://myproject.org//bpmn/extensions/NEWTask"
      &gt; 
      &lt;xsd:import namespace="http://www.omg.org/spec/BPMN/20100524/MODEL"             schemaLocation="BPMN20.xsd"/&gt;
      &lt;xsd:import schemaLocation="externalDefs.xsd" namespace="http://myproject.org/externalDefs" /&gt;
      &lt;xsd:complexType name="tProperty1" abstract="false"&gt;
          &lt;xsd:sequence&gt;
              &lt;xsd:any namespace="##any" processContents="lax" minOccurs="0" /&gt;
          &lt;/xsd:sequence&gt;
      &lt;/xsd:complexType&gt;
          &lt;xsd:group id="tNEWTask" name="tNEWTask"&gt;
          &lt;xsd:sequence&gt;
              &lt;xsd:element name="Property2" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/&gt;
              &lt;xsd:element name="Property1" type="tProperty1" minOccurs="0" maxOccurs="unbounded"/&gt;
              &lt;xsd:element name="Property2" type="exvar:Varaible1" minOccurs="0" maxOccurs="unbounded"/&gt;
          &lt;/xsd:sequence&gt;
      &lt;/xsd:group&gt;
      &lt;/xsd:schema&gt;
  </code></pre>
  
  <p>Are there any other methods for extending BPMN or any resources that you can point me so that I can have a better insight about this topic? </p>
  
  <p>Any help will be appreciated, thanks in advance!</p>