Re: query RDF dataset

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