<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:r2ml="http://www.rewerse.net/I1/2006/R2ML" xmlns:r2mlv="http://www.rewerse.net/I1/2006/R2ML/R2MLV" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns="http://www.w3.org/1999/xhtml"  targetNamespace="http://www.rewerse.net/I1/2006/R2ML" elementFormDefault="qualified" attributeFormDefault="qualified" version="0.5" xml:lang="en">
 <xs:annotation>
  <xs:documentation source="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/R2ML.rdf"/>
 </xs:annotation>
 <xs:import namespace="http://www.rewerse.net/I1/2006/R2ML/R2MLV" schemaLocation="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/r2mlv.xsd"/>
 
 <!-- R2ML annotation elements use Dublin Core -->
 <xs:import namespace="http://purl.org/dc/elements/1.1/" schemaLocation="http://dublincore.org/schemas/xmls/qdc/2006/01/06/dc.xsd"/>
 <!-- Elements for annotations -->
 <xs:element name="Documentation" type="r2ml:Documentation">
  <xs:annotation>
   <xs:documentation>
 R2ML provides a set of annotation elements for specifying information about a rule. The container element for rule annotations in R2ML is r2ml:Documentation. The
following R2ML optional (sub)elements are defined:
<ul>
     <li>
      <a href="#RuleText" class="element">r2ml:RuleText</a> is the rule text. Additionally three optional attributes are provided:
<span class="attribute">r2ml:textFormat</span> express the element content format (the usual values for this attributes
are <code>plain</code>, <code>xml</code>, and <code>xhtml</code>), <span class="attribute">r2ml:ruleVocabularyDiagram</span>, which is denoted by a URI
reference to the UML diagram with rule vocabulary and <span class="attribute">r2ml:ruleDiagram</span>, which denotes a URI reference to the Strelka rule;</li>
     <li>
      <a href="#SourceCode" class="element">r2ml:SourceCode</a> provides an optional attribute <span class="attribute">r2ml:language</span>, which has as a string
value with the source language of the rule. The content of this element is the code of the rule, usually in a &lt;![CDATA[....]]&gt; section in order to avoid problems with the parsing of the rule.</li>
    </ul>
