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


Reply via email to