- From: Alexandre Bertails <alexandre@bertails.org>
- Date: Mon, 18 Aug 2014 12:30:39 -0400
- To: Sandro Hawke <sandro@w3.org>
- Cc: Linked Data Platform Working Group <public-ldp-wg@w3.org>
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