In addition R2ML allows the usage of all Dublin Core elements inside <span class="element">r2ml:Documentation</span>. 
 </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:element name="SourceCode" type="r2ml:SourceCode">
  <xs:annotation>
   <xs:documentation>
 See <a href="#Documentation">r2ml:Documentation</a>. 
 </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:element name="RuleText" type="r2ml:RuleText">
  <xs:annotation>
   <xs:documentation>
 See <a href="#Documentation">r2ml:Documentation</a>. 
 </xs:documentation>
  </xs:annotation>
 </xs:element>
 <!-- Types for rule annotations -->
 <xs:complexType name="Documentation">
  <xs:choice minOccurs="0" maxOccurs="unbounded">
   <xs:element ref="r2ml:RuleText" minOccurs="0" maxOccurs="unbounded"/>
   <xs:element ref="r2ml:SourceCode" minOccurs="0" maxOccurs="unbounded"/>
   <xs:element ref="dc:subject" minOccurs="0" maxOccurs="unbounded"/>
   <xs:element ref="dc:creator" minOccurs="0" maxOccurs="unbounded"/>
   <xs:element ref="dc:contributor" minOccurs="0" maxOccurs="unbounded"/>
   <xs:element ref="dc:title" minOccurs="0" maxOccurs="unbounded"/>
   <xs:element ref="dc:description" minOccurs="0" maxOccurs="unbounded"/>
   <xs:element ref="dc:source" minOccurs="0" maxOccurs="unbounded"/>
   <xs:element ref="dc:type" minOccurs="0" maxOccurs="unbounded"/>
   <xs:element ref="dc:date" minOccurs="0" maxOccurs="unbounded"/>
  </xs:choice>
 </xs:complexType>
 <xs:complexType name="RuleText">
  <xs:simpleContent>
   <xs:extension base="xs:string">
    <xs:attribute name="textFormat" type="xs:string" use="optional"/>
    <xs:attribute name="ruleVocabularyDiagram" type="xs:anyURI" use="optional"/>
    <xs:attribute name="ruleDiagram" type="xs:anyURI" use="optional"/>
   </xs:extension>
  </xs:simpleContent>
 </xs:complexType>
 <xs:complexType name="SourceCode">
  <xs:complexContent>
   <xs:extension base="xs:anyType">
    <xs:attribute name="language" type="xs:string" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="RuleBase" type="r2ml:RuleBase">
  <xs:annotation>
   <xs:documentation>
      A container for a collection of rule sets. 
      The collection contains derivation rules in a form of a 
      <em>Derivation Rule Set</em>, 
      production rules in a form of a <em>Production Rule Set</em> 
      or reaction rules in a form of <em>Reaction Rule Set</em>.
      Any rule base may have an ID for unique identification by means of 
      <span class="attribute">r2ml:ruleBaseID</span> attribute. 
      The UML metamodel is: 
      <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_6.png" alt="RuleBase"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="RuleBase">
  <xs:sequence>
   <xs:element ref="r2mlv:Vocabulary" minOccurs="0"/>
   <xs:element ref="r2ml:RuleSet" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="r2ml:ruleBaseID" use="optional"/>
  <xs:attribute ref="r2ml:externalVocabulary"/>
  <xs:attribute ref="r2ml:externalVocabularyLanguage"/>
 </xs:complexType>
 <!-- Rule sets -->
 <xs:element name="RuleSet" type="r2ml:RuleSet" abstract="true">
  <xs:annotation>
   <xs:documentation>
   The abstract concept of rule set. 
   It specializes in 
   <a href="#IntegrityRuleSet" class="element">r2ml:IntegrityRuleSet</a>, 
   <a href="#DerivationRuleSet" class="element">r2ml:DerivationRuleSet</a>, 
   <a href="#ProductionRuleSet" class="element">r2ml:ProductionRuleSet</a> 
   and <a href="#ReactionRuleSet" class="element">r2ml:ReactionRuleSet</a>. 
   Any rule set may have an ID 
   (the <span class="attribute">r2ml:ruleID</span> attribute) for unique identification. 
   A rule set may declare global variables.  These variables are available through all the rules 
   from the rule set. A rule set may refer to a specific 
   <a href="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/r2mlv.xsd">internal</a> (R2ML) vocabulary with the help of the optional element <span class="element">r2mlv:Vocabulary</span>. If exists,  this vocabulary is intended to be the one the rule set uses.  The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_7.png" alt="RuleSet"/>
   In addition the rule set may refer to an external vocabulary with the help of attributes 
   <span class="attribute">r2ml:externalVocabulary</span> and 
   <span class="attribute">r2ml:externalVocabularyLanguage</span>. The first attribute is 
   the URI of the vocabulary while the second describe the external vocabulary language. R2ML supports three external vocabularies: RDFS, OWL and UML.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="RuleSet" abstract="true">
  <xs:sequence>
   <xs:element ref="r2mlv:Vocabulary" minOccurs="0"/>
   <xs:element ref="r2ml:ruleSetVariables" minOccurs="0"/>
  </xs:sequence>
  <xs:attribute ref="r2ml:ruleSetID" use="optional"/>
  <xs:attribute ref="r2ml:externalVocabulary" use="optional"/>
  <xs:attribute ref="r2ml:externalVocabularyLanguage" use="optional"/>
 </xs:complexType>
 <xs:element name="ruleSetVariables" type="r2ml:ruleSetVariables">
  <xs:annotation>
   <xs:documentation>
    An unordered container for the collection of global variables declarations of the rule set. 
    It must not be empty i.e. it contains at least one of <a href="#GenericVariable" class="element">r2ml:GenericVariable</a>, <a class="element" href="#ObjectVariable">r2ml:ObjectVariable</a> 
    or <a class="element" href="#DataVariable">r2ml:DataVariable</a>.
    </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="ruleSetVariables">
  <xs:sequence>
   <xs:choice minOccurs="0" maxOccurs="unbounded">
    <xs:element ref="r2ml:GenericVariable" minOccurs="0" maxOccurs="unbounded"/>
    <xs:element ref="r2ml:ObjectVariable" minOccurs="0" maxOccurs="unbounded"/>
    <xs:element ref="r2ml:DataVariable" minOccurs="0" maxOccurs="unbounded"/>
   </xs:choice>
  </xs:sequence>
 </xs:complexType>
 <!-- External vocabulary types supported by R2ML -->
 <xs:simpleType name="ExternalVocabularyLanguage">
  <xs:restriction base="xs:string">
   <xs:enumeration value="RDFS"/>
   <xs:enumeration value="OWL"/>
   <xs:enumeration value="UML"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:element name="IntegrityRuleSet" type="r2ml:IntegrityRuleSet" substitutionGroup="r2ml:RuleSet">
  <xs:annotation>
   <xs:documentation>
   This element is designed  to capture a set of integrity rules (integrity constraints). See <a class="element" href="#RuleSet">r2ml:RuleSet</a>.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="IntegrityRuleSet">
  <xs:complexContent>
   <xs:extension base="r2ml:RuleSet">
    <xs:sequence>
     <xs:element ref="r2ml:IntegrityRule" maxOccurs="unbounded"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="DerivationRuleSet" type="r2ml:DerivationRuleSet" substitutionGroup="r2ml:RuleSet">
  <xs:annotation>
   <xs:documentation>
   This element is designed  to capture a set of derivation rules. See <a class="element" href="#RuleSet">r2ml:RuleSet</a>.  
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="DerivationRuleSet">
  <xs:complexContent>
   <xs:extension base="r2ml:RuleSet">
    <xs:sequence>
     <xs:element ref="r2ml:DerivationRule" maxOccurs="unbounded"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="ProductionRuleSet" type="r2ml:ProductionRuleSet" substitutionGroup="r2ml:RuleSet">
  <xs:annotation>
   <xs:documentation>
  This element is designed  to capture a set of production rules. See <a class="element" href="#RuleSet">r2ml:RuleSet</a>.
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="ProductionRuleSet">
  <xs:complexContent>
   <xs:extension base="r2ml:RuleSet">
    <xs:sequence>
     <xs:element ref="r2ml:ProductionRule" maxOccurs="unbounded"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="ReactionRuleSet" type="r2ml:ReactionRuleSet" substitutionGroup="r2ml:RuleSet">
  <xs:annotation>
   <xs:documentation>
     This element is designed  to capture a set of reaction rules. See <a class="element" href="#RuleSet">r2ml:RuleSet</a>. 
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="ReactionRuleSet">
  <xs:complexContent>
   <xs:extension base="r2ml:RuleSet">
    <xs:sequence>
     <xs:element ref="r2ml:ReactionRule" maxOccurs="unbounded"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- Rule -->
 <xs:element name="Rule" type="r2ml:Rule" abstract="true">
  <xs:annotation>
   <xs:documentation>
  The abstract concept of rule. 
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="Rule" abstract="true">
  <xs:sequence>
   <xs:element ref="r2ml:Documentation" minOccurs="0"/>
  </xs:sequence>
  <xs:attribute ref="r2ml:ruleID" use="optional"/>
 </xs:complexType>
 <!-- Integrity Rules -->
 <xs:element name="IntegrityRule" type="r2ml:IntegrityRule" abstract="true" substitutionGroup="r2ml:Rule">
  <xs:annotation>
   <xs:appinfo>constraint must not contain any free variable.</xs:appinfo>
   <xs:documentation>
    Abstract Integrity Rule. It specialize into two kind of constraints <a class="element" href="#AlethicIntegrityRule">r2ml:AlethicIntegrityRule</a> 
    and <a class="element" href="#DeonthicIntegrityRule">r2ml:DeonthicIntegrityRule</a>. 
    The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_8.png" alt="IntegrityRule"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="IntegrityRule" abstract="true">
  <xs:complexContent>
   <xs:extension base="r2ml:Rule">
    <xs:sequence>
     <xs:element ref="r2ml:constraint"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="constraint" type="r2ml:constraint">
  <xs:annotation>
   <xs:documentation>
   constraint
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="constraint">
  <xs:sequence>
   <xs:element ref="r2ml:QuantifiedFormula"/>
  </xs:sequence>
 </xs:complexType>
 <xs:element name="AlethicIntegrityRule" type="r2ml:AlethicIntegrityRule" substitutionGroup="r2ml:IntegrityRule">
  <xs:annotation>
   <xs:documentation>
   Encodes an alethic integrity rule. See <a class="element" href="#IntegrityRule">r2ml:IntegrityRule</a>.
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="AlethicIntegrityRule">
  <xs:complexContent>
   <xs:extension base="r2ml:IntegrityRule"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="DeonticIntegrityRule" type="r2ml:DeonticIntegrityRule" substitutionGroup="r2ml:IntegrityRule">
  <xs:annotation>
   <xs:documentation>
  Encodes a deonthic integrity rule. See <a class="element" href="#IntegrityRule">r2ml:IntegrityRule</a>.
 </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="DeonticIntegrityRule">
  <xs:complexContent>
   <xs:extension base="r2ml:IntegrityRule"/>
  </xs:complexContent>
 </xs:complexType>
 <!-- R2ML Derivation Rule -->
 <xs:element name="DerivationRule" type="r2ml:DerivationRule" substitutionGroup="r2ml:Rule">
  <xs:annotation>
   <xs:documentation>
    Encodes a derivation rule. Any derivation rule consists from a condition part (see <a class="element" href="#conditions">r2ml:conditions</a> ) 
    and a conclusion part (r2ml:<a class="element" href="#conclusion">conclusion</a>).
    In R2ML the conditions of a derivation rule are <a class="element" href="#qf.AndOrNafNegFormula">r2ml:qf.AndOrNafNegFormula</a>. 
    Conclusions are restricted to quantifier-free disjunctive normal forms without NAF 
    (See  also <a class="element" href="#r2ml:qf.LiteralConjunction">r2ml:qf.LiteralConjunction</a>). 
    The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_9.png" alt="DerivationRule"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="DerivationRule">
  <xs:complexContent>
   <xs:extension base="r2ml:Rule">
    <xs:sequence>
     <xs:element ref="r2ml:conditions"/>
     <xs:element ref="r2ml:conclusion"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="conditions" type="r2ml:condition">
  <xs:annotation>
   <xs:documentation>
    A container for a collection  of <a class="element" href="#qf.AndOrNafNegFormula">r2ml:qf.AndOrNafNegFormula</a> 
    appearing in the condition part of a rule. Any R2ML processor must interpret a collection of 
    <a class="element" href="#AndOrNafNegFormula">r2ml:AndOrNafNegFormula</a> as conjunction 
    (See also <a class="element" href="#qf.Conjunction">r2ml:qf.Conjunction</a>).
    </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="condition">
  <xs:sequence minOccurs="0">
   <xs:element ref="r2ml:qf.AndOrNafNegFormula" maxOccurs="unbounded"/>
  </xs:sequence>
 </xs:complexType>
 <xs:element name="conclusion" type="r2ml:conclusion">
  <xs:annotation>
   <xs:documentation>
     A conclusion is either a <a class="element" href="#Atom">r2ml:Atom</a> or a 
     <a class="element" href="#qf.LiteralConjunction">r2ml:qf.LiteralConjunction</a>. 
     It appears in <a class="element" href="#DerivationRule">r2ml:DerivationRule</a>.
    </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="conclusion">
  <xs:choice>
   <xs:element ref="r2ml:Atom"/>
   <xs:element ref="r2ml:qf.LiteralConjunction" maxOccurs="unbounded"/>
  </xs:choice>
 </xs:complexType>
 <!-- R2ML Production Rule -->
 <xs:element name="ProductionRule" type="r2ml:ProductionRule" substitutionGroup="r2ml:Rule">
  <xs:annotation>
   <xs:documentation>
    Represents a production rule. Any production rule has a condition part (by means of <a class="element" href="#conditions">r2ml:conditions</a>) 
    a produced action expression part (by means of <a class="element" href="#producedActionExpr">r2ml:producedActionExpr</a>) and an optional
    <a class="element" href="#postcondition">r2ml:postcondition</a>. The UML metamodel is: 
    <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_10.png" alt="ProductionRule"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="ProductionRule">
  <xs:complexContent>
   <xs:extension base="r2ml:Rule">
    <xs:sequence>
     <xs:element ref="r2ml:conditions"/>
     <xs:choice>
      <xs:element ref="r2ml:producedActionExpr" maxOccurs="unbounded"/>
      <xs:element ref="r2ml:postcondition" maxOccurs="unbounded"/>
     </xs:choice>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="postcondition" type="r2ml:postcondition">
  <xs:annotation>
   <xs:documentation>
    A postcondition is a collection <a class="element" href="#qf.AndOrNafNegFormula">r2ml:qf.AndOrNafNegFormula</a>. If there are more 
    than one formula them they must be interpreted as conjunction (<a class="element" href="#qf.Conjunction">r2ml:qf.Conjunction</a>).  
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="postcondition">
  <xs:sequence>
   <xs:element ref="r2ml:qf.AndOrNafNegFormula" maxOccurs="unbounded"/>
  </xs:sequence>
 </xs:complexType>
 <xs:element name="producedActionExpr" type="r2ml:producedActionExpr">
  <xs:annotation>
   <xs:documentation>
    A role for a list of <a class="element" href="#AtomicActionEventExpr">r2ml:AtomicActionEventExpr</a>. 
    If there is more than one action then they must be interpreted sequentially in the DOM order.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="producedActionExpr">
  <xs:sequence maxOccurs="unbounded">
   <xs:element ref="r2ml:ProgramActionExpression"/>
  </xs:sequence>
 </xs:complexType>
 <!-- R2ML Reaction Rule -->
 <xs:element name="ReactionRule" type="r2ml:ReactionRule" substitutionGroup="r2ml:Rule">
  <xs:annotation>
   <xs:documentation>
    The R2ML model of a reaction rule (ECA rule) consists in a rule trigerring event expression 
    (See <a class="element" href="#triggeringEventExpr">r2ml:triggeringEventExpr</a>) 
    a condtion part (see <a class="element" href="#conditions">r2ml:conditions</a>) a produced action expression part 
    (by means of <a class="element" href="#producedActionExpr">r2ml:producedActionExpr</a>) and an optional
    <a class="element" href="#postcondition">r2ml:postcondition</a>. Both action expression and postcondition have the same meaning as 
    in <a class="element" href="#ProductionRule">r2ml:ProductionRule</a>.
    The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_11.png" alt="ReactionRule"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="ReactionRule">
  <xs:complexContent>
   <xs:extension base="r2ml:Rule">
    <xs:sequence>
     <xs:element ref="r2ml:triggeringEventExpr"/>
     <xs:element ref="r2ml:conditions" minOccurs="0"/>
     <xs:choice>
      <xs:element ref="r2ml:triggeredEventExpr" maxOccurs="unbounded"/>
      <xs:element ref="r2ml:postcondition" minOccurs="0" maxOccurs="unbounded"/>
     </xs:choice>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="triggeringEventExpr" type="r2ml:triggeringEventExpr">
  <xs:annotation>
   <xs:documentation>
    A role element for event expressions. It contains one event expression. See <a class="element" href="#EventExpression">r2ml:EventExpression</a>.   
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="triggeringEventExpr">
  <xs:sequence>
   <xs:element ref="r2ml:EventExpression"/>
  </xs:sequence>
 </xs:complexType>
 <xs:element name="triggeredEventExpr" type="r2ml:triggeredEventExpr">
  <xs:annotation>
   <xs:documentation>
    triggeredEventExpr
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="triggeredEventExpr">
  <xs:sequence>
   <xs:element ref="r2ml:EventExpression"/>
  </xs:sequence>
 </xs:complexType>
 <!-- LogicalFormula -->
 <xs:element name="LogicalFormula" type="r2ml:LogicalFormula" abstract="true">
  <xs:annotation>
   <xs:documentation>
    The general concept of a logical formula. 
    Among basic constructs <a class="element" href="#Atom">r2ml:Atom</a>,  
    <a class="element" href="#Conjunction">r2ml:Conjunction</a>, <a class="element" href="#Disjunction">r2ml:Disjunction</a>, 
    <a class="element" href="#Implication">r2ml:Implication</a>, <a class="element" href="#NegationAsFailure">r2ml:NegationAsFailure</a> 
    and <a class="element" href="#StrongNegation">r2ml:StrongNegation</a> it also encodes quantified formulas 
    (See <a class="element" href="#QuantifiedFormula">r2ml:QuantifiedFormula</a>).   
    The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_12.png" alt="LogicalFormula"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="LogicalFormula" abstract="true"/>
 <!-- Implication -->
 <xs:element name="Implication" type="r2ml:Implication" substitutionGroup="r2ml:LogicalFormula">
  <xs:annotation>
   <xs:documentation>
   General implication. It consists from one <a class="element" href="#antecedent">r2ml:antecedent</a> 
   and one <a class="element" href="#consequent">r2ml:consequent</a>.
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="Implication">
  <xs:complexContent>
   <xs:extension base="r2ml:LogicalFormula">
    <xs:sequence>
     <xs:element ref="r2ml:antecedent"/>
     <xs:element ref="r2ml:consequent"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="antecedent" type="r2ml:antecedent">
  <xs:annotation>
   <xs:documentation>
   A role for one <a class="element" href="#LogicalFormula">r2ml:LogicalFormula</a>. 
   It appears in <a class="element" href="#Implication">r2ml:Implication</a>.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="antecedent">
  <xs:sequence>
   <xs:element ref="r2ml:LogicalFormula"/>
  </xs:sequence>
 </xs:complexType>
 <xs:element name="consequent" type="r2ml:consequent">
  <xs:annotation>
   <xs:documentation>
   A role for one <a class="element" href="#LogicalFormula">r2ml:LogicalFormula</a>. 
   It appears in <a class="element" href="#Implication">r2ml:Implication</a>.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="consequent">
  <xs:sequence>
   <xs:element ref="r2ml:LogicalFormula"/>
  </xs:sequence>
 </xs:complexType>
 <!-- Conjunction -->
 <xs:element name="Conjunction" type="r2ml:Conjunction" substitutionGroup="r2ml:LogicalFormula">
  <xs:annotation>
   <xs:documentation>
   Encodes the general concept of a logical conjunction. It contains two or more <a class="element" href="#LogicalFormula">r2ml:LogicalFormula</a>.
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="Conjunction">
  <xs:complexContent>
   <xs:extension base="r2ml:LogicalFormula">
    <xs:sequence>
     <xs:element ref="r2ml:LogicalFormula" minOccurs="2" maxOccurs="unbounded"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- Disjunction -->
 <xs:element name="Disjunction" type="r2ml:Disjunction" substitutionGroup="r2ml:LogicalFormula">
  <xs:annotation>
   <xs:documentation>
    Encodes the general concept of a logical disjunction. It contains two or more 
    <a class="element" href="#LogicalFormula">r2ml:LogicalFormula</a>.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="Disjunction">
  <xs:complexContent>
   <xs:extension base="r2ml:LogicalFormula">
    <xs:sequence>
     <xs:element ref="r2ml:LogicalFormula" minOccurs="2" maxOccurs="unbounded"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- Negations -->
 <xs:element name="Negation" type="r2ml:Negation" substitutionGroup="r2ml:LogicalFormula">
  <xs:annotation>
   <xs:documentation>
    Negation. 
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="Negation">
  <xs:complexContent>
   <xs:extension base="r2ml:LogicalFormula"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="StrongNegation" type="r2ml:StrongNegation" substitutionGroup="r2ml:Negation">
  <xs:annotation>
   <xs:documentation>
    Encodes a strong (explicit) negation. Its content model is a <a class="element" href="#LogicalFormula">r2ml:LogicalFormula</a>. 
    See also <a class="element" href="#Negation">r2ml:Negation</a>.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="StrongNegation">
  <xs:complexContent>
   <xs:extension base="r2ml:Negation">
    <xs:sequence>
     <xs:element ref="r2ml:LogicalFormula"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="NegationAsFailure" type="r2ml:NegationAsFailure" substitutionGroup="r2ml:Negation">
  <xs:annotation>
   <xs:documentation>
    Encode negation sa failure (or weak negation) i.e. the absence of the positive information.Its content model is a 
    <a class="element" href="#LogicalFormula">r2ml:LogicalFormula</a>. See also <a class="element" href="#Negation">r2ml:Negation</a>.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="NegationAsFailure">
  <xs:complexContent>
   <xs:extension base="r2ml:Negation">
    <xs:sequence>
     <xs:element ref="r2ml:LogicalFormula"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- Quantified Formulas -->
 <xs:element name="QuantifiedFormula" type="r2ml:QuantifiedFormula" abstract="true" substitutionGroup="r2ml:LogicalFormula">
  <xs:annotation>
   <xs:documentation>
  Abstract concept of QuantifiedFormula. All variables from the consituent <a class="element" href="#LogicalFormula">r2ml:LogicalFormula</a> 
  are supoposed to be quantified (related to a quantifier).
  R2ML implements <em>universal quantified formulas</em> 
  (in the form of <a class="element" href="#UniversallyQuantifiedFormula">r2ml:UniversallyQuantifiedFormula</a>) , 
  <em>existential quantified formulas</em> (in the form of <a class="element" href="#ExistentiallyQuantifiedFormulas">r2ml:ExistentiallyQuantifiedFormulas</a>) 
  as well as <em>restricted existential quantified formulas</em>
