- From: Lee Feigenbaum <lee@thefigtrees.net>
- Date: Sat, 30 May 2009 15:51:34 -0400
- To: Jitao Yang <jitao.yang@gmail.com>
- CC: public-sparql-dev@w3.org
Jitao Yang wrote: > Dear all, > > if there is a RDF like: > > <?xml version="1.0" encoding="utf-8"?> > <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" > xmlns:dc="http://purl.org/dc/elements/1.1/"> > <rdf:Description rdf:about="http://example.org/BookJava"> > <dc:fullname>Book Java</dc:fullname> > <dc:author> > <rdf:Description > rdf:about="http://example.org/BookJava/authorA"> > <dc:fullname>Bob Smith</dc:fullname> > <dc:country>Italy</dc:country> > </rdf:Description> > </dc:author> > <dc:author> > <rdf:Description > rdf:about="http://example.org/BookJava/authorB"> > <dc:fullname>Tom Bush</dc:fullname> > <dc:country>Italy</dc:country> > </rdf:Description> > </dc:author> > </rdf:Description> > > <rdf:Description rdf:about="http://example.org/BookCpp"> > <dc:fullname>Book Cpp</dc:fullname> > <dc:author> > <rdf:Description rdf:about="http://example.org/BookCpp/author1"> > <dc:fullname>Alice Bird</dc:fullname> > <dc:country>Italy</dc:country> > </rdf:Description> > </dc:author> > <dc:author> > <rdf:Description rdf:about="http://example.org/BookCpp/author2"> > <dc:fullname>Mike Luck</dc:fullname> > <dc:country>France</dc:country> > </rdf:Description> > </dc:author> > </rdf:Description> > </rdf:RDF> > > > and I query the RDF by: > > PREFIX dc:<http://purl.org/dc/elements/1.1/> > SELECT DISTINCT ?bookName > WHERE { > ?bookName dc:author ?author . > {?author dc:country ?country . FILTER(?country = > "Italy")} > }; > > the query results are: > > --------------------------------- > | bookName | > ================================= > | <http://example.org/BookCpp> | > | <http://example.org/BookJava> | > --------------------------------- > > can anybody tell me how to query out the "book whose authors' country > are all Italy "? > which means the query results should be: > > --------------------------------- > | bookName | > ================================= > | <http://example.org/BookJava> | > --------------------------------- Jitao, It's not pretty, but you should be able to do it with something like: PREFIX dc:<http://purl.org/dc/elements/1.1/> SELECT DISTINCT ?bookName WHERE { # first, make sure there's an author from italy ?bookName dc:author ?author . ?author dc:country ?country . FILTER(?country = "Italy") . # next, "try" to find another author not from italy OPTIONAL { ?bookName dc:author ?author2 . ?author2 dc:country ?country2 . FILTER(?country2 != "Italy") } # finally, we only want this book if we didn't find any non-Italy # authors FILTER(!bound(?country2)) } (Warning, untested query.) hope this helps, Lee > > Thank you very much for your help! > > Best wishes, > Jitao
Received on Saturday, 30 May 2009 19:52:13 UTC