- From: Michael Kifer <kifer@cs.sunysb.edu>
- Date: Tue, 04 Mar 2008 13:29:35 -0500
- To: public-rif-wg@w3.org (RIF WG)
Following up on today's discussion at the telecon, let me explain what I
think is a fundamental issue with respect to the BNF/XML syntax and why I
am against a quick-and-dirty fix to the current BNF/XML grammars.
We need to make sure that the XML syntax of BLD is compatible with the
future possible dialects that extend BLD, i.e., that BLD XML docs will be
valid rulesets in, say, some logic programming dialect that extends
BLD. The only sure way to achieve this is to define XML for FLD and show
how XML for BLD can be obtained by restriction.
Since XML syntax is a bit too unwieldy, I think BNF is a good way to try
the idea.
Jos' proposal was a good start, but it had problems: Some productions were
redundant and the names of the nonterminals were inappropriate (and some
redefined in BLD).
Since we derive XML from BNF (a good thing IMO), capitalized names of the
nonterminals (like "Rule") will end up in XML tags. XML tags should be
mnemonically natural for the dialect at hand. So, in BLD we should have
"Rule" and "Ruleset", while in FLD (and a future FOL) it should be
"Formula" and "Formulaset". In some dialects there are constraints, which
cannot be properly called "rules". The question is how do we reconcile
these requirements.
The following rough sketch of my idea borrows a trick from how subtypes are
commonly defined and introduces this concept into the definition of BNF
(under the name of "specialization").
I am not a hacker of XML Schema, but I think that in XML this subtyping can
be implemented using XSD import and restrictions.
Back to BNF. Let's say that a nonterminal NT' is a specialization of another
nonterminal, NT, defined by a production NT := Alt_1 | ... | Alt_n, if
a. NT' is one of the Alt_1 | ... | Alt_n; or
b. NT' is defined by production
NT' := Alt'_1 | ... | Alt'_k
and for each Alt'_j there is Alt_i such that Alt'_j is a
specialization or Alt_i or Alt'_j = Alt_i.
I attempted to sketch a grammar that is based on these idea in the
attachment. This may need some refinement. For example, Rule is not quite a
specialization of Formula because 'Rule(' and 'Formula(' do not match.
But this is the only small problem, I think. It can be worked out by either
changing 'Rule(' to 'Formula(' or by changing the definitions. (These
'Formula(' and 'Rule(' will not show up in XML anyway.)
Here is a modification of Jos' modification of Harold's based on the above
ideas. The purpose is to illustrate the idea -- I am not married to the
particular names or style, and there might be a simpler way.
FLD Grammar:
Formulaset ::= 'RIFSet(' absolute-IRI? Metadata* Formula* ')'
Formula ::= 'Formula(' FORMULACONTENT ')'
FORMULACONTENT ::= 'And' '(' FORMULACONTENT* ')' |
'Or' '(' FORMULACONTENT* ')' |
FORMULACONTENT ':-' FORMULACONTENT |
'Exists' Var+ '(' FORMULACONTENT ')' |
'Forall' Var+ '(' FORMULACONTENT ')' |
'Neg' FORMULACONTENT |
'Naf' FORMULACONTENT |
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
Function ::= UNITERM | 'Builtin ( ' UNITERM ' ) '
UNITERM ::= TERM '(' (TERM* | (LITERAL '->' TERM)*) ')'
Metadata ::= ' Metadata ( ' METADATALIST ' ) '
METADATALIST ::= absolute-IRI MetadataValue | METADATALIST ' ; ' METADATALIST
METADATAVALUE ::= Const | ' [] ' | ' [ ' METADATALIST ' ] '
Const ::= '"' LITERAL '"^^' SYMSPACE
Var ::= '?' LITERAL
SYMSPACE ::= absolute-IRI
BLD grammar:
CONDITION and RULECONTENT are specializations of FORMULACONTENT
(ATOMIC is also a specialization of FORMULACONTENT)
Rule is a specializations of Formula
Ruleset is a specialization of Formulaset
BLDTERM is a specialization of TERM
BLDUNITERM is a specialization of UNITERM
BLDATOMIC is a specialization of ATOMIC
BLDPredicate, BLDEqual, BLDMember, BLDSubclass, BLDFrame are specializations
of Predicate, Equal, Member, Subclass, Frame, respectively.
"Specialization" here means the following. A nonterminal NT' is a
specialization of another nonterminal, NT, if
NT := Alt_1 | ... | Alt_n
and either NT' is one of the Alt_i's or
NT' := Alt'_1 | ... | Alt'_k
and for each Alt'_j there is Alt_i such that Alt'_j is a
specialization of Alt_i or Alt'_j = Alt_i.
This is similar to the definition of subtyping.
Ruleset ::= 'RIFSet(' absolute-IRI? Metadata* Rule* ')'
Rule ::= 'Rule(' absolute-IRI? Metadata* RULECONTENT ' ) '
RULECONTENT ::= 'Forall' Var+ '(' BLDATOMIC (':-' CONDITION)? ')' | BLDATOMIC (':-' CONDITION)?
CONDITION ::= 'And' '(' CONDITION* ')' |
'Or' '(' CONDITION* ')' |
'Exists' Var+ '(' CONDITION ')' |
BLDATOMIC
BLDATOMIC ::= BLDPredicate | BLDEqual | BLDMember | BLDSubclass | BLDFrame
BLDPredicate ::= BLDUNITERM | 'Builtin ( ' BLDUNITERM ' ) '
BLDEqual ::= BLDTERM '=' BLDTERM
BLDMember ::= BLDTERM '#' BLDTERM
BLDSubclass ::= BLDTERM '##' BLDTERM
BLDFrame ::= BLDTERM '[' (BLDTERM '->' BLDTERM)* ']'
BLDTERM ::= Const | Var | Function
BLDFunction ::= BLDUNITERM | 'Builtin ( ' BLDUNITERM ' ) '
BLDUNITERM ::= Const '(' (BLDTERM* | (LITERAL '->' BLDTERM)*) ')'
// from here on the grammar is the same as in FLD
Metadata ::= ' Metadata ( ' METADATALIST ' ) '
METADATALIST ::= absolute-IRI METADATAVALUE | METADATALIST ' ; ' METADATALIST
METADATAVALUE ::= Const | ' [] ' | ' [ ' METADATALIST ' ] '
Const ::= '"' LITERAL '"^^' SYMSPACE
Var ::= '?' LITERAL
SYMSPACE ::= absolute-IRI
Received on Tuesday, 4 March 2008 18:29:52 UTC