i.e.    <a class="element" href="#AtLeastQuantifiedFormula">r2ml:AtLeastQuantifiedFormula</a>, 
<a class="element" href="#AtMostQuantifiedFormula">r2ml:AtMostQuantifiedFormula</a> and 
<a class="element" href="#AtLeastAndAtMostQuantifiedFormula">r2ml:AtLeastAndAtMostQuantifiedFormula</a>.
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="QuantifiedFormula" abstract="true">
  <xs:complexContent>
   <xs:extension base="r2ml:LogicalFormula">
    <xs:sequence>
     <xs:choice maxOccurs="unbounded">
      <xs:element ref="r2ml:GenericVariable" maxOccurs="unbounded"/>
      <xs:element ref="r2ml:ObjectVariable" maxOccurs="unbounded"/>
      <xs:element ref="r2ml:DataVariable" maxOccurs="unbounded"/>
     </xs:choice>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="UniversallyQuantifiedFormula" type="r2ml:UniversallyQuantifiedFormula" substitutionGroup="r2ml:QuantifiedFormula">
  <xs:annotation>
   <xs:documentation>
  Encodes an universally quantified formula. All variables from the consituent <a class="element" href="#LogicalFormula">r2ml:LogicalFormula</a> 
  are supposed to be universally quantified. See also <a class="element" href="#QuantifiedFormula">r2ml:QuantifiedFormula</a>.
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="UniversallyQuantifiedFormula">
  <xs:complexContent>
   <xs:extension base="r2ml:QuantifiedFormula">
    <xs:sequence>
     <xs:element ref="r2ml:LogicalFormula"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="ExistentiallyQuantifiedFormula" type="r2ml:ExistentiallyQuantifiedFormula" substitutionGroup="r2ml:QuantifiedFormula">
  <xs:annotation>
   <xs:documentation>
  Encodes an existentially quantified formula. 
  All variables from the consituent <a class="element" href="#LogicalFormula">r2ml:LogicalFormula</a> 
  are supposed to be existentially quantified. See also <a class="element" href="#QuantifiedFormula">r2ml:QuantifiedFormula</a>.
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="ExistentiallyQuantifiedFormula">
  <xs:complexContent>
   <xs:extension base="r2ml:QuantifiedFormula">
    <xs:sequence>
     <xs:element ref="r2ml:LogicalFormula"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="AtLeastQuantifiedFormula" type="r2ml:AtLeastQuantifiedFormula" substitutionGroup="r2ml:QuantifiedFormula">
  <xs:annotation>
   <xs:documentation>
    The concept of <em>AtLeastQuantifiedFormula</em>. All variables from the consituent 
    <a class="element" href="#LogicalFormula">r2ml:LogicalFormula</a> are supposed to be existentially quantified 
    and they must have at least <span class="attribute">r2ml:minCardinality</span> instances. 
    See also <a class="element" href="#QuantifiedFormula">r2ml:QuantifiedFormula</a>.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="AtLeastQuantifiedFormula">
  <xs:complexContent>
   <xs:extension base="r2ml:QuantifiedFormula">
    <xs:sequence>
     <xs:element ref="r2ml:LogicalFormula"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:minCardinality"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="AtMostQuantifiedFormula" type="r2ml:AtMostQuantifiedFormula" substitutionGroup="r2ml:QuantifiedFormula">
  <xs:annotation>
   <xs:documentation>
    The concept of <em>AtLeastQuantifiedFormula</em>. All variables from the consituent 
    <a class="element" href="#LogicalFormula">r2ml:LogicalFormula</a> are supposed to be existentially quantified 
    and they must have at most <span class="attribute">r2ml:minCardinality</span> instances. 
    See also <a class="element" href="#QuantifiedFormula">r2ml:QuantifiedFormula</a>.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="AtMostQuantifiedFormula">
  <xs:complexContent>
   <xs:extension base="r2ml:QuantifiedFormula">
    <xs:sequence>
     <xs:element ref="r2ml:LogicalFormula"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:maxCardinality"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="AtLeastAndAtMostQuantifiedFormula" type="r2ml:AtLeastAndAtMostQuantifiedFormula" substitutionGroup="r2ml:QuantifiedFormula">
  <xs:annotation>
   <xs:documentation>
   AtLeastAndAtMostQuantifiedFormula. See also <a class="element" href="#QuantifiedFormula">r2ml:QuantifiedFormula</a>.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="AtLeastAndAtMostQuantifiedFormula">
  <xs:complexContent>
   <xs:extension base="r2ml:QuantifiedFormula">
    <xs:sequence>
     <xs:element ref="r2ml:LogicalFormula"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:minCardinality"/>
    <xs:attribute ref="r2ml:maxCardinality"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- 

