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