<?xml version="1.0" encoding="UTF-8"?>

<!--
   This file contains RDF encoding of the UML package Behavioral Elements / State Machines.
   Reference: UML 1.3 (ftp://ftp.omg.org/pub/docs/ad/99-06-08.pdf), page 166

   Author: Sergey Melnik (melnik@db.stanford.edu)
   Source: http://www-db.stanford.edu/~melnik/rdf/uml/
   Last modified: Apr 25, 2000

-->
   

<!DOCTYPE rdf:RDF [
 <!ENTITY rdf  'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
 <!ENTITY dc 'http://purl.org/dc/elements/1.1/'>
 <!ENTITY c 'http://www.omg.org/uml/1.3/Foundation.Core.'>
 <!ENTITY d 'http://www.omg.org/uml/1.3/Foundation.Data_Types.'>
 <!ENTITY s 'http://www.omg.org/uml/1.3/Behavioral_Elements.State_Machines.'>
]>

<rdf:RDF
   xmlns:rdf="&rdf;"
   xmlns:c="&c;"
   xmlns:d="&d;"
   xmlns:s="&s;"
   xmlns="&s;"
>

<!-- ==================== classes ====================== -->

<c:Class rdf:ID="&s;StateMachine"/>

<c:Class rdf:ID="&s;Guard">
  <c:Classifier.feature>
    <c:Attribute rdf:ID="&s;Guard.expression">
      <c:StructuralFeature.type rdf:resource="&d;BooleanExpression"/>
    </c:Attribute>
  </c:Classifier.feature>
</c:Class>

<c:Class rdf:ID="&s;StateVertex"/>

<c:Class rdf:ID="&s;Transition"/>

<c:Class rdf:ID="&s;State"/>

<c:Class rdf:ID="&s;SynchState">
  <c:Classifier.feature>
    <c:Attribute rdf:ID="&s;SynchState.bound">
      <c:StructuralFeature.type rdf:resource="&d;UnlimitedInteger"/>
    </c:Attribute>
  </c:Classifier.feature>
</c:Class>

<c:Class rdf:ID="&s;Pseudostate">
  <c:Classifier.feature>
    <c:Attribute rdf:ID="&s;Pseudostate.kind">
      <c:StructuralFeature.type rdf:resource="&d;PseudostateKind"/>
    </c:Attribute>
  </c:Classifier.feature>
</c:Class>

<c:Class rdf:ID="&s;SubState">
  <c:Classifier.feature>
    <c:Attribute rdf:ID="&s;SubState.referenceState">
      <c:StructuralFeature.type rdf:resource="&d;Name"/>
    </c:Attribute>
  </c:Classifier.feature>
</c:Class>

<c:Class rdf:ID="&s;Event"/>

<c:Class rdf:ID="&s;CompositeState">
  <c:Classifier.feature>
    <c:Attribute rdf:ID="&s;CompositeState.isConcurrent">
      <c:StructuralFeature.type rdf:resource="&d;Boolean"/>
    </c:Attribute>
  </c:Classifier.feature>
</c:Class>

<c:Class rdf:ID="&s;SimpleState"/>

<c:Class rdf:ID="&s;FinalState"/>

<c:Class rdf:ID="&s;SubmachineState"/>




<!-- =============== generalizations ================== -->

<c:Generalization>
  <c:Generalization.child rdf:resource="&s;StateMachine"/>
  <c:Generalization.parent rdf:resource="&c;ModelElement"/>
</c:Generalization>

<c:Generalization>
  <c:Generalization.child rdf:resource="&s;StateVertex"/>
  <c:Generalization.parent rdf:resource="&c;ModelElement"/>
</c:Generalization>

<c:Generalization>
  <c:Generalization.child rdf:resource="&s;Transition"/>
  <c:Generalization.parent rdf:resource="&c;ModelElement"/>
</c:Generalization>

<c:Generalization>
  <c:Generalization.child rdf:resource="&s;Guard"/>
  <c:Generalization.parent rdf:resource="&c;ModelElement"/>
</c:Generalization>

<c:Generalization>
  <c:Generalization.child rdf:resource="&s;State"/>
  <c:Generalization.parent rdf:resource="&s;StateVertex"/>
</c:Generalization>

<c:Generalization>
  <c:Generalization.child rdf:resource="&s;SynchState"/>
  <c:Generalization.parent rdf:resource="&s;StateVertex"/>
</c:Generalization>

<c:Generalization>
  <c:Generalization.child rdf:resource="&s;Pseudostate"/>
  <c:Generalization.parent rdf:resource="&s;StateVertex"/>
</c:Generalization>

<c:Generalization>
  <c:Generalization.child rdf:resource="&s;SubState"/>
  <c:Generalization.parent rdf:resource="&s;StateVertex"/>
</c:Generalization>

<c:Generalization>
  <c:Generalization.child rdf:resource="&s;CompositeState"/>
  <c:Generalization.parent rdf:resource="&s;State"/>
</c:Generalization>

<c:Generalization>
  <c:Generalization.child rdf:resource="&s;SimpleState"/>
  <c:Generalization.parent rdf:resource="&s;State"/>
</c:Generalization>

<c:Generalization>
  <c:Generalization.child rdf:resource="&s;FinalState"/>
  <c:Generalization.parent rdf:resource="&s;State"/>
</c:Generalization>

<c:Generalization>
  <c:Generalization.child rdf:resource="&s;SubmachineState"/>
  <c:Generalization.parent rdf:resource="&s;CompositeState"/>
</c:Generalization>



<!-- =================== associations ===================== -->

<c:Association>
  <c:Association.connection>
    <rdf:Seq>
      <rdf:_1>
        <c:AssociationEnd rdf:ID="&s;StateMachine.context">
          <c:AssociationEnd.type rdf:resource="&c;ModelElement"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;composite"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_1>
      <rdf:_2>
        <c:AssociationEnd rdf:ID="&c;ModelElement.behavior">
          <c:AssociationEnd.type rdf:resource="&s;StateMachine"/>
          <c:AssociationEnd.multiplicity rdf:resource="&d;unlimited"/>
        </c:AssociationEnd>
      </rdf:_2>
    </rdf:Seq>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
    <rdf:Seq>
      <rdf:_1>
        <c:AssociationEnd rdf:ID="&s;SubmachineState.submachine">
          <c:AssociationEnd.type rdf:resource="&s;StateMachine"/>
          <c:AssociationEnd.multiplicity>1</c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_1>
      <rdf:_2>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;SubmachineState"/>
          <c:AssociationEnd.multiplicity rdf:resource="&d;unlimited"/>
        </c:AssociationEnd>
      </rdf:_2>
    </rdf:Seq>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
    <rdf:Seq>
      <rdf:_1>
        <c:AssociationEnd rdf:ID="&s;CompositeState.subvertex">
          <c:AssociationEnd.type rdf:resource="&s;StateVertex"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper rdf:resource="&d;unlimited"/>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_1>
      <rdf:_2>
        <c:AssociationEnd rdf:ID="&s;StateVertex.container">
          <c:AssociationEnd.type rdf:resource="&s;CompositeState"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;aggregate"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_2>
    </rdf:Seq>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
    <rdf:Seq>
      <rdf:_1>
        <c:AssociationEnd rdf:ID="&s;Transition.source">
          <c:AssociationEnd.type rdf:resource="&s;StateVertex"/>
          <c:AssociationEnd.multiplicity>1</c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_1>
      <rdf:_2>
        <c:AssociationEnd rdf:ID="&s;StateVertex.outgoing">
          <c:AssociationEnd.type rdf:resource="&s;Transition"/>
          <c:AssociationEnd.multiplicity rdf:resource="&d;unlimited"/>
        </c:AssociationEnd>
      </rdf:_2>
    </rdf:Seq>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
    <rdf:Seq>
      <rdf:_1>
        <c:AssociationEnd rdf:ID="&s;Transition.source">
          <c:AssociationEnd.type rdf:resource="&s;StateVertex"/>
          <c:AssociationEnd.multiplicity>1</c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_1>
      <rdf:_2>
        <c:AssociationEnd rdf:ID="&s;StateVertex.outgoing">
          <c:AssociationEnd.type rdf:resource="&s;Transition"/>
          <c:AssociationEnd.multiplicity rdf:resource="&d;unlimited"/>
        </c:AssociationEnd>
      </rdf:_2>
    </rdf:Seq>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
    <rdf:Seq>
      <rdf:_1>
        <c:AssociationEnd rdf:ID="&s;Transition.target">
          <c:AssociationEnd.type rdf:resource="&s;StateVertex"/>
          <c:AssociationEnd.multiplicity>1</c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_1>
      <rdf:_2>
        <c:AssociationEnd rdf:ID="&s;StateVertex.incoming">
          <c:AssociationEnd.type rdf:resource="&s;Transition"/>
          <c:AssociationEnd.multiplicity rdf:resource="&d;unlimited"/>
        </c:AssociationEnd>
      </rdf:_2>
    </rdf:Seq>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
    <rdf:Seq>
      <rdf:_1>
        <c:AssociationEnd rdf:ID="&s;StateMachine.top">
          <c:AssociationEnd.type rdf:resource="&s;State"/>
          <c:AssociationEnd.multiplicity>1</c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_1>
      <rdf:_2>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;StateMachine"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;aggregate"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_2>
    </rdf:Seq>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
    <rdf:Seq>
      <rdf:_1>
        <c:AssociationEnd rdf:ID="&s;StateMachine.transition">
          <c:AssociationEnd.type rdf:resource="&s;Transition"/>
          <c:AssociationEnd.multiplicity rdf:resource="&d;unlimited"/>
        </c:AssociationEnd>
      </rdf:_1>
      <rdf:_2>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;StateMachine"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;aggregate"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_2>
    </rdf:Seq>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
    <rdf:Seq>
      <rdf:_1>
        <c:AssociationEnd rdf:ID="&s;Transition.guard">
          <c:AssociationEnd.type rdf:resource="&s;Guard"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_1>
      <rdf:_2>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;Transition"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;aggregate"/>
          <c:AssociationEnd.multiplicity>1</c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_2>
    </rdf:Seq>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
    <rdf:Seq>
      <rdf:_1>
        <c:AssociationEnd rdf:ID="&s;State.internal">
          <c:AssociationEnd.type rdf:resource="&s;Transition"/>
          <c:AssociationEnd.multiplicity rdf:resource="&d;unlimited"/>
        </c:AssociationEnd>
      </rdf:_1>
      <rdf:_2>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;State"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;aggregate"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_2>
    </rdf:Seq>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
    <rdf:Seq>
      <rdf:_1>
        <c:AssociationEnd rdf:ID="&s;Transition.effect">
          <c:AssociationEnd.type rdf:resource="&s;Action"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_1>
      <rdf:_2>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;Transition"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;aggregate"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_2>
    </rdf:Seq>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
    <rdf:Seq>
      <rdf:_1>
        <c:AssociationEnd rdf:ID="&s;Transition.trigger">
          <c:AssociationEnd.type rdf:resource="&s;Event"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_1>
      <rdf:_2>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;Transition"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;composite"/>
          <c:AssociationEnd.multiplicity rdf:resource="&d;unlimited"/>
        </c:AssociationEnd>
      </rdf:_2>
    </rdf:Seq>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
    <rdf:Seq>
      <rdf:_1>
        <c:AssociationEnd rdf:ID="&s;State.entry">
          <c:AssociationEnd.type rdf:resource="&s;Action"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_1>
      <rdf:_2>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;State"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;aggregate"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_2>
    </rdf:Seq>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
    <rdf:Seq>
      <rdf:_1>
        <c:AssociationEnd rdf:ID="&s;State.exit">
          <c:AssociationEnd.type rdf:resource="&s;Action"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_1>
      <rdf:_2>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;State"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;aggregate"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_2>
    </rdf:Seq>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
    <rdf:Seq>
      <rdf:_1>
        <c:AssociationEnd rdf:ID="&s;State.doActivity">
          <c:AssociationEnd.type rdf:resource="&s;Action"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_1>
      <rdf:_2>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;State"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;aggregate"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_2>
    </rdf:Seq>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
    <rdf:Seq>
      <rdf:_1>
        <c:AssociationEnd rdf:ID="&s;State.deferrableEvent">
          <c:AssociationEnd.type rdf:resource="&s;Event"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper rdf:resource="&d;unlimited"/>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_1>
      <rdf:_2>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;State"/>
          <c:AssociationEnd.multiplicity>
            <d:MultiplicityRange>
              <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
              <d:MultiplicityRange.upper rdf:resource="&d;unlimited"/>
            </d:MultiplicityRange>
          </c:AssociationEnd.multiplicity>
        </c:AssociationEnd>
      </rdf:_2>
    </rdf:Seq>
  </c:Association.connection>
</c:Association>

</rdf:RDF>