Quantifier free formulas

-->
 <xs:element name="qf.LiteralConjunction" type="r2ml:qf.LiteralConjunction">
  <xs:annotation>
   <xs:documentation>
   LiteralConjunction. 
    The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_14.png" alt="LiteralConjunction"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="qf.LiteralConjunction">
  <xs:sequence>
   <xs:element ref="r2ml:Atom" minOccurs="2" maxOccurs="unbounded"/>
  </xs:sequence>
 </xs:complexType>
 <xs:element name="qf.AndOrNafNegFormula" type="r2ml:qf.AndOrNafNegFormula" abstract="true" substitutionGroup="r2ml:LogicalFormula">
  <xs:annotation>
   <xs:documentation>
    Quantifier free formulas. The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_13.png" alt="AndOrNafNegFormula"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="qf.AndOrNafNegFormula" abstract="true">
  <xs:complexContent>
   <xs:restriction base="r2ml:LogicalFormula"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="qf.Conjunction" type="r2ml:qf.Conjunction" substitutionGroup="r2ml:qf.AndOrNafNegFormula">
  <xs:annotation>
   <xs:documentation>
  Quantifier free conjunction. See also <a class="element" href="#qf.AndOrNafNegFormula">r2ml:qf.AndOrNafNegFormula</a>.
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="qf.Conjunction">
  <xs:complexContent>
   <xs:extension base="r2ml:qf.AndOrNafNegFormula">
    <xs:sequence>
     <xs:element ref="r2ml:qf.AndOrNafNegFormula" minOccurs="2" maxOccurs="unbounded"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="qf.Disjunction" type="r2ml:qf.Disjunction" substitutionGroup="r2ml:qf.AndOrNafNegFormula">
  <xs:annotation>
   <xs:documentation>
  Quantifier free disjunction. See also <a class="element" href="#qf.AndOrNafNegFormula">r2ml:qf.AndOrNafNegFormula</a>.
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="qf.Disjunction">
  <xs:complexContent>
   <xs:extension base="r2ml:qf.AndOrNafNegFormula">
    <xs:sequence>
     <xs:element ref="r2ml:qf.AndOrNafNegFormula" minOccurs="2" maxOccurs="unbounded"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="qf.Negation" type="r2ml:qf.Negation" substitutionGroup="r2ml:qf.AndOrNafNegFormula">
  <xs:annotation>
   <xs:documentation>
  Quantifier free negation. See also <a class="element" href="#qf.AndOrNafNegFormula">r2ml:qf.AndOrNafNegFormula</a>.
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="qf.Negation">
  <xs:complexContent>
   <xs:extension base="r2ml:qf.AndOrNafNegFormula">
    <xs:sequence>
     <xs:element ref="r2ml:qf.AndOrNafNegFormula"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="qf.StrongNegation" type="r2ml:qf.StrongNegation" substitutionGroup="r2ml:qf.Negation">
  <xs:annotation>
   <xs:documentation>
  Quantifier free strong negation. See also <a class="element" href="#qf.AndOrNafNegFormula">r2ml:qf.AndOrNafNegFormula</a> and 
  <a class="element" href="#StrongNegation">r2ml:StrongNegation</a>.
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="qf.StrongNegation">
  <xs:complexContent>
   <xs:extension base="r2ml:qf.Negation"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="qf.NegationAsFailure" type="r2ml:qf.NegationAsFailure" substitutionGroup="r2ml:qf.Negation">
  <xs:annotation>
   <xs:documentation>
  Quantifier free negation as failure. See also <a class="element" href="#qf.AndOrNafNegFormula">r2ml:qf.AndOrNafNegFormula</a> 
  and <a class="element" href="#NegationAsFailure">r2ml:NegationAsFailure</a>.
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="qf.NegationAsFailure">
  <xs:complexContent>
   <xs:extension base="r2ml:qf.Negation"/>
  </xs:complexContent>
 </xs:complexType>
 <!-- R2ML atoms -->
 <xs:element name="Atom" type="r2ml:Atom" abstract="true" substitutionGroup="r2ml:qf.AndOrNafNegFormula">
  <xs:annotation>
   <xs:documentation>
    The abstract concept of Atom e.g. the superclass of all R2ML atoms. 
    Its content model contains an optional attribute <span class="attribute">r2ml:isNegated</span>, a convenient construct for obtaining 
    sentence literals. The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_15.png" alt="Atom"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="Atom" abstract="true">
  <xs:complexContent>
   <xs:extension base="r2ml:qf.AndOrNafNegFormula">
    <xs:attribute ref="r2ml:isNegated" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="GenericAtom" type="r2ml:GenericAtom" substitutionGroup="r2ml:Atom">
  <xs:annotation>
   <xs:documentation>
    It encodes the classical concept of atom. Any generic atom has a predicate name 
    by means of the value of the attribute <span class="attribute">r2ml:predicate</span>) and a 
    list of terms as arguments (See <a class="element" href="#arguments">r2ml:arguments</a>). 
    An optional attribute <span class="attribute">r2ml:predicateType</span> can be used to classify 
    the generic atom against R2ML classification of atoms. The UML metamodel is: 
    <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_22.png" alt="GenericAtom"/>
    See also <a class="element" href="#Atom">r2ml:Atom</a>.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="GenericAtom">
  <xs:complexContent>
   <xs:extension base="r2ml:Atom">
    <xs:sequence>
     <xs:element ref="r2ml:arguments"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:predicate" use="required"/>
    <xs:attribute ref="r2ml:predicateType" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="arguments" type="r2ml:arguments">
  <xs:annotation>
   <xs:documentation>
   A container for the generic atom arguments. It encodes a (possible empty) list of <a class="element" href="#Term">r2ml:Term</a>. 
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="arguments">
  <xs:sequence>
   <xs:element ref="r2ml:Term" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
 </xs:complexType>
 <!-- Predicate type is an enumeration of supported predicates names in R2ML -->
 <xs:simpleType name="PredicateType">
  <xs:restriction base="xs:string">
   <xs:enumeration value="ReferencePropertyPredicate"/>
   <xs:enumeration value="ObjectClassificationPredicate"/>
   <xs:enumeration value="AttributionPredicate"/>
   <xs:enumeration value="AssociationPredicate"/>
   <xs:enumeration value="EqualityPredicate"/>
   <xs:enumeration value="InequalityPredicate"/>
   <xs:enumeration value="DatatypePredicate"/>
   <xs:enumeration value="DataClassificationPredicate"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:element name="ObjectAtom" abstract="true" substitutionGroup="r2ml:Atom">
  <xs:annotation>
   <xs:documentation>
   The abstract concept of ObjectAtom. All arguments of this atom are object terms.  See <a class="element" href="#Atom">r2ml:Atom</a> 
   for the metamodel and <a class="element" href="#ObjectTerm">r2ml:ObjectTerm</a> for the content.
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="ObjectAtom" abstract="true">
  <xs:complexContent>
   <xs:extension base="r2ml:Atom"/>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="DataAtom" abstract="true" substitutionGroup="r2ml:Atom">
  <xs:annotation>
   <xs:documentation>
   The abstract concept of DataAtom. All arguments of this atom are data terms. See <a class="element" href="#Atom">r2ml:Atom</a> 
   for the metamodel and and <a class="element" href="#DataTerm">r2ml:DataTerm</a> for the content. 
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="DataAtom" abstract="true">
  <xs:complexContent>
   <xs:extension base="r2ml:Atom"/>
  </xs:complexContent>
 </xs:complexType>
 <!-- R2ML basic atoms -->
 <xs:element name="ObjectClassificationAtom" type="r2ml:ObjectClassificationAtom" substitutionGroup="r2ml:ObjectAtom">
  <xs:annotation>
   <xs:appinfo>self.ObjectTerm.termTypeCategory="individual"</xs:appinfo>
   <xs:documentation>
    Is an object atom (see <a class="element" href="#ObjectAtom">r2ml:ObjectAtom</a>) which classifies 
    an object term against a class. The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_16.png" alt="ObjectClassificationAtom"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="ObjectClassificationAtom">
  <xs:complexContent>
   <xs:extension base="r2ml:ObjectAtom">
    <xs:sequence>
     <xs:element ref="r2ml:ObjectTerm"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:class" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="EqualityAtom" type="r2ml:EqualityAtom" substitutionGroup="r2ml:ObjectAtom">
  <xs:annotation>
   <xs:documentation>
     Is an object atom (see <a class="element" href="#ObjectAtom">r2ml:ObjectAtom</a>) 
     encoding the object term equality. If there are more than two object terms they 
     are supposed to be two-pair equals. The UML metamodel is: 
     <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_21.png" alt="EqualityAtom"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="EqualityAtom">
  <xs:complexContent>
   <xs:extension base="r2ml:ObjectAtom">
    <xs:sequence>
     <xs:element ref="r2ml:ObjectTerm" minOccurs="2" maxOccurs="unbounded"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="InequalityAtom" type="r2ml:InequalityAtom" substitutionGroup="r2ml:ObjectAtom">
  <xs:annotation>
   <xs:documentation>
     An object atom (see <a class="element" href="#ObjectAtom">r2ml:ObjectAtom</a>) 
     encoding object inequality. If there are more than two object terms they are 
     supposed to be two-pair different. See also <a class="element" href="#EqualityAtom">r2ml:EqualityAtom</a>.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="InequalityAtom">
  <xs:complexContent>
   <xs:extension base="r2ml:ObjectAtom">
    <xs:sequence>
     <xs:element ref="r2ml:ObjectTerm" minOccurs="2" maxOccurs="unbounded"/>
    </xs:sequence>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="DataClassificationAtom" type="r2ml:DataClassificationAtom" substitutionGroup="r2ml:DataAtom">
  <xs:annotation>
   <xs:appinfo>self.DataTerm.termTypeCategory="individual"</xs:appinfo>
   <xs:documentation>
    A data atom (see <a class="element" href="#DataAtom">r2ml:DataAtom</a>) which 
    classifies a data term against a datatype. 
    The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_17.png" alt="DataClassificationAtom"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="DataClassificationAtom">
  <xs:complexContent>
   <xs:extension base="r2ml:DataAtom">
    <xs:sequence>
     <xs:element ref="r2ml:DataTerm"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:datatype" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="DatatypePredicateAtom" type="r2ml:DatatypePredicateAtom" substitutionGroup="r2ml:DataAtom">
  <xs:annotation>
   <xs:documentation>
    A data atom (see <a class="element" href="#DataAtom">r2ml:DataAtom</a>) encoding all datatype predicates such as relational &gt;, &lt;, ... 
    R2ML uses the <a href="http://www.w3.org/Submission/2004/SUBM-SWRL-20040521/#8">SWRL builtins</a> as a default. The UML metamodel is: 
    <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_24.png" alt="DatatypePredicateAtom"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="DatatypePredicateAtom">
  <xs:complexContent>
   <xs:extension base="r2ml:DataAtom">
    <xs:sequence>
     <xs:element ref="r2ml:dataArguments"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:datatypePredicate" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="dataArguments" type="r2ml:dataArguments">
  <xs:annotation>
   <xs:documentation>
   A container for a (possible empty) ordered list of data terms. See <a class="element" href="#DataTerm">r2ml:DataTerm</a>.
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="dataArguments">
  <xs:sequence>
   <xs:element ref="r2ml:DataTerm" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
 </xs:complexType>
 <!-- R2ML relational atoms -->
 <xs:element name="PropertyAtom" type="r2ml:PropertyAtom" substitutionGroup="r2ml:ObjectAtom">
  <xs:annotation>
   <xs:appinfo>subject.termTypeCategory="individual"</xs:appinfo>
   <xs:documentation>
  The property atom. It specialize in <a class="element" href="#ReferencePropertyAtom">r2ml:ReferencePropertyAtom</a> 
  and <a class="element" href="#AttributionAtom">r2ml:AttributionAtom</a>. A property atom is a binary atom 
  with a predicate name by means of the <span class="attribute">r2ml:property</span> attribute, 
  an <a class="element" href="#ObjectTerm">r2ml:ObjectTerm</a>  as a <em>subject</em> 
  (see <a class="element" href="#subject">r2ml:subject</a>)  and a <a class="element" href="#Term">r2ml:Term</a> 
  as the property <em>value</em> (<a class="element" href="#value">r2ml:value</a>). This atom corresponds to the concept of RDF triple.  
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="PropertyAtom">
  <xs:complexContent>
   <xs:extension base="r2ml:ObjectAtom">
    <xs:sequence>
     <xs:element ref="r2ml:subject"/>
     <xs:element ref="r2ml:value"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:property" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="subject" type="r2ml:subject">
  <xs:annotation>
   <xs:documentation>
  A role element for an object term appearing as <em>subject</em> in a property atom. Similar with the subject from RDF triples.  
  See also <a class="element" href="#PropertyAtom">r2ml:PropertyAtom</a> and and <a class="element" href="#ObjectTerm">r2ml:ObjectTerm</a>. 
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="subject">
  <xs:sequence>
   <xs:element ref="r2ml:ObjectTerm"/>
  </xs:sequence>
 </xs:complexType>
 <xs:element name="value" type="r2ml:value">
  <xs:annotation>
   <xs:documentation>
  A term appearing in a property atom as a <em>value</em> for that property.  
  See <a class="element" href="#PropertyAtom">r2ml:PropertyAtom</a> and <a class="element" href="#Term">r2ml:Term</a>.
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="value">
  <xs:sequence>
   <xs:element ref="r2ml:Term"/>
  </xs:sequence>
 </xs:complexType>
 <xs:element name="ReferencePropertyAtom" type="r2ml:ReferencePropertyAtom" substitutionGroup="r2ml:ObjectAtom">
  <xs:annotation>
   <xs:appinfo>subject.termTypeCategory="individual"</xs:appinfo>
   <xs:documentation>
    A specialization of <a class="element" href="#PropertyAtom">r2ml:PropertyAtom</a> covering 
    just property atoms having pbject terms as values. A reference property atom has a <a class="element" href="#subject">r2ml:subject</a> 
    and a <a class="element" href="#object">r2ml:object</a> as a value. The reference property is encoded by means of 
    the <span class="attribute">r2ml:referenceProperty</span> attribute. 
    This atom corresponds to the concept of an RDF triple with a non-literal object.
    The UML metamodel is: 
    <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_18.png" alt="ReferencePropertyAtom"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="ReferencePropertyAtom">
  <xs:complexContent>
   <xs:extension base="r2ml:ObjectAtom">
    <xs:sequence>
     <xs:element ref="r2ml:subject"/>
     <xs:element ref="r2ml:object"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:referenceProperty" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="object" type="r2ml:object">
  <xs:annotation>
   <xs:documentation>
  An object term appearing in a reference property atom as a value for the reference property. 
  See and <a class="element" href="#ObjectTerm">r2ml:objectTerm</a>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="object">
  <xs:sequence>
   <xs:element ref="r2ml:ObjectTerm"/>
  </xs:sequence>
 </xs:complexType>
 <xs:element name="AttributionAtom" type="r2ml:AttributionAtom" substitutionGroup="r2ml:ObjectAtom">
  <xs:annotation>
   <xs:appinfo>subject.termTypeCategory="individual"</xs:appinfo>
   <xs:documentation>
    Similar with <a class="element" href="#ReferencePropertyAtom">r2ml:ReferencePropertyAtom</a> 
    just the value of the property is a <a class="element" href="#DataTerm">r2ml:DataTerm</a> 
    (the content of <a class="element" href="#dataValue">r2ml:dataValue</a> role element). 
    The UML metamodel is: 
    <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_19.png" alt="AttributionAtom"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="AttributionAtom">
  <xs:complexContent>
   <xs:extension base="r2ml:ObjectAtom">
    <xs:sequence>
     <xs:element ref="r2ml:subject"/>
     <xs:element ref="r2ml:dataValue"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:attribute" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="dataValue" type="r2ml:dataValue">
  <xs:annotation>
   <xs:documentation>
  A role element for a data term appearing in an attribution atom as a value for the attribute. 
  See also <a class="element" href="#AttributionAtom">r2ml:AttributionAtom</a> and <a class="element" href="#DataTerm">r2ml:DataTerm</a> .
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="dataValue">
  <xs:sequence>
   <xs:element ref="r2ml:DataTerm"/>
  </xs:sequence>
 </xs:complexType>
 <xs:element name="ObjectDescriptionAtom" type="r2ml:ObjectDescriptionAtom" substitutionGroup="r2ml:ObjectAtom">
  <xs:annotation>
   <xs:appinfo>subject.termTypeCategory="individual"</xs:appinfo>
   <xs:documentation>
   A convenience construct to encode a conjunction of property atoms referring to the same subject. 
   An object description atom refers to a class as a type  (by means of the <span class="attribute">r2ml:class</span> 
   attribute) and consists of a number of slots (<a class="element" href="#ObjectSlot">r2ml:ObjectSlot</a> 
   and/or <a class="element" href="#DataSlot">r2ml:DataSlot</a>). Any instance of such atom refers 
   to one particular object by means of <span class="attribute">r2ml:subject</span> value. 
   The UML metamodel is: 
   <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_20.png" alt="ObjectDescriptionAtom"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="ObjectDescriptionAtom">
  <xs:complexContent>
   <xs:extension base="r2ml:ObjectAtom">
    <xs:sequence>
     <xs:element ref="r2ml:subject"/>
     <xs:choice maxOccurs="unbounded">
      <xs:element ref="r2ml:ObjectSlot" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="r2ml:DataSlot" minOccurs="0" maxOccurs="unbounded"/>
     </xs:choice>
    </xs:sequence>
    <xs:attribute ref="r2ml:baseType" use="optional"/>
    <xs:attribute ref="r2ml:class" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- The abstract concept of  slot -->
 <xs:element name="Slot" type="r2ml:Slot" abstract="true" substitutionGroup="r2ml:Term">
  <xs:annotation>
   <xs:documentation>
    The abstract concept of slot. It specialize in <a class="element" href="#ObjectSlot">r2ml:ObjectSlot</a> 
    and <a class="element" href="#DataSlot">r2ml:DataSlot</a>.
    </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="Slot" abstract="true">
  <xs:complexContent>
   <xs:extension base="r2ml:Term"/>
  </xs:complexContent>
 </xs:complexType>
 <!-- Object slot -->
 <xs:element name="ObjectSlot" type="r2ml:ObjectSlot" substitutionGroup="r2ml:Slot">
  <xs:annotation>
   <xs:documentation>
    ObjectSlot
    </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="ObjectSlot">
  <xs:complexContent>
   <xs:extension base="r2ml:Slot">
    <xs:sequence>
     <xs:element ref="r2ml:object"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:referenceProperty" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- data slot -->
 <xs:element name="DataSlot" type="r2ml:DataSlot" substitutionGroup="r2ml:Slot">
  <xs:annotation>
   <xs:documentation>
    DataSlot
    </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="DataSlot">
  <xs:complexContent>
   <xs:extension base="r2ml:Slot">
    <xs:sequence>
     <xs:element ref="r2ml:value"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:attribute" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="AssociationAtom" type="r2ml:AssociationAtom" substitutionGroup="r2ml:ObjectAtom">
  <xs:annotation>
   <xs:documentation>
    An association atom  is constructed using an nary predicate as association predicate, a collection of data terms 
    as "data arguments" and a collection of object terms as "object arguments". The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_23.png" alt="AssociationAtom"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="AssociationAtom">
  <xs:complexContent>
   <xs:extension base="r2ml:ObjectAtom">
    <xs:all>
     <xs:element ref="r2ml:dataArguments" minOccurs="0"/>
     <xs:element ref="r2ml:objectArguments"/>
    </xs:all>
    <xs:attribute ref="r2ml:associationPredicate" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="objectArguments" type="r2ml:objectArguments">
  <xs:annotation>
   <xs:documentation>
   A container for a (possible empty) ordered list of object terms. See r2ml:<a class="element" href="#ObjectTerm">ObjectTerm</a>.
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="objectArguments">
  <xs:sequence>
   <xs:element ref="r2ml:ObjectTerm" minOccurs="2" maxOccurs="unbounded"/>
  </xs:sequence>
 </xs:complexType>
 <!-- 

