<?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: May 07, 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.'>
 <!ENTITY b 'http://www.omg.org/uml/1.3/Behavioral_Elements.Common_Behavior.'>
]>

<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"/>

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

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

<c:Class rdf:ID="&s;TimeEvent">
  <c:Classifier.feature>
    <c:Attribute rdf:ID="&s;TimeEvent.when">
      <c:StructuralFeature.type rdf:resource="&d;TimeExpression"/>
    </c:Attribute>
  </c:Classifier.feature>
</c:Class>

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


<!-- =============== 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>

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

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

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

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



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

<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;StateMachine.context">
          <c:AssociationEnd.type rdf:resource="&c;ModelElement"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;AggregationKind.composite"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&c;ModelElement.behavior">
          <c:AssociationEnd.type rdf:resource="&s;StateMachine"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-*"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;SubmachineState.submachine">
          <c:AssociationEnd.type rdf:resource="&s;StateMachine"/>
          <c:AssociationEnd.multiplicity rdf:resource="#1-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;SubmachineState"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-*"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>


<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;CompositeState.subvertex">
          <c:AssociationEnd.type rdf:resource="&s;StateVertex"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-*"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;StateVertex.container">
          <c:AssociationEnd.type rdf:resource="&s;CompositeState"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;AggregationKind.aggregate"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;Transition.source">
          <c:AssociationEnd.type rdf:resource="&s;StateVertex"/>
          <c:AssociationEnd.multiplicity rdf:resource="#1-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;StateVertex.outgoing">
          <c:AssociationEnd.type rdf:resource="&s;Transition"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-*"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;Transition.target">
          <c:AssociationEnd.type rdf:resource="&s;StateVertex"/>
          <c:AssociationEnd.multiplicity rdf:resource="#1-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;StateVertex.incoming">
          <c:AssociationEnd.type rdf:resource="&s;Transition"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-*"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;StateMachine.top">
          <c:AssociationEnd.type rdf:resource="&s;State"/>
          <c:AssociationEnd.multiplicity rdf:resource="#1-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;StateMachine"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;AggregationKind.aggregate"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;StateMachine.transition">
          <c:AssociationEnd.type rdf:resource="&s;Transition"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-*"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;StateMachine"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;AggregationKind.aggregate"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;Transition.guard">
          <c:AssociationEnd.type rdf:resource="&s;Guard"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;Transition"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;AggregationKind.aggregate"/>
          <c:AssociationEnd.multiplicity rdf:resource="#1-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;State.internal">
          <c:AssociationEnd.type rdf:resource="&s;Transition"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-*"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;State"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;AggregationKind.aggregate"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;Transition.effect">
          <c:AssociationEnd.type rdf:resource="&b;Action"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;Transition"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;AggregationKind.aggregate"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;Transition.trigger">
          <c:AssociationEnd.type rdf:resource="&s;Event"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;Transition"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;AggregationKind.composite"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-*"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;State.entry">
          <c:AssociationEnd.type rdf:resource="&b;Action"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;State"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;AggregationKind.aggregate"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;State.exit">
          <c:AssociationEnd.type rdf:resource="&b;Action"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;State"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;AggregationKind.aggregate"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;State.doActivity">
          <c:AssociationEnd.type rdf:resource="&b;Action"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;State"/>
          <c:AssociationEnd.aggregation rdf:resource="&d;AggregationKind.aggregate"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;State.deferrableEvent">
          <c:AssociationEnd.type rdf:resource="&s;Event"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-*"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd>
          <c:AssociationEnd.type rdf:resource="&s;State"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-*"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&b;Signal.occurrence">
          <c:AssociationEnd.type rdf:resource="&s;SignalEvent"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-*"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;SignalEvent.signal">
          <c:AssociationEnd.type rdf:resource="&b;Signal"/>
          <c:AssociationEnd.multiplicity rdf:resource="#1-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>

<c:Association>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&c;Operation.occurrence">
          <c:AssociationEnd.type rdf:resource="&s;CallEvent"/>
          <c:AssociationEnd.multiplicity rdf:resource="#0-*"/>
        </c:AssociationEnd>
  </c:Association.connection>
  <c:Association.connection>
        <c:AssociationEnd rdf:ID="&s;CallEvent.operation">
          <c:AssociationEnd.type rdf:resource="&c;Operation"/>
          <c:AssociationEnd.multiplicity rdf:resource="#1-1"/>
        </c:AssociationEnd>
  </c:Association.connection>
</c:Association>


<!-- =================== some convenient abbreviations ===================== -->

<d:Multiplicity rdf:ID="0-1">
  <d:Multiplicity.range>
    <d:MultiplicityRange>
      <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
      <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
    </d:MultiplicityRange>
  </d:Multiplicity.range>
</d:Multiplicity>

<d:Multiplicity rdf:ID="1-1">
  <d:Multiplicity.range>
    <d:MultiplicityRange>
      <d:MultiplicityRange.lower>1</d:MultiplicityRange.lower>
      <d:MultiplicityRange.upper>1</d:MultiplicityRange.upper>
    </d:MultiplicityRange>
  </d:Multiplicity.range>
</d:Multiplicity>

<d:Multiplicity rdf:ID="1-*">
  <d:Multiplicity.range>
    <d:MultiplicityRange>
      <d:MultiplicityRange.lower>1</d:MultiplicityRange.lower>
      <d:MultiplicityRange.upper rdf:resource="&d;UnlimitedInteger.*"/>
    </d:MultiplicityRange>
  </d:Multiplicity.range>
</d:Multiplicity>

<d:Multiplicity rdf:ID="0-*">
  <d:Multiplicity.range>
    <d:MultiplicityRange>
      <d:MultiplicityRange.lower>0</d:MultiplicityRange.lower>
      <d:MultiplicityRange.upper rdf:resource="&d;UnlimitedInteger.*"/>
    </d:MultiplicityRange>
  </d:Multiplicity.range>
</d:Multiplicity>


</rdf:RDF>