- From: Christian de Sainte Marie <csma@ilog.fr>
- Date: Mon, 28 Apr 2008 15:24:49 +0200
- To: Chris Welty <cawelty@gmail.com>
- CC: Sandro Hawke <sandro@w3.org>, Jos de Bruijn <debruijn@inf.unibz.it>, public-rif-wg@w3.org
- Message-ID: <4815D021.8000905@ilog.fr>
All,
Since I like diagrams, esp. when it comes to compare designs, I tried
and translated all these syntaxes into UML-like diagrams (which leads me
to propose a new solution, in the end).
The rule part of BLD as it was published in WD2 is diagram-1 (I put ???
when the XML syntax does not give the role a name).
Chris Welty wrote:
>
> The current BLD draft shows:
>
> Document ::= 'Document' '(' IRIMETA? DIRECTIVE* Group? ')'
> Group ::= 'Group' IRIMETA? '(' (RULE | Group)* ')'
Shown on diagram 2 (without the DIRECTIVE, which I leave out in all the
folowwing diagrams as well).
> [ChrisW] suggest[s] something like:
>
> Document ::= 'Document' '(' IRIMETA? DIRECTIVE* (Group | Rule)* ')'
> Group ::= 'Group' IRIMETA? '(' (RULE | Group)* ')'
> Rule ::= 'Rule' IRIMETA? '(' RULE ')'
Diagram 3. On the diagram, I had to make explicit the abstract class
that is common to Group and Rule; I called it ITEM. So, what the diagram
really show is (I attached the 'meta' association to the abstract ITEM
to make for readibility purposes):
Document ::= 'Document' '(' IRIMETA? DIRECTIVE* ITEM* ')'
ITEM ::= [ Rule | Group ]
Group ::= 'Group' IRIMETA? ITEM*
Rule ::= 'Rule' IRIMETA? '(' RULE ')'
RULE ::= [ 'Forall' Var+ '(' CLAUSE ')' | CLAUSE ]
> Also, *as a different point*, if we keep this I would suggest modifiying
> the Group production so that you don't have to type 'Group' for every
> repeated rule within a group, something like:
>
> Group ::= 'Group' IRIMETA? '(' (RULE* | Group)* ')'
I do not understand this: your initial production allows 0 to many RULEs
in a Group without having to loop through the Group construct (and,
thus, without having to type 'Group' for each new RULE?
However, your proposal raises two questions:
1. do we really want some implementation to produce a RIF document where
the RULEs are all 'Forall' or CLAUSE 'sentence's in a 'Group', whereas
another implementation, for the same set of rules, would produce a
document where the would all be 'Rules' directly 'contain'ed in the
Document (e.g. in the case where there are no subgrouping of rules in
the original set)?
2. do we want all facts (heads without a body - was the Talking Heads
group about facts, btw?) to have to be labelled 'Rule'? After all, that
was why CLAUSEs where introduced: to separate rules properly said from facts
One way to avoid both would be to allow Groups to contain ITEMs, not
RULEs or other FORMULAs directly (diagram 4):
Document ::= 'Document' '(' IRIMETA? DIRECTIVE* ITEM* ')'
ITEM ::= [ Rule | Fact | Group ]
Group ::= 'Group' IRIMETA? ITEM*
Rule ::= 'Rule' IRIMETA? '(' RULE ')'
RULE ::= [ 'Forall' Var+ '(' Implies ')' | Implies ]
Fact ::= ATOMIC
Wouldn't that last version satisfy everybody? And we can even get rid of
the CLAUSE production :-)
(NB: if we want to all universally quantified facts, we only need to
associate Fact to a new abstract FACT as a formula, instead of ATOMIC
directly, where FACT ::= [ 'Forall' Var+ '(' ATOMIC ')' | ATOMIC ])
Cheers,
Christian
Attachments
- image/jpeg attachment: Diagram_1__BLD_RULE_.jpg
- image/jpeg attachment: Diagram_2__BLD_cum_documento_.jpg
- image/jpeg attachment: Diagram_3__ChrisW_.jpg
- image/jpeg attachment: Diagram_4__BLD_with_Rule_and_Fact_.jpg
Received on Monday, 28 April 2008 13:26:13 UTC