Events 

-->
 <xs:element name="EventExpression" type="r2ml:EventExpression" abstract="true">
  <xs:annotation>
   <xs:documentation>
    EventExpression. The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_30.png" alt="EventExpresion"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="EventExpression" abstract="true"/>
 <xs:element name="AtomicEventExpression" type="r2ml:AtomicEventExpression" substitutionGroup="r2ml:EventExpression">
  <xs:annotation>
   <xs:documentation>
   The main characteristic of an <em>atomic event expression</em> 
 is that it has no duration. An atomic event expression refers to an event type, which is its classifier 
 (by means of <span class="attribute">r2ml:eventType</span> attribute), is composed from a set of <a class="element" href="#Slot">r2ml:Slot</a> or 
 one <a class="element" href="#contextArgument">r2ml:contextArgument</a>. R2ML distinguishes between two main classes of atomic event expressions:
atomic action event expressions (<a class="element" href="#AtomicActionEventExpr">r2ml:AtomicActionEventExpr</a>) 
and time event expressions (<a class="element" href="#TimeEventExpr">r2ml:TimeEventExpr</a>). 
See also <a class="element" href="#EventExpression">r2ml:EventExpression</a>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="AtomicEventExpression">
  <xs:complexContent>
   <xs:extension base="r2ml:EventExpression">
    <xs:choice>
     <xs:element ref="r2ml:contextArgument"/>
     <xs:element ref="r2ml:Slot"/>
    </xs:choice>
    <xs:attribute ref="r2ml:eventType"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="SequenceEventExpression" type="r2ml:SequenceEventExpression" substitutionGroup="r2ml:EventExpression">
  <xs:annotation>
   <xs:documentation>
   An ordered list of al least two event expressions, which are processed in a sequence of events, 
   following the existent order and considering a finite value of time window observation(by means of the 
   <span class="attribute">r2ml:timeWindow</span> attribute). See also <a class="element" href="#EventExpression">r2ml:EventExpression</a>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="SequenceEventExpression">
  <xs:complexContent>
   <xs:extension base="r2ml:EventExpression">
    <xs:sequence>
     <xs:element ref="r2ml:EventExpression" minOccurs="2" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="timeWindow" type="xs:duration" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="AndNotEventExpression" type="r2ml:AndNotEventExpression" substitutionGroup="r2ml:EventExpression">
  <xs:annotation>
   <xs:documentation>
   It contains two event expressions as arguments (<em>EvtExpr1</em> and <em>EvtExpr2</em>). 
   It describes a complex event where an instance of <em>EvtExpr1</em> but no instance of <em>EvtExpr2</em> occurs.
   The required <span class="attribute">r2ml:timeWindow</span> attribute sets the time frame inside the event must occur.
   See also <a class="element" href="#EventExpression">r2ml:EventExpression</a>.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="AndNotEventExpression">
  <xs:complexContent>
   <xs:extension base="r2ml:EventExpression">
    <xs:sequence>
     <xs:element ref="r2ml:EventExpression" minOccurs="2" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="timeWindow" type="xs:duration" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="ChoiceEventExpression" type="r2ml:ChoiceEventExpression" substitutionGroup="r2ml:EventExpression">
  <xs:annotation>
   <xs:documentation> Contains a collection of event expressions that requires processing of at least
