This is an archive of an inactive wiki and cannot be modified.

The namespace of RIF is http://www.w3.org/2007/rif#.

XML schemas for the RIF BLD sublanguages are available below and online, with examples.

Condition Language

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

<xs:schema 
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns="http://www.w3.org/2007/rif#"
  targetNamespace="http://www.w3.org/2007/rif#"
  elementFormDefault="qualified"
  version="Id: BLDCond.xsd,v 0.7 2008-02-12 dhirtle/hboley">

  <xs:annotation>
    <xs:documentation>
    This is the XML schema for the Condition Language as defined by
    Working Draft 2 of the RIF Basic Logic Dialect.
    
    The schema is based on the following EBNF for the RIF-BLD Condition Language:

  CONDITION      ::= 'And' '(' CONDITION* ')' |
                     'Or' '(' CONDITION* ')' |
                     'Exists' Var+ '(' CONDITION ')' |
                     COMPOUND
  COMPOUND       ::= Uniterm | Equal | Member | Subclass | Frame
  Uniterm        ::= Const '(' (TERM* | (Const '->' TERM)*) ')'
  Equal          ::= TERM '=' TERM
  Member         ::= TERM '#' TERM
  Subclass       ::= TERM '##' TERM
  Frame          ::= TERM '[' (TERM '->' TERM)* ']'
  TERM           ::= Const | Var | COMPOUND
  Const          ::= LITERAL '^^' SYMSPACE
  Var            ::= '?' VARNAME
    </xs:documentation>
  </xs:annotation>
  
  <xs:group name="CONDITION">  
    <!--
  CONDITION      ::= 'And' '(' CONDITION* ')' |
                     'Or' '(' CONDITION* ')' |
                     'Exists' Var+ '(' CONDITION ')' |
                     COMPOUND
    -->
    <xs:choice>
      <xs:element ref="And"/>
      <xs:element ref="Or"/>
      <xs:element ref="Exists"/>
      <xs:group ref="COMPOUND"/>
    </xs:choice>
  </xs:group>

  <xs:element name="And">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="formula" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="Or">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="formula" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="Exists">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="declare" minOccurs="1" maxOccurs="unbounded"/>
        <xs:element ref="formula"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="formula">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="CONDITION"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="declare">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Var"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:group name="COMPOUND">
    <!--
  COMPOUND       ::= Uniterm | Equal | Member | Subclass | Frame
    -->
    <xs:choice>
      <xs:element ref="Uniterm"/>
      <xs:element ref="Equal"/>
      <xs:element ref="Member"/>
      <xs:element ref="Subclass"/>
      <xs:element ref="Frame"/>
    </xs:choice>
  </xs:group>
  
  <xs:element name="Uniterm">
    <!--
  Uniterm        ::= Const '(' (TERM* | (Const '->' TERM)*) ')'
    -->
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="op"/>
        <xs:choice>
          <xs:element ref="arg" minOccurs="0" maxOccurs="unbounded"/>
          <xs:element ref="slot" minOccurs="0" maxOccurs="unbounded"/>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="op">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Const"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="arg">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="TERM"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="slot">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Const"/>
        <xs:group ref="TERM"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
 
  <xs:element name="Equal">
    <!--
    Equal          ::= TERM '=' TERM
    -->
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="side"/>
        <xs:element ref="side"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="side">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="TERM"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
    
  <xs:element name="Member">
    <!--
  Member         ::= TERM '#' TERM
    -->
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="lower"/>
        <xs:element ref="upper"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="Subclass">
    <!--
  Subclass       ::= TERM '##' TERM
    -->
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="lower"/>
        <xs:element ref="upper"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="lower">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="TERM"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="upper">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="TERM"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="Frame">
    <!--
  Frame          ::= TERM '[' (TERM '->' TERM)* ']'
    -->
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="object"/>
        <xs:element name="slot" minOccurs="0" maxOccurs="unbounded">
          <!-- note difference from slot in Uniterm -->
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="TERM"/>
              <xs:group ref="TERM"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="object">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="TERM"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:group name="TERM">  
    <!--
  TERM           ::= Const | Var | COMPOUND
    -->
      <xs:choice>
         <xs:element ref="Const"/>
         <xs:element ref="Var"/>
         <xs:group ref="COMPOUND"/>
      </xs:choice>
  </xs:group>
  
  <xs:element name="Const">
    <!--
    Const       ::= LITERAL '^^' SYMSPACE
    -->
    <xs:complexType mixed="true">
      <xs:sequence/>
      <xs:attribute name="type" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="Var" type="xs:string">
    <!--
    Var         ::= '?' VARNAME
    -->
  </xs:element>
  
</xs:schema>

Rule Language

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

<xs:schema 
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns="http://www.w3.org/2007/rif#"
  targetNamespace="http://www.w3.org/2007/rif#"
  elementFormDefault="qualified"
  version="Id: BLDRule.xsd,v 0.7 2008-02-12 dhirtle/hboley">

  <xs:annotation>
    <xs:documentation>
    This is the XML schema for the Rule Language as defined by
    Working Draft 2 of the RIF Basic Logic Dialect.
    
    The schema is based on the following EBNF for the RIF-BLD Rule Language:
    
  Document ::= Ruleset*
  Ruleset  ::= RULE*
  RULE     ::= 'Forall' Var+ '(' RULE ')' | Implies | COMPOUND
  Implies  ::= COMPOUND ':-' CONDITION
    
    Note that this is an extension of the syntax for the RIF-BLD Condition Language (BLDCond.xsd).
    </xs:documentation>
  </xs:annotation>

  <!-- The Rule Language includes the Condition Language-->
  <xs:include schemaLocation="BLDCond.xsd"/>

  <xs:element name="Document">
    <!--
    Document ::= Ruleset*
    -->
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Ruleset" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="Ruleset">
    <!--
    Ruleset  ::= RULE*
    -->
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="rule" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="rule">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="RULE"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:group name="RULE">
  <!--
  RULE     ::= 'Forall' Var+ '(' RULE ')' | Implies | COMPOUND
  -->
    <xs:choice>
      <xs:element ref="Forall"/>
      <xs:element ref="Implies"/>
      <xs:group ref="COMPOUND"/>
    </xs:choice>
  </xs:group>

  <xs:element name="Forall">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="declare" minOccurs="1" maxOccurs="unbounded"/>
        <!-- note different from formula in And, Or and Exists -->
        <xs:element name="formula">
          <xs:complexType>
            <xs:group ref="RULE"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
    
  <xs:element name="Implies">
    <!--
  Implies  ::= COMPOUND ':-' CONDITION
    -->
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="if"/>
        <xs:element ref="then"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="if">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="CONDITION"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="then">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="COMPOUND"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
</xs:schema>