Rule Language: Document ::= IRIMeta? base:IRI? prefixes:Prefix* imports:Import* group:Group? Prefix ::= name:Name iri:IRI Import ::= meta:IRIMeta? iri:IRIConst profile:BasicTerm? Group ::= meta:IRIMeta? groupItems:GroupItem* Rule ::= meta:IRIMeta? content:RuleContent Clause ::= content:ClauseContent Implies ::= meta:IRIMeta? head:Atomic body:Formula Profile ::= term:BasicTerm Forall ::= vars:Var+ clause:Clause GroupItem ::= Rule | Group RuleContent ::= Forall | Clause ClauseContent ::= Implies | Atomic Condition Language: Formula ::= meta:IRIMeta? content:FormulaContent Atomic ::= meta:IRIMeta? content:AtomicContent Uniterm ::= term:BasicTerm* Equal ::= lhs:BasicTerm rhs:Term Func ::= name:Const params:Term* Member ::= instance:BasicTerm class:BasicTerm Frame ::= subject:BasicTerm slots:Slot* Const ::= content:ConstContent Name ::= value:String Var ::= name:String SymSpace ::= content:SymSpaceContent And ::= formulas:FORMULA* Or ::= formulas:FORMULA* Exists ::= vars:Var+ formula:FORMULA External ::= content:ExternalContent BasicTerm ::= content:BasicTermContent Term ::= meta:IRIMeta? content:TermContent Slot ::= predicate:BasicTerm object:BasicTerm TypedConst ::= value:String type:SymSpace ExternalContent ::= Func | Uniterm FormulaContent ::= And | Or | Exists | Atomic | Equal | Member | External AtomicContent ::= Uniterm | Frame ConstContent ::= TypedConst | ConstShort TermContent ::= BasicTerm | External | Func BasicTermContent ::= Const | Var SymspaceContent ::= IRI | Curie Annotations: IRIMeta ::= iri:IRIConst? content:IRIMetaContent? IRIMetaContent ::= Frame | And