one event expression from the collection inside of the corresponding timeWindow.
The values of attributes <span class="attribute">r2ml:minOccurs</span> and 
<span class="attribute">r2ml:maxOccurs</span> setup the number of events in the collection that may occur and 
the required <span class="attribute">r2ml:timeWindow</span> attribute sets the time frame inside the events must occur. 
which they must occur. See also <a class="element" href="#EventExpression">r2ml:EventExpression</a>.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="ChoiceEventExpression">
  <xs:complexContent>
   <xs:extension base="r2ml:EventExpression">
    <xs:sequence>
     <xs:element ref="r2ml:EventExpression" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="minOccurs" type="xs:nonNegativeInteger" default="1"/>
    <xs:attribute name="maxOccurs" type="xs:nonNegativeInteger"/>
    <xs:attribute name="timeWindow" type="xs:duration" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:element name="ParallelEventExpression" type="r2ml:ParallelEventExpression" substitutionGroup="r2ml:EventExpression">
  <xs:annotation>
   <xs:documentation>
   Contains to a collection of event expressions that are concurrently processed inside
of a specific time window (by means of the required <span class="attribute">r2ml:timeWindow</span> attribute).
   See also <a class="element" href="#EventExpression">r2ml:EventExpression</a>.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="ParallelEventExpression">
  <xs:complexContent>
   <xs:extension base="r2ml:EventExpression">
    <xs:sequence>
     <xs:element ref="r2ml:EventExpression" minOccurs="2" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="timeWindow" type="xs:duration" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- R2ML Actions -->
 <!-- System actions -->
 <xs:element name="ProgramActionExpression" abstract="true" substitutionGroup="r2ml:AtomicEventExpression">
  <xs:annotation>
   <xs:documentation>
    The REWERSE I1 Rule Markup Language (R2ML) supports production rules therefore it defines the concept of an action. 
    Following the OMG Production Rule Representation submission, an action  is either an <a class="element" href="#InvokeActionExpression">r2ml:InvokeActionExpression</a> 
    or an <a class="element" href="#UpdateStateActionExpr">r2ml:UpdateStateActionExpr</a>. The second is the abstract superclass for the actions:
