- 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