- From: Lee Feigenbaum <lee@thefigtrees.net>
- Date: Tue, 24 Nov 2009 09:24:00 -0500
- To: Ivan Herman <ivan@w3.org>
- CC: Andy Seaborne <andy.seaborne@talis.com>, SPARQL Working Group <public-rdf-dawg@w3.org>
Ivan Herman wrote: > > Andy Seaborne wrote: >> Maybe it is - that's one of the things that needs working out. I hjope >> I'm wrong but it looks to me like there is nothing different about this >> subcase but I haven't had the time to investigate in depth (hint, hint). >> >> For example, what happens about multiple identical matches? A BGP >> doesn't generate duplicates - if >> >> rdf:rest*/rdf:first >> >> and >> >> rdf:rest*{?len}/rdf:first >> >> are the same, just the first is a projection of the second to remove >> ?len, then there are duplicates. Do we care? >> >> I don't have any experience with a matcher that does not terminate early >> when looking for, say: >> >> ?list rdf:rest*/rdf:first "SomeFixedItem" . >> >> but "SomeFixedItem" may be in the list twice. >> >>> I am not too much worried about the multiple paths case: we can simply >>> declare that this case is undetermined, or we can say that it is >>> minimum/maximum of the paths. I believe for the use cases when there is >>> a need for the length (like the authors' list I referred to) the path is >>> unique. >> What are the technical characteristics for this special case? What is >> the defining feature that makes it a special situation and not an >> application of the general one? If we can articulate that, we may be >> able to define a solution for it. > > A possible digression to justify what I write below. > > If I have > > SELECT ?a ?b > WHERE { > { ?a ex:q ?b } > UNION > { ?a ex:p ?b } > } > > with the data > > :x ex:q :y. > :x ex:p :y. > > then I will receive the pair :x and :y twice, right (unless I use > DISTINCT). > > This means that, in fact and by analogy it would not shock me if we had > similar duplications if there are multiple possible pathes from ?a to ?b > with different lengths, and that length is explicitly asked for... So > talking about minimal or maximal length is unnecessary. If we have two > possible ways to get from ?a to ?b and ?len is asked for, then we will > have two possible solutions that differ in the value assigned to ?len. > If no such value is required, then we get only the match of ?a ?b. Actually, I think this complexity (returning all paths between two nodes) is exactly why much of the group is reluctant to pursue variable paths and path lengths. At least, it's definitely why I don't want to pursue that at this point. Lee > I have the feeling looking at it this way simplifies things. So we can have > > ?a path*(?a) ?b. > ?a path+(?a) ?b. > ?a path{n,m}(?a) ?b. > > where ?a is assigned the length of the path in case of match; if there > are different ways of getting from ?a to ?b and there is an explicit > length in the query request, then there are several solutions. (I have > changed the syntax to use '()' instead of '{}' to avoid a clash with the > {n,m} case) > > You also had a slightly pathological case (if my understanding is > correct) on > > WHERE { > ?a path* ?b > ?a path*(?len) ?b > } > > I am not 100% sure of what to do there; my instinct would be that the > match with ?a and ?b without length qualifier is simply treated as a > separate solution (with ?len not assigned)... > > Does this help? > > ivan > > > > >
Received on Tuesday, 24 November 2009 14:24:33 UTC