<a class="element" href="#UpdateActionExpr">r2ml:UpdateActionExpr</a>, 
an <a class="element" href="#AssertActionExpr">r2ml:AssertActionExpr</a> 
and a <a class="element" href="#RetractActionExpr">r2ml:RetractActionExpr</a>. 
The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_31.png" alt="ProgramActionExpr"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="ProgramActionExpression" abstract="true">
  <xs:complexContent>
   <xs:restriction base="r2ml:AtomicEventExpression">
    <xs:choice>
     <xs:element ref="r2ml:contextArgument"/>
     <xs:element ref="r2ml:Slot" minOccurs="0" maxOccurs="0"/>
    </xs:choice>
    <xs:attribute ref="r2ml:eventType" use="prohibited"/>
   </xs:restriction>
  </xs:complexContent>
 </xs:complexType>
 <!-- UpdateStateActionExpr -->
 <xs:element name="UpdateStateActionExpr" abstract="true" substitutionGroup="r2ml:ProgramActionExpression">
  <xs:annotation>
   <xs:documentation>See <a href="#ProgramActionExpression" class="element">r2ml:ProgramActionExpression</a>.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="UpdateStateActionExpr" abstract="true">
  <xs:complexContent>
   <xs:restriction base="r2ml:ProgramActionExpression">
    <xs:choice>
     <xs:element ref="r2ml:contextArgument"/>
     <xs:element ref="r2ml:Slot" minOccurs="0" maxOccurs="0"/>
    </xs:choice>
    <xs:attribute ref="r2ml:eventType" use="prohibited"/>
   </xs:restriction>
  </xs:complexContent>
 </xs:complexType>
 <!-- Invoke action -->
 <xs:element name="InvokeActionExpression" type="r2ml:InvokeActionExpression" substitutionGroup="r2ml:ProgramActionExpression">
  <xs:annotation>
   <xs:documentation>InvokeActionExpression models the receipt by an object of a request to invoke an operation (
   by means of the <span class="attribute">r2ml:operation</span> attribute). It refers to an operation and contains an ordered, 
   possible empty list of arguments represented as R2ML terms. The execution of this action is done by the corresponding operation-call.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="InvokeActionExpression">
  <xs:complexContent>
   <xs:extension base="r2ml:ProgramActionExpression">
    <xs:sequence>
     <xs:element ref="r2ml:arguments" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:operation" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- Update action -->
 <xs:element name="UpdateActionExpr" type="r2ml:UpdateActionExpr" substitutionGroup="r2ml:UpdateStateActionExpr">
  <xs:annotation>
   <xs:documentation>
   Updates the value of a property.
 </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="UpdateActionExpr">
  <xs:complexContent>
   <xs:extension base="r2ml:UpdateStateActionExpr">
    <xs:sequence>
     <xs:element ref="r2ml:Term"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:property" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- Assert Action -->
 <xs:element name="AssertActionExpr" type="r2ml:AssertActionExpr" substitutionGroup="r2ml:UpdateStateActionExpr">
  <xs:annotation>
   <xs:documentation>AssertActionExpr
   contains a collection of slots i.e. property-value pairs (|See <a class="element" href="#Slot">r2ml:Slot</a>). 
   The intended meaning of this action is the assertion of these facts into the working memory.
   <a href="#contextArgument" class="element">r2ml:contextArgument</a> encodes the context of the action call.
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="AssertActionExpr">
  <xs:complexContent>
   <xs:extension base="r2ml:UpdateStateActionExpr">
    <xs:sequence>
     <xs:element ref="r2ml:Slot" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:class" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!--Retract Action -->
 <xs:element name="RetractActionExpr" type="r2ml:RetractActionExpr" substitutionGroup="r2ml:UpdateStateActionExpr">
  <xs:annotation>
   <xs:documentation>Deleting an object.</xs:documentation>
   <xs:appinfo>r2ml:contextArgument always evaluates to an object name.</xs:appinfo>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="RetractActionExpr">
  <xs:complexContent>
   <xs:extension base="r2ml:UpdateStateActionExpr">
    <xs:attribute ref="r2ml:class" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- R2ML Terms -->
 <xs:element name="Term" type="r2ml:Term" abstract="true">
  <xs:annotation>
   <xs:documentation>
    Term.  The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_25.png" alt="Term"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:element name="ObjectTerm" type="r2ml:ObjectTerm" abstract="true" substitutionGroup="r2ml:Term">
  <xs:annotation>
   <xs:documentation>
    ObjectTerm. The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_27.png" alt="ObjectTerm"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:element name="DataTerm" type="r2ml:DataTerm" abstract="true" substitutionGroup="r2ml:Term">
  <xs:annotation>
   <xs:documentation>
    DataTerm. The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_28.png" alt="DataTerm"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <!-- 

Elements for constructing basic terms 

-->
 <xs:element name="GenericTerm" type="r2ml:GenericTerm" abstract="true" substitutionGroup="r2ml:Term">
  <xs:annotation>
   <xs:documentation>
    GenericTerm. The UML metamodel is: <img class="model" src="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/metamodel/R2MLv0.5_files/png_29.png" alt="GenericTerm"/>
   </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:element name="GenericVariable" type="r2ml:GenericVariable" substitutionGroup="r2ml:GenericTerm"/>
 <xs:element name="ObjectVariable" type="r2ml:ObjectVariable" substitutionGroup="r2ml:ObjectTerm"/>
 <xs:element name="ObjectName" type="r2ml:ObjectName" substitutionGroup="r2ml:ObjectTerm"/>
 <xs:element name="GenericEntityName" type="r2ml:GenericEntityName" substitutionGroup="r2ml:GenericTerm"/>
 <xs:element name="DataVariable" type="r2ml:DataVariable" substitutionGroup="r2ml:DataTerm"/>
 <xs:element name="TypedLiteral" type="r2ml:TypedLiteral" substitutionGroup="r2ml:DataTerm"/>
 <xs:element name="PlainLiteral" type="r2ml:PlainLiteral" substitutionGroup="r2ml:DataTerm"/>
 <!--

 Elements for constructing functional terms 

-->
 <xs:element name="GenericFunctionTerm" type="r2ml:GenericFunctionTerm" substitutionGroup="r2ml:Term"/>
 <xs:element name="DatatypeFunctionTerm" type="r2ml:DatatypeFunctionTerm" substitutionGroup="r2ml:DataFunctionTerm"/>
 <!-- 

R2ML Terms

