Warning:
This wiki has been archived and is now read-only.
Core Schema
From RIF
Back to Schema Index
This is the refactored schema for Core, divided into two parts.
Condition part
=== Condition Language ===
<pre>
<?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: CoreCond.xsd, v. 0.8, 2009-04-29, hboley">
<xs:annotation>
<xs:documentation>
This is the XML schema for the Condition Language as defined by
the RIF Core Dialect.
The schema is based on the following EBNF for the RIF-Core Condition Language
(prepared for generalization to the RIF-BLD and RIF-PRD Condition Languages):
FORMULA ::= IRIMETA? 'And' '(' FORMULA* ')' |
IRIMETA? 'Or' '(' FORMULA* ')' |
IRIMETA? 'Exists' Var+ '(' FORMULA ')' |
ATOMIC |
IRIMETA? Equal |
IRIMETA? Member |
IRIMETA? 'External' '(' Atom ')'
ATOMIC ::= IRIMETA? (Atom | Frame)
Atom ::= UNITERM
UNITERM ::= Const '(' (TERM* ')'
GROUNDUNITERM ::= Const '(' (GROUNDTERM* ')'
Equal ::= TERM '=' TERM
Member ::= TERM '#' TERM
Frame ::= TERM '[' (TERM '->' TERM)* ']'
TERM ::= IRIMETA? (Const | Var | List | 'External' '(' Expr ')')
GROUNDTERM ::= IRIMETA? (Const | List | 'External' '(' 'Expr' '(' GROUNDUNITERM ')' ')')
Expr ::= UNITERM
List ::= 'List' '(' GROUNDTERM* ')'
Const ::= '"' UNICODESTRING '"^^' SYMSPACE | CONSTSHORT
Name ::= UNICODESTRING
Var ::= '?' UNICODESTRING
SYMSPACE ::= ANGLEBRACKIRI | CURIE
IRIMETA ::= '(*' IRICONST? (Frame | 'And' '(' Frame* ')')? '*)'
</xs:documentation>
</xs:annotation>
<xs:group name="FORMULA">
<!--
FORMULA ::= IRIMETA? 'And' '(' FORMULA* ')' |
IRIMETA? 'Or' '(' FORMULA* ')' |
IRIMETA? 'Exists' Var+ '(' FORMULA ')' |
ATOMIC |
IRIMETA? Equal |
IRIMETA? Member |
IRIMETA? 'External' '(' Atom ')'
-->
<xs:choice>
<xs:element ref="And"/>
<xs:element ref="Or"/>
<xs:element ref="Exists"/>
<xs:group ref="ATOMIC"/>
<xs:element ref="Equal"/>
<xs:element ref="Member"/>
<xs:element name="External" type="External-FORMULA.type"/>
</xs:choice>
</xs:group>
<xs:complexType name="External-FORMULA.type">
<!-- sensitive to FORMULA (Atom) context-->
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element name="content" type="content-FORMULA.type"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="content-FORMULA.type">
<!-- sensitive to FORMULA (Atom) context-->
<xs:sequence>
<xs:element ref="Atom"/>
</xs:sequence>
</xs:complexType>
<xs:element name="And">
<xs:complexType>
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element ref="formula" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Or">
<xs:complexType>
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element ref="formula" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Exists">
<xs:complexType>
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<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="FORMULA"/>
</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 ::= IRIMETA? (Atom | Frame)
-->
<xs:choice>
<xs:element ref="Atom"/>
<xs:element ref="Frame"/>
</xs:choice>
</xs:group>
<xs:element name="Atom">
<!--
Atom ::= UNITERM
-->
<xs:complexType>
<xs:sequence>
<xs:group ref="UNITERM"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:group name="UNITERM">
<!--
UNITERM ::= Const '(' (TERM* ')'
-->
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element ref="op"/>
<xs:element name="args" type="args-UNITERM.type"/>
</xs:sequence>
</xs:group>
<xs:group name="GROUNDUNITERM">
<!-- sensitive to ground terms
GROUNDUNITERM ::= Const '(' (GROUNDTERM* ')'
-->
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element ref="op"/>
<xs:element name="args" type="args-GROUNDUNITERM.type"/>
</xs:sequence>
</xs:group>
<xs:element name="op">
<xs:complexType>
<xs:sequence>
<xs:element ref="Const"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="args-UNITERM.type">
<!-- sensitive to UNITERM (TERM) context-->
<xs:sequence>
<xs:group ref="TERM" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="ordered" type="xs:string" fixed="yes"/>
</xs:complexType>
<xs:complexType name="args-GROUNDUNITERM.type">
<!-- sensitive to GROUNDUNITERM (TERM) context-->
<xs:sequence>
<xs:group ref="GROUNDTERM" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="ordered" type="xs:string" fixed="yes"/>
</xs:complexType>
<xs:element name="Equal">
<!--
Equal ::= TERM '=' TERM
-->
<xs:complexType>
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element ref="left"/>
<xs:element ref="right"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="left">
<xs:complexType>
<xs:sequence>
<xs:group ref="TERM"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="right">
<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:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element ref="instance"/>
<xs:element ref="class"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="instance">
<xs:complexType>
<xs:sequence>
<xs:group ref="TERM"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="class">
<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:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element ref="object"/>
<xs:element name="slot" type="slot-Frame.type" minOccurs="0" maxOccurs="unbounded"/>
</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:complexType name="slot-Frame.type">
<!-- sensitive to Frame (TERM) context-->
<xs:sequence>
<xs:group ref="TERM"/>
<xs:group ref="TERM"/>
</xs:sequence>
<xs:attribute name="ordered" type="xs:string" fixed="yes"/>
</xs:complexType>
<xs:group name="TERM">
<!--
TERM ::= IRIMETA? (Const | Var | List | 'External' '(' Expr ')')
-->
<xs:choice>
<xs:element ref="Const"/>
<xs:element ref="Var"/>
<xs:element ref="List"/>
<xs:element name="External" type="External-TERM.type"/>
</xs:choice>
</xs:group>
<xs:group name="GROUNDTERM">
<!--
GROUNDTERM ::= IRIMETA? (Const | List | 'External' '(' 'Expr' '(' GROUNDUNITERM ')' ')')
-->
<xs:choice>
<xs:element ref="Const"/>
<xs:element ref="List"/>
<xs:element name="External" type="External-GROUNDUNITERM.type"/>
</xs:choice>
</xs:group>
<xs:element name="List">
<!--
List ::= 'List' '(' GROUNDTERM* ')'
-->
<xs:complexType>
<xs:sequence>
<xs:group ref="GROUNDTERM" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="External-TERM.type">
<!-- sensitive to TERM (Expr) context-->
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element name="content" type="content-TERM.type"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="External-GROUNDUNITERM.type">
<!-- sensitive to GROUNDTERM (Expr) context-->
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element name="content" type="content-GROUNDUNITERM.type"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="content-TERM.type">
<!-- sensitive to TERM (Expr) context-->
<xs:sequence>
<xs:element ref="Expr"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="content-GROUNDUNITERM.type">
<!-- sensitive to GROUNDTERM (Expr) context-->
<xs:sequence>
<xs:element name="Expr" type="content-GROUNDEXPR.type"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="content-GROUNDEXPR.type">
<!-- sensitive to GROUNDEXPR context-->
<xs:sequence>
<xs:element name="GROUNDUNITERM"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Expr">
<!--
Expr ::= UNITERM
-->
<xs:complexType>
<xs:sequence>
<xs:group ref="UNITERM"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Const">
<!--
Const ::= '"' UNICODESTRING '"^^' SYMSPACE | CONSTSHORT
-->
<xs:complexType mixed="true">
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="type" type="xs:anyURI" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Name" type="xs:string">
<!--
Name ::= UNICODESTRING
-->
</xs:element>
<xs:element name="Var">
<!--
Var ::= '?' UNICODESTRING
-->
<xs:complexType mixed="true">
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:group name="IRIMETA">
<!--
IRIMETA ::= '(*' IRICONST? (Frame | 'And' '(' Frame* ')')? '*)'
-->
<xs:sequence>
<xs:element ref="id" minOccurs="0" maxOccurs="1"/>
<xs:element ref="meta" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:group>
<xs:element name="id">
<xs:complexType>
<xs:sequence>
<xs:element name="Const" type="IRICONST.type"/> <!-- type="&rif;iri" -->
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="meta">
<xs:complexType>
<xs:choice>
<xs:element ref="Frame"/>
<xs:element name="And" type="And-meta.type"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:complexType name="And-meta.type">
<!-- sensitive to meta (Frame) context-->
<xs:sequence>
<xs:element name="formula" type="formula-meta.type" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="formula-meta.type">
<!-- sensitive to meta (Frame) context-->
<xs:sequence>
<xs:element ref="Frame"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="IRICONST.type" mixed="true">
<!-- sensitive to location/id context-->
<xs:sequence/>
<xs:attribute name="type" type="xs:anyURI" use="required" fixed="http://www.w3.org/2007/rif#iri"/>
</xs:complexType>
</xs:schema>
Rule body part
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
targetNamespace="http://www.w3.org/2007/rif#"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.w3.org/2007/rif#"
elementFormDefault="qualified">
<xs:annotation>
<xs:documentation>
This is the XML schema for the Rule Language as defined by
the RIF Core Dialect.
The schema is based on the following EBNF for the RIF-Core Rule Language:
Document ::= IRIMETA? 'Document' '(' Base? Prefix* Import* Group? ')'
Base ::= 'Base' '(' IRI ')'
Prefix ::= 'Prefix' '(' Name IRI ')'
Import ::= IRIMETA? 'Import' '(' IRICONST PROFILE? ')'
Group ::= IRIMETA? 'Group' '(' (RULE | Group)* ')'
RULE ::= (IRIMETA? 'Forall' Var+ '(' CLAUSE ')') | CLAUSE
CLAUSE ::= Implies | ATOMIC
Implies ::= IRIMETA? ATOMIC ':-' FORMULA
PROFILE ::= TERM
Note that this is an extension of the syntax for the RIF-Core Condition Language (CoreCond.xsd).
</xs:documentation>
</xs:annotation>
<!-- The Rule Language includes the Condition Language from the same directory -->
<xs:include schemaLocation="CoreCond.xsd"/>
<xs:element name="Document">
<!--
Document ::= IRIMETA? 'Document' '(' Base? Prefix* Import* Group? ')'
-->
<xs:complexType>
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element ref="directive" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="payload" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="directive">
<!--
Base and Prefix represented directly in XML
-->
<xs:complexType>
<xs:sequence>
<xs:element ref="Import"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="payload">
<xs:complexType>
<xs:sequence>
<xs:element name="Group" type="Group-contents"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Import">
<!--
Import ::= IRIMETA? 'Import' '(' IRICONST PROFILE? ')'
-->
<xs:complexType>
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element ref="location"/>
<xs:element ref="profile" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="location">
<xs:complexType>
<xs:sequence>
<xs:element name="Const" type="IRICONST.type"/> <!-- type="&rif;iri" -->
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="profile">
<xs:complexType>
<xs:sequence>
<xs:group ref="TERM"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Group-contents">
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element ref="sentence" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="sentence">
<xs:complexType>
<xs:choice>
<xs:group ref="RULE"/>
<xs:element name="Group" type="Group-contents"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:group name="RULE">
<!--
RULE ::= (IRIMETA? 'Forall' Var+ '(' CLAUSE ')') | CLAUSE
-->
<xs:choice>
<xs:element name="Forall" type="Forall-premises"/>
<xs:group ref="CLAUSE"/>
</xs:choice>
</xs:group>
<xs:complexType name="Forall-premises">
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element ref="declare" minOccurs="1" maxOccurs="unbounded"/>
<!-- different from formula in And, Or and Exists -->
<xs:element name="formula">
<xs:complexType>
<xs:group ref="CLAUSE"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:group name="CLAUSE">
<!--
CLAUSE ::= Implies | ATOMIC
-->
<xs:choice>
<xs:element ref="Implies"/>
<xs:group ref="ATOMIC"/>
</xs:choice>
</xs:group>
<xs:element name="Implies">
<!--
Implies ::= IRIMETA? ATOMIC ':-' FORMULA
-->
<xs:complexType>
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element ref="if"/>
<xs:element name="then" type="then-part"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="if">
<xs:complexType>
<xs:sequence>
<xs:group ref="FORMULA"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="then-part">
<xs:choice>
<xs:element name="And" type="And-then.type"/>
<xs:group ref="ATOMIC"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="And-then.type">
<!-- sensitive to then (ATOMIC) context-->
<xs:sequence>
<xs:element name="formula" type="formula-then.type" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="formula-then.type">
<!-- sensitive to then (ATOMIC) context-->
<xs:sequence>
<xs:group ref="ATOMIC"/>
</xs:sequence>
</xs:complexType>
</xs:schema>