<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	    xmlns:owl="http://www.w3.org/2003/05/owl-xml"
	    xmlns:swrlx="http://www.w3.org/2003/11/swrlx"
	    xmlns:ruleml="http://www.w3.org/2003/11/ruleml"
	    xmlns:owlf="http://www.daml.org/2004/11/fol/fol"
	    targetNamespace="http://www.daml.org/2004/11/fol/fol"
	    elementFormDefault="qualified"
	    attributeFormDefault="qualified">

<xsd:import namespace="http://www.w3.org/2003/05/owl-xml"
            schemaLocation="owlx/schema/owl1-dl.xsd" />

<xsd:import namespace="http://www.w3.org/2003/11/ruleml"
            schemaLocation="ruleml.xsd" />

<xsd:import namespace="http://www.w3.org/2003/11/swrlx"
            schemaLocation="swrlx.xsd" />

<xsd:element name="Ontology"> 
  <xsd:annotation>
    <xsd:documentation>
      This is the root element of SWRL FOL documents 
      in the XML Concrete Syntax.  It extends swrlx:Ontology
    </xsd:documentation>
  </xsd:annotation>
  <xsd:complexType> 
    <xsd:sequence>
      <xsd:sequence minOccurs="0" maxOccurs="unbounded">
        <xsd:choice>
          <!-- Header elements --> 
          <xsd:element ref="owlx:VersionInfo" />
          <xsd:element ref="owlx:PriorVersion"  />
          <xsd:element ref="owlx:BackwardCompatibleWith" />
          <xsd:element ref="owlx:IncompatibleWith" />
          <xsd:element ref="owlx:Imports" />
          <xsd:element ref="owlx:Annotation" />

          <!-- Class elements --> 
          <xsd:element ref="owlx:Class" />
          <xsd:group   ref="owlx:classElements" />
  
          <!-- Property elements --> 
          <xsd:element ref="owlx:DatatypeProperty" />
          <xsd:element ref="owlx:ObjectProperty" />
          <xsd:element ref="owlx:SubPropertyOf" />
          <xsd:element ref="owlx:EquivalentProperties" /> 
   
          <!-- Instances --> 
          <xsd:element ref="owlx:Individual" />
          <xsd:element ref="owlx:SameIndividual" />
          <xsd:element ref="owlx:DifferentIndividuals" />

          <!-- SWRL extensions -->
          <xsd:element ref="ruleml:imp" />
          <xsd:element ref="ruleml:var" />

          <!-- FOL extension -->
          <xsd:element ref="Assertion" />
        </xsd:choice>
      </xsd:sequence>
    </xsd:sequence>
    <xsd:attribute ref="owlx:name" />
  </xsd:complexType>
</xsd:element>

<xsd:complexType name="formulae">
  <xsd:sequence minOccurs="0" maxOccurs="unbounded">
    <xsd:group name="owlf:formula" />
  </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="twoformulae">
  <xsd:sequence minOccurs="2" maxOccurs="2">
    <xsd:group name="owlf:formula" />
  </xsd:sequence>
</xsd:complexType>

<xsd:group name="formula">
  <xsd:choice>
    <xsd:element name="And" type="owlf:formulae" minOccurs="1" maxOccurs="1" />
    <xsd:element name="Or" type="owlf:formulae" minOccurs="1" maxOccurs="1" />
    <xsd:element name="Not" type="owlf:formula" minOccurs="1" maxOccurs="1" />
    <xsd:element name="Implies" type="owlf:twoformulae" minOccurs="1" maxOccurs="1" />
    <xsd:element name="Equivalent" type="owlf:formulae" minOccurs="1" maxOccurs="1" />
    <xsd:element name="Forall" type="owlf:quantifiedformula" minOccurs="1" maxOccurs="1" />
    <xsd:element name="Exists" type="owlf:quantifiedformula" minOccurs="1" maxOccurs="1" />
    <xsd:group ref="swrlx:atom" />
  </xsd:choice>
</xsd:group>

<xsd:complexType name="quantifiedformula">
  <xsd:sequence>
    <xsd:element name="ruleml:Var" type="ruleml:var" minOccurs="1" maxOccurs="unbounded"/>
    <xsd:group name="formula" minOccurs="1" maxOccurs="1"/>
  </xsd:sequence>
</xsd:complexType>

<xsd:element name="Assertion">
  <xsd:complexType>
    <xsd:complexContent>
      <xsd:extension base="owlx:annotated">
        <xsd:sequence minOccurs="1" maxOccurs="unbounded">
	  <xsd:group ref="owlf:formula" />
        </xsd:sequence>
        <xsd:attribute name="name" type="xsd:string" use="optional" />
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
</xsd:element>

</xsd:schema>
