<?xml version="1.0" encoding="US-ASCII" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://www.w3.org/RIF/2007"
            targetNamespace="http://www.w3.org/RIF/2007"
            elementFormDefault="qualified"
            xmlns:rif="http://www.w3.org/RIF/2007">
  <xsd:element name="Ruleset">
    <xsd:annotation>
      <xsd:documentation>
        A sample element
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:group ref="rif:RULE" maxOccurs="unbounded" minOccurs="0"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:group name="RULE">
    <xsd:choice>
      <xsd:element ref="rif:Forall"/>
    </xsd:choice>
  </xsd:group>
  <xsd:group name="CLAUSE">
      <xsd:choice>
        <xsd:element name="Implies">
          <xsd:complexType>
            <xsd:choice>
              <xsd:sequence>
                <xsd:element name="if">
                <xsd:complexType>
                  <xsd:group ref="rif:CONDITION"/>
                </xsd:complexType>
              </xsd:element>
                <xsd:element name="then">
                <xsd:complexType>
                  <xsd:group ref="rif:ATOMIC"/>
                </xsd:complexType>
              </xsd:element>
             </xsd:sequence>
             <xsd:sequence>
                <xsd:group ref="rif:CONDITION"/>
                <xsd:group ref="rif:ATOMIC"/>
             </xsd:sequence>
          </xsd:choice>
          </xsd:complexType>
        </xsd:element>
        <xsd:group ref="rif:ATOMIC"/>
      </xsd:choice>
  </xsd:group>
  <xsd:group name="ATOMIC">
      <xsd:choice>
        <xsd:element ref="rif:Uniterm"/>
        <xsd:element ref="rif:Equal"/>
      </xsd:choice>
  </xsd:group>
  <xsd:group name="TERM">
       <xsd:choice>
        <xsd:element ref="rif:Const"/>
        <xsd:element ref="rif:Var"/>
        <xsd:element ref="rif:Uniterm"/>
      </xsd:choice>
  </xsd:group>
  <xsd:group name="CONDITION">
    <xsd:choice>
      <xsd:element name="And" type="Conditions"/>
      <xsd:element name="Or" type="Conditions"/>
      <xsd:element ref="rif:Exists"/>
      <xsd:group ref="rif:ATOMIC"/>
    </xsd:choice>
  </xsd:group>
  <xsd:complexType name="Conditions">
    <xsd:sequence>
      <xsd:group ref="rif:CONDITION" maxOccurs="unbounded" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:element name="Forall">
    <xsd:complexType>
      <xsd:choice>
        <xsd:sequence>
          <xsd:element minOccurs="0" maxOccurs="unbounded" ref="rif:declare"/>
          <xsd:element name="formula">
            <xsd:complexType>
              <xsd:group ref="rif:CLAUSE"/>
            </xsd:complexType>
          </xsd:element>
        </xsd:sequence>
        <xsd:sequence>
          <xsd:element ref="rif:Var" maxOccurs="unbounded" minOccurs="0"/>
          <xsd:group ref="rif:CLAUSE"/>
        </xsd:sequence>
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="declare">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="rif:Var"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Exists">
    <xsd:complexType>
      <xsd:choice>
        <xsd:sequence>
          <xsd:element minOccurs="1" maxOccurs="unbounded"
                       ref="rif:declare"/>
          <xsd:element name="formula">
            <xsd:complexType>
              <xsd:group ref="rif:CONDITION"/>
            </xsd:complexType>
          </xsd:element>
        </xsd:sequence>
        <xsd:sequence>
          <xsd:element ref="rif:Var" maxOccurs="unbounded" minOccurs="1"/>
          <xsd:group ref="rif:CONDITION"/>
        </xsd:sequence>
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>
  <xsd:simpleType name="Sorts">
    <xsd:restriction base="xsd:QName">
        <xsd:enumeration value="rif:uri"/>
      <xsd:enumeration value="xsd:string"/>
      <xsd:enumeration value="xsd:long"/>
      <xsd:enumeration value="xsd:decimal"/>
      <xsd:enumeration value="xsd:time"/>
      <xsd:enumeration value="xsd:dateTime"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:complexType name="Sorted">
    <xsd:simpleContent>
      <xsd:extension base="xsd:string">
        <xsd:attribute name="sort" type="xsd:QName"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <xsd:element name="Var" type="Sorted"/>
  <xsd:element name="Const" type="Sorted"/>
  <xsd:element name="Uniterm">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="rif:Const"/>
        <xsd:group ref="rif:TERM" maxOccurs="unbounded" minOccurs="0"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Equal">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:group ref="rif:TERM" maxOccurs="2" minOccurs="2"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

