- From: Lee Feigenbaum <feigenbl@us.ibm.com>
- Date: Fri, 20 Oct 2006 10:17:52 -0400
- To: RDF Data Access Working Group <public-rdf-dawg@w3.org>
- Message-ID: <OF2DEF8D7B.4813C17C-ON8525720D.004E6ED1-8525720D.004E8A75@us.ibm.com>
Andy Seaborne wrote on 10/20/2006 09:18:02 AM: > > This message is an outline for an operational definition of the > SPARQL algebra. > > There is advocacy for this change in the working group; this message is to > check that with everyone; to get early feedback, and to check we areagreed on > what it means. The style of approach isn't new - Fred's work embodies this > style as does the Chilean paper. On my initial examination, everything here agrees with my recent thoughts and understanding, and I'd be happy with it. I think we should name the operators the same as the keywords wherever we can (so LeftJoin -> Optional, but Join can stay). Lee > This is not about syntax at this stage. > > == Preliminaries > > BGP matching: this is taken as an input and we assume that any BGP matches the > target graph and generates solutions with every mentioned named query variable > having a binding. We continue to allows for different entailment regimes and > specifically use with OWL-DL. There is no assumptions about blank nodes and > mappings (which only affects duplicates). > > The output of a evaluating a BGP is a collection of solutions. > > == Outline > > The SPARQL algebra consists of the following operators for manipulating > collections of solutions (type R): > > Join(R,R) -> R > LeftJoin(R,R) -> R > Union(R,R) -> R > filter(R) -> R > > I have no particular attachment to the choice of operator names. In > particular, calling it "optional", not "left join" might be better, > > Join and left join need to be defined for the SPARQL case because > they are not > exactly as defined for SQL or in a relational algebra. > > Evaluation of an expression is functional (AKA bottom-up; constructional > (Fred's work [1] and as worked out by Jorge et al [2]). > > UNION is union > Filters go at the end of groups conceptually > (i.e. after compositional operations). > OPTIONAL is left-join. > > A group is a sequence of the join/left-join the filters of its elements. > Elements are already evaluated. > Evaluation in a group is ordered left to right > (left-nested; left-associative). > Using {} will change the order of evaluation if required. > > > == Some interesting queries: > > Some interesting queries to consider: not problems or show stoppers, just > interesting. > > {} > > By pure construction, this is could be considered to be empty (no > construction). So inserting it into a pattern would be an operation on an > empty solution collection resulting in an empty solution. > > Currently, we define it to have one solution with no bindings - we should > continue to do so. > > > { OPTIONAL {...} } > evaluates as { {} OPTIONAL {...} } The principle is that every group has at > least the unit table in it or that every group has the unit table onthe left > hand side. > > > { FILTER(expr) } evaluates as { {} FILTER(expr) } which > means that { FILTER(expr) } does not propagate the filter effect. This is a > change from the declarative approach (top-down) where any pattern applies the > whole solution being considered, not the part being constructed. > > > { pattern[?x] OPTIONAL { pattern[!?x] OPTIONAL { pattern[?x] } } > > [?x] means mentions ?x, [!?x] means does not mention ?x. > Like the filter case above, this is a change from the declarative approach. > Discussed in Jorge's paper and (for example) [3]. > > > { { P1 FILTER(expr) } P2 } > evaluates the filter before P2. Might matter if filter has a > !bound() in it or relies on a bound variable, and P2 mentions that variable > and p1 does not. > > > == Notes > > The domain of solutions naturally emerges (it happens as a result of the > definitions) because the constructional nature. > > No need for Chilean proposal 4 for additional restrictions - which I feel is > too strong anyway (example below): > > SELECT * > { > ?x rdf:type skos:Concept . > OPTIONAL { ?x skos:prefLabel ?label } > OPTIONAL { ?x skos:altLabel ?label } > } > > which gets labels in preferred order. > > Andy > > > [1] http://lists.w3.org/Archives/Public/public-rdf-dawg/2006JulSep/0033 > [2] http://lists.w3.org/Archives/Public/public-rdf-dawg-comments/2006Jun/0008 > [3] http://tech.groups.yahoo.com/group/jena-dev/message/25717?var=0&l=1 > > >
Received on Friday, 20 October 2006 14:18:13 UTC