- From: Dave Reynolds <der@hplb.hpl.hp.com>
- Date: Wed, 13 Jun 2007 16:20:51 +0100
- To: "Boley, Harold" <Harold.Boley@nrc-cnrc.gc.ca>
- CC: RIF WG <public-rif-wg@w3.org>
Given that the proposed mapping of RDF to RIF will map the triple (s,p,o) to the Frame s[p->o], then RDF lists will end up as nested RIF Frame structures: _:1[rdf:first->a, rdf:rest-> _:2[rdf:first->Y, rdf:rest-> _:3[rdf:first->c, rdf:rest->rdf:nil]]] rather than nested function symbols. It would convenient if the RIF list builtins worked on RDF lists. Possibilities include: (1) Use nested-frame rather than nested-pair representation for lists (I suspect this is too ugly to be acceptable but thought I'd mention it). (2) Include in the RIF-specified RDF mapping a transformation so that RDF lists map to RIF lists. (3) Let individual applications include mapping rules which explicitly map the nested-frame structures to RIF lists and say nothing about RDF lists in the spec. I'm not sure I like any of these and so don't have a specific proposal at this stage. I'm just mentioning it in case anyone has another take on this issue. Dave -- Hewlett-Packard Limited Registered Office: Cain Road, Bracknell, Berks RG12 1HN Registered No: 690597 England Boley, Harold wrote: > This is about my ACTION-294: Actually, two proposals for treating > sequences. > > In the EBNF of > http://www.w3.org/2005/rules/wg/wiki/Core/Positive_Conditions > > Uniterm ::= Const '(' TERM* ')' > > could be used to represent Lisp's dotted pairs (head . tail) and > Prolog's lists > [head | tail] by employing a distinguished binary function symbol, say > Pair, and > a distinguished constant symbol, say Nil, so the Prolog list [a,Y,c] > would become > the Pair nesting > > <Pair> > <Const>a</Const> > <Pair> > <Var>Y</Var> > <Pair> > <Const>c</Const> > Nil > </Pair> > </Pair> > </Pair> > > Besides dealing with these two distinguished symbols, nothing else would > need > to be changed (especially, in the semantics). > > Alternatively, n-ary sequences could be directly represented via an > n-ary list constructor, so Prolog's [a,Y,c] would remain a flat > > <List> > <Const>a</Const> > <Var>Y</Var> > <Const>c</Const> > </List> > > For this, TERMs, currently defined as > > TERM ::= Const | Var | Uniterm > > could be extended to > > TERM ::= Const | Var | Uniterm | LIST > > with > > LIST ::= 'List' '(' TERM* ')' > > The latter EBNF rule is structurally identical to, e.g., > CONJUNCTION ::= 'And' '(' CONDITION* ')'. > > To accommodate a Prolog-like vertical bar, "|", in Lists, we could allow > a single optional rest element somehow like this: > > LIST ::= 'List' '(' TERM* [rest] ')' % OK if nothing to the left of "|" > rest ::= TERM % normally TERM is just a Var > > Such a <rest> element can be used to express the human-readable > syntactic equality [?head | ?tail] = [a ?Y c]: > > <List> > <Var>head</Var> > <rest><Var>tail</Var></rest> > </List> > > unifies with > > <List> > <Const>a</Const> > <Var>Y</Var> > <Const>c</Const> > </List> > > by binding > > <Var>head</Var> to <Const>a</Const> > > and > > <Var>tail</Var> to <List><Var>Y</Var><Const>c</Const></List> > > Nested Prolog Lists such as [a,[X,b],c] are allowed: > > <List> > <Const>a</Const> > <List> > <Var>X</Var> > <Const>b</Const> > </List> > <Const>c</Const> > </List> > > This n-ary List notation can be regarded as syntactic sugar for > the above Pair notation by statically rewriting each List to a Pair > nesting, as suggested by the [a,Y,c] examples. So, besides the > resulting distinguished Pair and Nil symbols, the semantics could > again be kept unchanged. > > -- Harold > >
Received on Wednesday, 13 June 2007 15:21:22 UTC