- From: Gary Hallmark <gary.hallmark@oracle.com>
- Date: Thu, 28 Feb 2008 13:41:38 -0800
- To: Jos de Bruijn <debruijn@inf.unibz.it>
- CC: RIF <public-rif-wg@w3.org>
Looks ok. I'd suggest
RULECONTENT ::= 'Forall' Var+ '(' FREECONTENT ')' | GROUNDCONTENT
GROUNDCONTENT ::= FREECONTENT
FREECONTENT ::= ATOMIC (':-' CONDITION)?
This forbids nested Forall and gives a place to explain that ground
content is syntactically the same as free content but has no free
variables, and a place to explain that the Var+ of the Forall should
name exactly the free variables in FREECONTENT.
Further, to dramatically improve readability of examples and test cases,
I'd suggest
Const ::= LITERAL '^^' SYMSPACE | NUMERIC | ALPHANUMERIC
where the last 2 options are sugar that allows one to omit any enclosing
"" or trailing ^^xsd:decimal or ^^rif:local.
I.e Ruleset(Rule(p(1)) is syntactically correct.
Jos de Bruijn wrote:
> 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/
>
>
--
Oracle <http://www.oracle.com>
Gary Hallmark | Architect | +1.503.525.8043
Oracle Server Technologies
1211 SW 5th Avenue, Suite 800
Portland, OR 97204
Received on Thursday, 28 February 2008 21:43:31 UTC