- From: Lee Feigenbaum <lee@thefigtrees.net>
- Date: Wed, 02 Sep 2009 02:52:25 -0400
- To: Chimezie Ogbuji <ogbujic@ccf.org>
- CC: "public-sparql-dev@w3.org" <public-sparql-dev@w3.org>
Chimezie Ogbuji wrote: > Hello. > > I have a particular class of problems that I'm unable to formulate as a > SPARQL query (using the current standard). I was hoping somebody might have > a solution and if not, perhaps this is something I can bring up for the WG. > If people think it is worth forwarding there, I can do so - I just wasn't > sure if that was the right forum initially. > > Basically, the problem is one where I want to find "all resources that are > not a member of a specific class". This seems to be especially problematic > for RDF graphs where each resource has *multiple* rdf:type statements. > Consider the graph: > > _:b rdf:type D > _:a rdf:type C > _:a rdf:type D > _:a rdf:type B > > And we want to find "all resources that are not a member of the C class," > where the *not* in this case is meant in the closed world sense (i.e., > basically there is no statement of the form: ?RESOURCE a C in the graph). > Otherwise, disjointness axioms can be used (i.e., disjointWith, > differentFrom, etc.) to entail membership with the complement of C. > > If you were to try using the MINUS ( Difference of graph patterns ) template > introduced in [1] (in order to account for the fact that the simple form > doesn't allow you to use a vanilla OPT/FILTER/!BOUND query): > > { ?RESOURCE a ?KIND } MINUS { ?RESOURCE a C } > > You would get the following SPARQL query > > SELECT ?RESOURCE ?KIND > { > ?RESOURCE a ?KIND > OPTIONAL { > ?RESOURCE a C > ?RESOURCE2 a C > FILTER(?RESOURCE2 = ?RESOURCE) > } > FILTER(!BOUND(?RESOURCE2)) > } > > > However you would get the following solution set: > > ?RESOURCE ?KIND > _:b D > _:a D > _:a B Hi Chime, I actually think that your query is correct and that under SPARQL semantics it will return exactly the result yet you want: ?RESOURCE ?KIND _:b D I've tested this in Glitter (Open Anzo's SPARQL engine) and I do indeed get only this single row. (I'd usually test this in ARQ which I have the most confidence in as an accurate implementation of the SPARQL semantics, but I can't seem to find my local copy of it right now and http://sparql.org is not responsive for me at the moment.) This single solution falls out of the definition of LeftJoin and Diff in the current specification, I believe. If you'd like, I'd be happy to work through the details of the algebra. Lee > Which (incorrectly) includes _:a (it is a member of C). It seems, perhaps > the source of the problem is that most of the relevant algebraic operations > (needed to express the constraint) only apply to individual solution sets at > a time (rather than a multiset of solutions as a whole). > > This makes me wonder if indeed SPARQL is as expressive as Datalog with > default negation (minimal, stable, stratified, or otherwise), since my > understanding is that the following query against the equivalent Datalog > program should give the correct answer. > > QUERY: not rdf_type(?RESOURCE C) > > Since it will simply check for the absence of any literal that 'matches' in > the model. > > Am I missing a simple solution to this class of problems? And if not, will > this problem carry over to the next generation of the query language? > > Thanks > > [1] Angles, R. and Gutierrez, C., "The Expressive Power of SPARQL." Springer > > ---------------------- > Chimezie (chee-meh) Thomas-Ogbuji (oh-bu-gee) > Heart and Vascular Institute (Clinical Investigations) > Cleveland Clinic (ogbujic@ccf.org) > Ph.D. Student Case Western Reserve University > (chimezie.thomas-ogbuji@case.edu) > > > =================================== > > P Please consider the environment before printing this e-mail > > Cleveland Clinic is ranked one of the top hospitals > in America by U.S. News & World Report (2008). > Visit us online at http://www.clevelandclinic.org for > a complete listing of our services, staff and > locations. > > > Confidentiality Note: This message is intended for use > only by the individual or entity to which it is addressed > and may contain information that is privileged, > confidential, and exempt from disclosure under applicable > law. If the reader of this message is not the intended > recipient or the employee or agent responsible for > delivering the message to the intended recipient, you are > hereby notified that any dissemination, distribution or > copying of this communication is strictly prohibited. If > you have received this communication in error, please > contact the sender immediately and destroy the material in > its entirety, whether electronic or hard copy. Thank you. > > >
Received on Wednesday, 2 September 2009 06:53:18 UTC