Re: ISSUE-100: Should ld-patch use a slash like sparql does, instead of as it currently does?

On Mon, Aug 18, 2014 at 12:00 PM, Sandro Hawke <sandro@w3.org> wrote:
> On 08/18/2014 08:17 AM, Alexandre Bertails wrote:
>>
>> Just to be more precise, this concerns the path expressions [1]. There
>> are already slashes being used there.
>>
>> So I guess Sandro's proposal is to make LD path expressions *look
>> like* SPARQL property paths.
>
>
> That's not my proposal.
>
> In general my view is that when the semantics are the same, the syntax
> should be the same, and when the semantics are different, the syntax should
> be different.  I hope we would all agree with that, in principle.
>
> After that, it's details.   Important details, like whether the semantics
> are the same.
>
> SPARQL as a path expression language and LD-Patch has path expression
> language.   There is no question they have different expressiveness.    I
> would argue that when they are saying the same thing, however, they should
> use the same syntax.
>
> For example, "start with node <a> then follow the <p1> property twice, then
> the <p2> property once".
>
> In SPARQL that looks like:
>
> <a> <p1>/<p1>/<p2>
>
> in LD-Patch that looks like:
>
> <a> /<p1>/<p1>/<p2>

Let me give you the rationale behind that. Also note that you may
understand better what's going on if you forget SPARQL for a moment
and start with a fresh mind.

If you look at the syntax and the abstract model, a path expression is
a list of path elements (either steps or constraints). There are meant
to be applied *to a set of nodes* (possibly with one element eg. the
starting node in a Bind), from left to right, and recursively when
nested.

In that context, / is an infix operator, the left hand side being a
set of nodes, and right hand side being a step.

The intuition is that when you see `node(s) / p1 / p2`, it means that
you start with the current nodes and try to follow p1, this gives you
a new set of nodes, on which you can now apply p2.

Then you may object that this seems to not work anymore when used in
constraints eg. `node(s) / p1 / p2 [ / p3 ]`. Actually, the set of
nodes when in a constraint is there *implicitly*, a constraint being
exactly like a higher-order function, whose argument is the set of
nodes before getting into the constraint.

/ is used consistently in the whole path, including its semantics.

Now again, same argument as last email, changing that would be a -0.9 for me.

>
> The semantics are (arguably) the same; the syntax is extremely similar,
> differing only in the leading slash.
>
> To me that difference is a show-stopper.  That's ISSUE-100.

A show-stopper? As in -1 or -0.9 ?

Alexandre

>
>       -- Sandro
>
>
>
>> But unlike SPARQL, LD path expressions can be nested, and include
>> constraints. SPARQL does that with FILTER and new constraints in the
>> BGP. The grouping in SPARQL (using parenthesis) is very different from
>> the constraints (square brackets and exclamation mark).
>>
>> I think it's a bad idea to make them feel like they behave the same,
>> which could be induced by the choice of the syntax.
>>
>> I don't want to stop the group with syntactical questions thought, so
>> just a -0.9 for me.
>>
>> Alexandre
>>
>> [1]
>> https://dvcs.w3.org/hg/ldpwg/raw-file/ldpatch/ldpatch.html#path-expression
>>
>> On Mon, Aug 18, 2014 at 10:59 AM, Linked Data Platform  Working Group
>> Issue Tracker <sysbot+tracker@w3.org> wrote:
>>>
>>> ISSUE-100: Should ld-patch use a slash like sparql does, instead of as it
>>> currently does?
>>>
>>> http://www.w3.org/2012/ldp/track/issues/100
>>>
>>> Raised by:
>>> On product:
>>>
>>>
>>>
>>>
>>>
>>
>

Received on Monday, 18 August 2014 16:31:08 UTC