The namespace of RIF is http://www.w3.org/2007/rif#.
XML schemas for the RIF BLD sublanguages are available below and online, which already helped to find and fix invalid parts in the examples.
Positive Conditions
<?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: RIFPosCond.xsd,v 0.6 2007/10/24 dhirtle"> <xs:annotation> <xs:documentation> This is a preliminary XML schema for Positive Conditions as defined by Working Draft 1 of the RIF Basic Logic Dialect. The schema is based on the following EBNF for the presentation syntax: CONDITION ::= 'And' ' ( ' CONDITION* ' ) ' | 'Or' ' ( ' CONDITION* ' ) ' | 'Exists' Var+ ' ( ' CONDITION ' ) ' | ATOMIC ATOMIC ::= Uniterm | Equal Uniterm ::= Const ' ( ' TERM* ' ) ' Equal ::= TERM ' = ' TERM TERM ::= Const | Var | Uniterm Const ::= LITERAL '^^' SYMSPACE Var ::= '?' VARNAME </xs:documentation> </xs:annotation> <xs:group name="CONDITION"> <!-- CONDITION ::= 'And' ' ( ' CONDITION* ' ) ' | 'Or' ' ( ' CONDITION* ' ) ' | 'Exists' Var+ ' ( ' CONDITION ' ) ' | ATOMIC --> <xs:choice> <xs:element ref="And"/> <xs:element ref="Or"/> <xs:element ref="Exists"/> <xs:group ref="ATOMIC"/> </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="ATOMIC"> <!-- ATOMIC ::= Uniterm | Equal --> <xs:choice> <xs:element ref="Uniterm"/> <xs:element ref="Equal"/> </xs:choice> </xs:group> <xs:element name="Uniterm"> <!-- Uniterm ::= Const ' ( ' TERM* ' ) ' --> <xs:complexType> <xs:sequence> <xs:element ref="op"/> <xs:element ref="arg" minOccurs="0" maxOccurs="unbounded"/> </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="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:group name="TERM"> <!-- TERM ::= Const | Var | Uniterm --> <xs:choice> <xs:element ref="Const"/> <xs:element ref="Var"/> <xs:element ref="Uniterm"/> </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>
Slotted Conditions
<?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: RIFSlotCond.xsd,v 0.6 2007/10/24 dhirtle"> <xs:annotation> <xs:documentation> This is a preliminary XML schema for Slotted Conditions as defined by Working Draft 1 of the RIF Basic Logic Dialect. The schema is based on the following EBNF for the presentation syntax: CONDITION ::= 'And' ' ( ' CONDITION* ' ) ' | 'Or' ' ( ' CONDITION* ' ) ' | 'Exists' Var+ ' ( ' CONDITION ' ) ' | ATOMIC ATOMIC ::= Uniterm | Equal | CLASSIFICATION | Frame Uniterm ::= Const ' ( ' (TERM* | (Const ' -> ' TERM)*) ' ) ' Equal ::= TERM '=' TERM CLASSIFICATION ::= TERM ' # ' TERM | TERM ' ## ' TERM Frame ::= (TERM | CLASSIFICATION) ' [ ' (TERM ' -> ' (TERM | Frame))* ' ] ' TERM ::= Const | Var | Uniterm Const ::= LITERAL '^^' SYMSPACE Var ::= '?' VARNAME </xs:documentation> </xs:annotation> <xs:group name="CONDITION"> <!-- CONDITION ::= 'And' ' ( ' CONDITION* ' ) ' | 'Or' ' ( ' CONDITION* ' ) ' | 'Exists' Var+ ' ( ' CONDITION ' ) ' | ATOMIC --> <xs:choice> <xs:element ref="And"/> <xs:element ref="Or"/> <xs:element ref="Exists"/> <xs:group ref="ATOMIC"/> </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="ATOMIC"> <!-- ATOMIC ::= Uniterm | Equal | CLASSIFICATION | Frame --> <xs:choice> <xs:element ref="Uniterm"/> <xs:element ref="Equal"/> <xs:group ref="CLASSIFICATION"/> <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:group name="CLASSIFICATION"> <!-- CLASSIFICATION ::= TERM ' # ' TERM | TERM ' ## ' TERM --> <xs:choice> <xs:element ref="Member"/> <xs:element ref="Subclass"/> </xs:choice> </xs:group> <xs:element name="Member"> <xs:complexType> <xs:sequence> <xs:element ref="lower"/> <xs:element ref="upper"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Subclass"> <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 | CLASSIFICATION) ' [ ' (TERM ' -> ' (TERM | Frame))* ' ] ' --> <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:choice> <xs:group ref="TERM"/> <xs:element ref="Frame"/> </xs:choice> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="object"> <xs:complexType> <xs:choice> <xs:group ref="TERM"/> <xs:group ref="CLASSIFICATION"/> </xs:choice> </xs:complexType> </xs:element> <xs:group name="TERM"> <!-- TERM ::= Const | Var | Uniterm --> <xs:choice> <xs:element ref="Const"/> <xs:element ref="Var"/> <xs:element ref="Uniterm"/> </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>
Horn Rules
<?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: RIFPosHorn.xsd,v 0.6 2007/10/24 dhirtle"> <xs:annotation> <xs:documentation> This is a preliminary XML schema for Horn rules as defined by Working Draft 1 of the RIF Basic Logic Dialect. The schema is based on the following EBNF for the presentation syntax: Document ::= Ruleset* Ruleset ::= RULE* RULE ::= ' Forall ' Var+ ' ( ' RULE ' ) ' | Implies | ATOMIC Implies ::= ATOMIC ' :- ' CONDITION Note that this is an extension of the syntax for Positive Conditions. </xs:documentation> </xs:annotation> <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 name="rule" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:group ref="RULE"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:group name="RULE"> <!-- RULE ::= ' Forall ' Var+ ' ( ' RULE ' ) ' | Implies | ATOMIC --> <xs:choice> <xs:element ref="Forall"/> <xs:element ref="Implies"/> <xs:group ref="ATOMIC"/> </xs:choice> </xs:group> <xs:element name="Forall"> <xs:complexType> <xs:sequence> <xs:element ref="declare" minOccurs="1" maxOccurs="unbounded"/> <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 ::= ATOMIC ' :- ' 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="ATOMIC"/> </xs:sequence> </xs:complexType> </xs:element> <xs:group name="CONDITION"> <!-- CONDITION ::= 'And' ' ( ' CONDITION* ' ) ' | 'Or' ' ( ' CONDITION* ' ) ' | 'Exists' Var+ ' ( ' CONDITION ' ) ' | ATOMIC --> <xs:choice> <xs:element ref="And"/> <xs:element ref="Or"/> <xs:element ref="Exists"/> <xs:group ref="ATOMIC"/> </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> <!-- default formula; note different versions for Ruleset and Forall --> <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="ATOMIC"> <!-- ATOMIC ::= Uniterm | Equal --> <xs:choice> <xs:element ref="Uniterm"/> <xs:element ref="Equal"/> </xs:choice> </xs:group> <xs:element name="Uniterm"> <!-- Uniterm ::= Const ' ( ' TERM* ' ) ' --> <xs:complexType> <xs:sequence> <xs:element ref="op"/> <xs:element ref="arg" minOccurs="0" maxOccurs="unbounded"/> </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="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:group name="TERM"> <!-- TERM ::= Const | Var | Uniterm --> <xs:choice> <xs:element ref="Const"/> <xs:element ref="Var"/> <xs:element ref="Uniterm"/> </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>