- From: Andy Seaborne <andy.seaborne@epimorphics.com>
- Date: Mon, 12 Dec 2011 13:22:48 +0000
- To: Gregory Williams <greg@evilfunhouse.com>
- CC: public-rdf-dawg@w3.org
>>> "BGP( ?s :p1 ?v1 .?s :p2 ?v2 )"
>>> The whitespace is odd in this syntax, but I'm more curious about the choice of '.' as a separator for triples in the serialization of the BGP algebra.
>>
>> Whitespace fixed.
>>
>> DOT separated triples in SPARQL syntax so I left it in to show the division of triples.
>
> Ah. I didn't realize that what shows up inside a BGP(…) is sparql syntax. I expected a list of triples, so probably comma separated.
It's not formalised, it's illustrative examples. Comma is SPARQL syntax
for repeated objects. Seemed easier to use . to separate triples.
>>> "variable must not appear in VS; if it does then generate a syntax error and stop"
>>> I think this should also prevent the variable from appearing in P (the list of already projected variables).
>>
>> VS is defined as the variables in the { pattern } from above.
>
> I'm not sure that actually addresses my concern. Shouldn't this
> address the case where the same variable appears in two (expr AS
> variable) selItems? On the first one, (variable, expr) is appended to E.
> On the second one, I'd expect that the restriction preventing the
> variable from appearing in the pattern *should also* prevent the
> variable from appearing in previously handled selItems, and similarly
> generate a syntax error.
Sorry - I had read your original comment differently.
Changed to "variable must not appear in VS nor in PV"
"""
where PV is the accumulating list of projected variables.
"""
>>>
>>> The 'term path term' form is defined as:
>>> """
>>> eval(D(G), ZeroOrMore(x:term, path, y:term)) =
>>> { { } } if (x,vy:var) in eval(D(G), ZeroOrMore(x, path, vy); card[{ }] = 1
>>> """
>>> I don't understand this formulation, as I understand eval(D(G),
>>> ZeroOrMore(...)) as returning multisets of (var, term) pairs, but this
>>> seems to be looking for a (term, var) pair. Why isn't this as simple as
>>> "{ {} } if y in ALP(x, path), card[] = 1" (the opposite of the negative
>>> case which returns the empty multiset)?
>>
>> I think "in" is clear to mean a pair in the multiset of sets but I've added {} round. Does that help?
>
> No, the original syntax without the braces was fine. My point was
> that the formulation seems to be looking for a (term, var) element, but
> eval() returns a set of (var, term) elements. They're reversed. But the
> solution probably isn't as simple as reversing the syntax, because then
> you'd be looking at the path backwards...
Changed to
eval(D(G), ZeroOrMore(x:term, path, y:term)) =
{ { } } if { (vy:var,y) } in eval(D(G), ZeroOrMore(x, path, vy);
card[{ }] = 1
{ } if y not in ALP(x, path), card[] = 0
it should be looking to see of the end of the path is y.
and also
eval(D(G), OneOrMore(x:term, path, y:term)) =
{ { } } if { (vy:var, y) } in eval(D(G), OneOrMore(x, path, vy);
card[{ }] = 1
{ } if y not in ALP(x, path), card[] = 0
Andy
Received on Monday, 12 December 2011 13:24:05 UTC