- From: Seaborne, Andy <andy.seaborne@hp.com>
- Date: Thu, 13 Apr 2006 15:26:32 +0100
- To: Jorge Pérez <jperez@utalca.cl>
- CC: public-rdf-dawg-comments@w3.org
Jorge Pérez wrote: > Hi!, I try but I cannot find an answer to my question in the mailing > list, sorry if the question was already answered. > > The right answer for an optional pattern is very clear when there is no > nesting, i.e. when one can easily read the formal defintion "S is a > solution of OPT(A,B) if S is a...". I understand that OPT(A, B) refeers > to > > { > A . > OPTIONAL { B } > } > > But when there is a nested optional pattern it appears to be a confusion, > for: > > { > A . > OPTIONAL { > B . > OPTIONAL { C } > } > } > > What is the right answer? I think that there are at least two > posibilities: > > 1) one is to think in the composition of two binary operations, a > binary operation between B and C, and a binary operation between > A and the result of the previous operation, something like > OPT(A, OPT(B, C)). The formal defintion in this case is clear > followind the doc: S is a solution of OPT(A, OPT(B,C)) if S is a > solution of A and of OPT(B, C) otherwise if S is a solution to A > but not to A and OPT(B, C). Yes - it's opt(A, opt(B,C)). and A OPTIONAL B OPTIONAL C is opt(opt(A,B), C) > > 2) the other posibility is to think of the application of one single > ternary operation, i.e. somethign like OPT(A, B, C). The formal > definition here would be: S is a solution of OPT(A, B, C) if S is a > solution of A and B and C, otherwise if S is a solution of A and B but > not of C, otherwise if S is a solution to A but not to B. Surely OPT(A, B, C) == OPT(A, OPT(B, C)) by that definition anyway? > > In the last draft it seems that when defining formally the optional > matching the editors agree with 1) for nesting when thay say > "a combination of two patterns...". But when they are informally > reading the examples of nested optional patterns I think they agree > with 2). When looking in some implementations (SPARQLer for example) > they seems to use 2. for evaluation... SPARQLer (or rather ARQ, for that is the query engine being used) is doing (1) almost exactly: ARQ builds soltuion up, rather than consider all possibilities and narrow them down. The in-memory algorithm is roughly: 1/ Calculate A to get an iterator of solutions to A 2/ For each solution to A, attempt to do OPTIONAL(Z) where Z is B OPTIONAL C either output the results of that or the original input solution from A. 3/ In doing Z, it's the same, take the input solution, solve B, attempt to solve C given the solution of A and B Output either the solution from A fed into B fed into C or just A fed into B Andy > > What is the right formal definition of nested patterns? > Thanks... > > -------- > Jorge Pérez R. > http://ing.utalca.cl/~jperez > > ------------------------------------------------- > Este mensaje fue enviado por: http://webmail.utalca.cl > >
Received on Thursday, 13 April 2006 14:26:57 UTC