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 Condition Language: 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* ')' Equal ::= TERM '=' ( TERM | 'External' '(' FUNC ')' ) FUNC ::= Const '(' (GENERAL_TERM* ')' GENERAL_TERM ::= IRIMETA? (Const | Var | FUNC) Member ::= TERM '#' TERM Frame ::= TERM '[' (TERM '->' TERM)* ']' TERM ::= IRIMETA? (Const | Var) Const ::= '"' UNICODESTRING '"^^' SYMSPACE | CONSTSHORT Name ::= UNICODESTRING Var ::= '?' UNICODESTRING SYMSPACE ::= ANGLEBRACKIRI | CURIE Annotations: IRIMETA ::= '(*' IRICONST? (Frame | 'And' '(' Frame* ')')? '*)'