-->
 <!--The abstract concept of Term -->
 <xs:complexType name="Term">
  <xs:attribute ref="r2ml:typeCategory" use="optional"/>
 </xs:complexType>
 <!-- The abstract concept of ObjectTerm -->
 <xs:complexType name="ObjectTerm" abstract="true">
  <xs:complexContent>
   <xs:extension base="r2ml:Term"/>
  </xs:complexContent>
 </xs:complexType>
 <!-- The abstract concept of Data Term -->
 <xs:complexType name="DataTerm" abstract="true">
  <xs:complexContent>
   <xs:extension base="r2ml:Term"/>
  </xs:complexContent>
 </xs:complexType>
 <!--GenericTerm-->
 <xs:complexType name="GenericTerm" abstract="true">
  <xs:complexContent>
   <xs:extension base="r2ml:Term"/>
  </xs:complexContent>
 </xs:complexType>
 <!-- GenericEntityName -->
 <xs:complexType name="GenericEntityName">
  <xs:complexContent>
   <xs:extension base="r2ml:GenericTerm">
    <xs:attribute ref="r2ml:genericEntity" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- R2ML generic variable -->
 <xs:complexType name="GenericVariable">
  <xs:complexContent>
   <xs:extension base="r2ml:GenericTerm">
    <xs:attribute ref="r2ml:name" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- ObjectVariable -->
 <xs:complexType name="ObjectVariable">
  <xs:complexContent>
   <xs:extension base="r2ml:ObjectTerm">
    <xs:attribute ref="r2ml:name" use="required"/>
    <xs:attribute ref="r2ml:class" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- Object name -->
 <xs:complexType name="ObjectName">
  <xs:complexContent>
   <xs:extension base="r2ml:ObjectTerm">
    <xs:attribute ref="r2ml:object" use="required"/>
    <xs:attribute ref="r2ml:class" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- Data variable -->
 <xs:complexType name="DataVariable">
  <xs:complexContent>
   <xs:extension base="r2ml:DataTerm">
    <xs:attribute ref="r2ml:name" use="required"/>
    <xs:attribute ref="r2ml:datatype" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- Data Literal -->
 <xs:element name="DataLiteral" type="r2ml:DataLiteral" abstract="true" substitutionGroup="r2ml:DataTerm"/>
 <xs:complexType name="DataLiteral" abstract="true">
  <xs:complexContent>
   <xs:extension base="r2ml:DataTerm">
    <xs:attribute ref="r2ml:lexicalValue" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- Plain Literal -->
 <xs:complexType name="PlainLiteral">
  <xs:complexContent>
   <xs:extension base="r2ml:DataLiteral">
    <xs:attribute name="languageTag" use="optional"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- Typed literal -->
 <xs:complexType name="TypedLiteral">
  <xs:complexContent>
   <xs:extension base="r2ml:DataLiteral">
    <xs:attribute ref="r2ml:datatype" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- GenericFunctionTerm -->
 <xs:complexType name="GenericFunctionTerm">
  <xs:complexContent>
   <xs:extension base="r2ml:Term">
    <xs:sequence>
     <xs:element ref="r2ml:arguments"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:genericFunctionID" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- ObjectOperationTerm -->
 <xs:element name="ObjectOperationTerm" type="r2ml:ObjectOperationTerm" substitutionGroup="r2ml:ObjectTerm">
  <xs:annotation>
   <xs:appinfo>contextArgument.termTypeCategory="individual"</xs:appinfo>
   <xs:documentation>ObjectOperationTerm</xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="ObjectOperationTerm">
  <xs:complexContent>
   <xs:extension base="r2ml:ObjectTerm">
    <xs:sequence>
     <xs:element ref="r2ml:contextArgument"/>
     <xs:element ref="r2ml:arguments" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:operation" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- ReferencePropertyFunctionTerm. -->
 <xs:element name="ReferencePropertyFunctionTerm" type="r2ml:ReferencePropertyFunctionTerm" substitutionGroup="r2ml:ObjectTerm">
  <xs:annotation>
   <xs:appinfo>contextArgument.termTypeCategory="individual"</xs:appinfo>
   <xs:documentation>ReferencePropertyFunctionTerm</xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="ReferencePropertyFunctionTerm">
  <xs:complexContent>
   <xs:extension base="r2ml:ObjectTerm">
    <xs:sequence>
     <xs:element ref="r2ml:contextArgument"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:referenceProperty" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- Data function term -->
 <xs:element name="DataFunctionTerm" type="r2ml:DataFunctionTerm" abstract="true" substitutionGroup="r2ml:DataTerm"/>
 <xs:complexType name="DataFunctionTerm" abstract="true">
  <xs:complexContent>
   <xs:restriction base="r2ml:DataTerm"/>
  </xs:complexContent>
 </xs:complexType>
 <!-- Data operation term -->
 <xs:element name="DataOperationTerm" type="r2ml:DataOperationTerm" substitutionGroup="r2ml:DataFunctionTerm">
  <xs:annotation>
   <xs:appinfo>contextArgument.termTypeCategory="individual"</xs:appinfo>
   <xs:documentation>
  DataOperationTerm
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="DataOperationTerm">
  <xs:complexContent>
   <xs:extension base="r2ml:DataFunctionTerm">
    <xs:sequence>
     <xs:element ref="r2ml:contextArgument" minOccurs="0"/>
     <xs:element ref="r2ml:arguments"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:operation" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- AttributeFunctionTerm -->
 <xs:element name="AttributeFunctionTerm" type="r2ml:AttributeFunctionTerm" substitutionGroup="r2ml:DataFunctionTerm">
  <xs:annotation>
   <xs:appinfo>contextArgument.termTypeCategory="individual"</xs:appinfo>
   <xs:documentation>
  AttributeFunctionTerm
  </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="AttributeFunctionTerm">
  <xs:complexContent>
   <xs:extension base="r2ml:DataFunctionTerm">
    <xs:sequence>
     <xs:element ref="r2ml:contextArgument"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:attribute" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <!-- DatatypeFunctionTerm -->
 <xs:complexType name="DatatypeFunctionTerm">
  <xs:complexContent>
   <xs:extension base="r2ml:DataFunctionTerm">
    <xs:sequence>
     <xs:element ref="r2ml:dataArguments"/>
    </xs:sequence>
    <xs:attribute ref="r2ml:datatypeFunction" use="required"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:simpleType name="CollectionType">
  <xs:restriction base="xs:string">
   <xs:enumeration value="individual"/>
   <xs:enumeration value="set"/>
   <xs:enumeration value="order"/>
   <xs:enumeration value="bag"/>
   <xs:enumeration value="sequence"/>
  </xs:restriction>
 </xs:simpleType>
 <!-- role contextArgument -->
 <xs:element name="contextArgument" type="r2ml:contextArgument">
  <xs:annotation>
   <xs:documentation>
 contextArgument
 </xs:documentation>
  </xs:annotation>
 </xs:element>
 <xs:complexType name="contextArgument">
  <xs:sequence>
   <xs:element ref="r2ml:ObjectTerm"/>
  </xs:sequence>
 </xs:complexType>
 <!-- Attributes -->
 <xs:attribute name="ruleBaseID" type="xs:ID"/>
 <xs:attribute name="externalVocabulary" type="xs:anyURI"/>
 <xs:attribute name="externalVocabularyLanguage" type="r2ml:ExternalVocabularyLanguage"/>
 <!-- Appear in Atom -->
 <xs:attribute name="isNegated" type="xs:boolean"/>
 <!-- Appear in ObjectVariable and Object  i.e. the type for object variables and object constants-->
 <xs:attribute name="class" type="xs:QName"/>
 <!-- appear in  ObjectDescriptionAtom -->
 <xs:attribute name="baseType" type="xs:QName"/>
 <!-- appear in referencePropertyAtom -->
 <xs:attribute name="referenceProperty" type="xs:QName"/>
 <!-- appear in AttributeDataTermPair, AttributionAtom, AttributeFunctionTerm -->
 <xs:attribute name="attribute" type="xs:QName"/>
 <!-- appear in ObjectOperationTerm and DataOperationTerm  and is a reference to an UML Operation -->
 <xs:attribute name="operation" type="xs:QName"/>
 <!-- appear in GenericAtom -->
 <xs:attribute name="predicate" type="xs:QName"/>
 <xs:attribute name="predicateType" type="r2ml:PredicateType"/>
 <!-- appear in a AssociationAtom -->
 <xs:attribute name="associationPredicate" type="xs:QName"/>
 <!-- appear in AssignAction -->
 <xs:attribute name="property" type="xs:QName"/>
 <!-- appear in a BuiltinPredicateAtom -->
 <xs:attribute name="datatypePredicate" type="xs:QName"/>
 <!-- appear in nany named entity: ObjectVariable DataVariable -->
 <xs:attribute name="name" type="xs:NCName"/>
 <!-- 	appear in Object -->
 <xs:attribute name="object" type="xs:QName"/>
 <!-- appear in GenericEntityName -->
 <xs:attribute name="genericEntity" type="xs:string"/>
 <!-- appear in BuiltinFunctionTerm -->
 <xs:attribute name="datatypeFunction" type="xs:QName"/>
 <!-- appear in DataClassificationAtom -->
 <xs:attribute name="datatype" type="xs:QName"/>
 <!-- ID's -->
 <xs:attribute name="ruleSetID" type="xs:ID"/>
 <xs:attribute name="ruleID" type="xs:ID"/>
 <!-- cardinalities -->
 <xs:attribute name="minCardinality" type="xs:positiveInteger"/>
 <xs:attribute name="maxCardinality" type="xs:positiveInteger"/>
 <!-- multivalued terms -->
 <xs:attribute name="typeCategory" type="r2ml:CollectionType"/>
 <!-- appear in PlainLiteral -->
 <xs:attribute name="languageTag" type="xs:normalizedString"/>
 <xs:attribute name="lexicalValue" type="xs:string"/>
 <!-- appear in Atomic event expression -->
 <xs:attribute name="eventType" type="xs:QName"/>
 <!-- appear in FunctionalTerm -->
 <xs:attribute name="genericFunctionID" type="xs:QName"/>
</xs:schema>
