W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > October to December 2006

Re: [Fwd: SPARQL OPTIONAL vs UNION treatment of sub-graph matching]

From: Lee Feigenbaum <feigenbl@us.ibm.com>
Date: Fri, 27 Oct 2006 11:23:57 -0400
To: RDF Data Access Working Group <public-rdf-dawg@w3.org>
Message-ID: <OF69B95E52.28B055A6-ON85257214.00547CFF-85257214.00549660@us.ibm.com>

Steve Harris wrote on 10/27/2006 11:09:07 AM:
> On 27 Oct 2006, at 14:40, Seaborne, Andy wrote:
> 
> >
> > Forwarded to the working group list from the comments list as 
> > related to our current discussions.
> >
> >    Andy
> >
> > -------- Original Message --------
> > Subject:    SPARQL OPTIONAL vs UNION treatment of sub-graph matching
> > Resent-Date:    Fri, 27 Oct 2006 10:53:41 +0000
> > Resent-From:    public-rdf-dawg-comments@w3.org
> > Date:    Thu, 26 Oct 2006 19:23:43 -0400
> > From:    Patrick Shironoshita <Patrick.Shironoshita@infotechsoft.com>
> > To:    <public-rdf-dawg-comments@w3.org>
> > CC:    'Mansur Kabuka' <kabuka@infotechsoft.com>
> >
> > As part of our work in implementing ontology-based querying, we have
> > developed an algebra for SPARQL which we have recently submitted for
> > publication. During the development of this query algebra, we have 
> > found
> > that the treatment of graph matching in OPTIONAL and UNION graph
> > patterns is, in our opinion, inconsistent, in particular with 
> > respect of
> > the issue of sub-graph matching - that is, in the issue of whether
> > solutions to a graph pattern can be sub-graphs of other solutions.
> >
> > Consider, for example, the following OPTIONAL query (from the 
> > SPARQL spec):
> >
> > Data:
> >
> > @prefix foaf:       <http://xmlns.com/foaf/0.1/> .
> > @prefix rdf:        <http://www.w3.org/1999/02/22-rdf-syntax-ns#> ..
> >
> > _:a  rdf:type        foaf:Person .
> > _:a  foaf:name       "Alice" .
> > _:a  foaf:mbox       <mailto:alice@example.com> .
> > _:a  foaf:mbox       <mailto:alice@work.example> .
> >
> > _:b  rdf:type        foaf:Person .
> > _:b  foaf:name       "Bob" .
> >
> > OPTIONAL Query:
> >
> > PREFIX foaf: <http://xmlns.com/foaf/0.1/>
> > SELECT ?name ?mbox
> > WHERE  { ?x foaf:name  ?name .
> >          OPTIONAL { ?x  foaf:mbox  ?mbox }
> >        }
> >
> > OPTIONAL query Result:
> > name   mbox
> > "Alice"   <mailto:alice@example.com>
> > "Alice"   <mailto:alice@work.example>
> > "Bob"   (unbound)
> >
> >
> > Now, consider, over the same data set, the following UNION query:
> >
> > UNION Query:
> >
> > PREFIX foaf: <http://xmlns.com/foaf/0.1/>
> > SELECT ?name ?mbox
> > WHERE  {    { ?x foaf:name  ?name }
> >             UNION
> >
> >             { ?x foaf:name  ?name . ?x  foaf:mbox  ?mbox }
> >        }
> >
> > UNION Query Result, as per (our understanding of the) current SPARQL
> > working draft:
> >
> >
> > name    mbox
> > "Alice"    (unbound)
> > "Bob"    (unbound)
> > "Alice"    <mailto:alice@example.com>
> > "Alice"    <mailto:alice@work.example>
> >
> > where the first two rows match the first part of the UNION pattern, 
> > and
> > the second two rows match the second part.
> >
> > As can be seen, the results from the OPTIONAL and UNION queries are
> > different only in that the UNION query allows a sub-graph of another
> > solution, while OPTIONAL explicitly does not. While there is no
> > requirement in SPARQL that the two queries presented above produce the
> > same results, we argue that the implementation of query processors and
> > optimizers for SPARQL would be made simpler if either OPTIONAL or 
> > UNION
> > is redefined so that both the queries above yield the same result - 
> > and,
> > therefore, so that OPTIONAL can be defined in terms of UNION as 
> > follows:
> >
> > P1 OPTIONAL P2  = P1 UNION { P1 . P2}
> 
> In my opinion that would defeat the purpose of optional (http:// 
> www.w3.org/TR/rdf-dawg-uc/#r3.6), if I say

+1 to this. I don't see any appealing reason for having OPTIONAL have the 
above semantics.

Lee
 
> --data--
> 
> :bobA :name "Bob" ;
>        :phoneNumber "123456" .
> :bobB :name "Bob" .
> 
> --query--
> 
> SELECT ?person ?phone
> WHERE {
>    ?person :name "Bob" .
>    OPTIONAL {
>      ?person :phoneNumber ?phone
>    }
> }
> 
> --results--
> 
> ?person ?phone
> :bobA   "123456"
> :bobB
> 
> I want to get unbound results for ?phone iff there is no triple like
> :bobA :phoneNumer "123456" .
> 
> - Steve
> 
Received on Friday, 27 October 2006 15:24:50 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 16:15:27 GMT