W3C home > Mailing lists > Public > public-rif-wg@w3.org > February 2008

Grammar presentation syntax FLD and BLD

From: Jos de Bruijn <debruijn@inf.unibz.it>
Date: Thu, 28 Feb 2008 10:24:18 +0100
Message-ID: <47C67DC2.4050103@inf.unibz.it>
To: RIF <public-rif-wg@w3.org>
Dear all,

At the face-to-face I agreed to create a grammar for the presentation 
syntax of FLD [2] which acknowledges the difference between atomic 
formulas and terms in the productions, as well as a grammar for BLD [3] 
that is a restriction of the FLD grammar.

When writing the grammar I came across a number of issues, which I 
mention below.

Incidentally, I think there is a problem with the syntax for rules, as 
specified in FLD.  Namely, a rule is an implication phi :- psi; no 
quantification seems to be allowed. In the grammar below I also allowed 
rules with universal quantification.

I included the noncontroversial part of the metadata proposal and the 
built-ins. The production absolute-IRI is defined in [1].
Incidentally, I also removed the Implies production, because I did not 
really understand what it is for.

  Ruleset         ::= 'Ruleset( ' absolute-IRI? Metadata* Rule* ' ) '
  Rule            ::= 'Rule( ' absolute-IRI? Metadata* RULECONTENT ' ) '
  RULECONTENT     ::= 'Forall' Var+ '(' RULECONTENT ')' | CONDITION 
(':-' CONDITION)?

   UNITERM        ::= TERM '(' (TERM* | (Const '->' TERM)*) ')'

   CONDITION      ::= 'And' '(' CONDITION* ')' |
                      'Or' '(' CONDITION* ')' |
                      'Exists' Var+ '(' CONDITION ')' |
                      'Forall' Var+ '(' CONDITION ')' |
                      'Neg' CONDITION |
                      'Naf' CONDITION |
                      ATOMIC
   ATOMIC         ::= Predicate | Equal | Member | Subclass | Frame
   Predicate      ::= UNITERM | 'Builtin ( ' UNITERM ' ) '
   Equal          ::= TERM '=' TERM
   Member         ::= TERM '#' TERM
   Subclass       ::= TERM '##' TERM
   Frame          ::= TERM '[' (TERM '->' TERM)* ']'

   TERM           ::= Const | Var | Function| Equal | Member | Subclass 
| Frame
   Const          ::= LITERAL '^^' SYMSPACE
   Var            ::= '?' VARNAME
   Function       ::= UNITERM | 'Builtin ( ' UNITERM ' ) '

   Metadata       ::= ' Metadata ( ' METADATALIST ' ) '
   METADATALIST   ::= absolute-IRI MetadataValue | METADATALIST ' ; ' 
METADATALIST
   METADATAVALUE  ::= Const | ' [] ' | ' [ ' METADATALIST ' ] '


   SYMSPACE       ::= absolute-IRI


I suppose that in the textual description which say that LITERAL and 
VARNAME are sequences of Unicode characters.
Actually, I would propose to make VARNAME just a sequence of 
alphanumeric characters and to always delimit LITERAL with double quotes.

Then, it is not really clear from [2] what the syntax is of the names in 
named-argument predicates and functions.  I would propose these names to 
be absolute IRIs.


Below is diagram restricted to the case of BLD.  Only three restrictions 
were necessary:
- a rule head may only be an atomic formula, not arbitrary condition
- conditions may not contain negation  universal quantification
- function and predicate identifiers may not be terms


  Ruleset         ::= 'Ruleset( ' absolute-IRI? Metadata* Rule* ' ) '
  Rule            ::= 'Rule( ' absolute-IRI? Metadata* RULECONTENT ' ) '
  RULECONTENT     ::= 'Forall' Var+ '(' RULECONTENT ')' | ATOMIC (':-' 
CONDITION)?

   UNITERM        ::= Const '(' (TERM* | (Const '->' TERM)*) ')'

   CONDITION      ::= 'And' '(' CONDITION* ')' |
                      'Or' '(' CONDITION* ')' |
                      'Exists' Var+ '(' CONDITION ')' |
                      ATOMIC
   ATOMIC         ::= Predicate | Equal | Member | Subclass | Frame
   Predicate      ::= UNITERM | 'Builtin ( ' UNITERM ' ) '
   Equal          ::= TERM '=' TERM
   Member         ::= TERM '#' TERM
   Subclass       ::= TERM '##' TERM
   Frame          ::= TERM '[' (TERM '->' TERM)* ']'

   TERM           ::= Const | Var | Function
   Const          ::= LITERAL '^^' SYMSPACE
   Var            ::= '?' VARNAME
   Function       ::= UNITERM | 'Builtin ( ' UNITERM ' ) '

   Metadata       ::= ' Metadata ( ' METADATALIST ' ) '
   METADATALIST   ::= absolute-IRI METADATAVALUE | METADATALIST ' ; ' 
METADATALIST
   METADATAVALUE  ::= Const | ' [] ' | ' [ ' METADATALIST ' ] '


   SYMSPACE       ::= absolute-IRI


Another thing: why do we allow nesting of Forall statements in rules if 
one can already specify multiple variables?
I would propose to either remove the nesting or only allow mentioning of 
1 variable. I would prefer the former.


best, Jos


[1] Internationalized Resource Identifiers. RFC 3987. 
http://www.ietf.org/rfc/rfc3987.txt
[2] FLD editors draft. 
http://www.w3.org/2005/rules/wg/draft/ED-rif-fld-20080219/
[3] BLD editors draft. 
http://www.w3.org/2005/rules/wg/draft/ED-rif-bld-20080219/


-- 
                          debruijn@inf.unibz.it

Jos de Bruijn,        http://www.debruijn.net/
----------------------------------------------
One man that has a mind and knows it can
always beat ten men who haven't and don't.
   -- George Bernard Shaw


Received on Thursday, 28 February 2008 09:24:31 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 2 June 2009 18:33:45 GMT