- From: Jitao Yang <jitao.yang@gmail.com>
- Date: Tue, 2 Jun 2009 09:51:00 +0200
- To: semantic-web@w3.org, www-rdf-interest@w3.org
- Message-ID: <eb1226bd0906020051k60436073p1b5761b2c50ec0cd@mail.gmail.com>
Dear all, if I have an RDF file 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/" xmlns:vcard="http://www.w3.org/2001/vcard-rdf/3.0#"> <rdf:Description rdf:about="http://example.org/BookJava"> <vcard:fullname>Book Java</vcard: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"> <vcard:fullname>Book Cpp</vcard:fullname> <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> <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/BookJava/authorB "> <dc:fullname>kobe Mc</dc:fullname> <dc:country>Italy</dc:country> </rdf:Description> </dc:author> </rdf:Description> <rdf:Description rdf:about="http://example.org/BookC"> <vcard:fullname>Book C</vcard:fullname> </rdf:Description> </rdf:RDF> I want to query "the books whose authors are all Italian" or "the books which have no authors", so I use SPARQL like: PREFIX dc:<http://purl.org/dc/elements/1.1/> PREFIX vcard:<http://www.w3.org/2001/vcard-rdf/3.0#> SELECT DISTINCT ?bookName WHERE { ?bookURI vcard:fullname ?bookName . OPTIONAL{ ?bookURI dc:author ?author . ?author dc:country ?country . FILTER(?country = \"Italy\") . OPTIONAL{ ?bookURI dc:author ?author2 . ?author2 dc:country ?country2 . FILTER(?country2 != \"Italy\") } FILTER(bound(?country2)) } FILTER(!bound(?author)) } I can get the right answers: --------------- | bookName | =============== | "Book C" | | "Book Java" | --------------- but, my original idea is FILTER(!bound(?country2)) which means filter the books which have non-Italian authors, however if I use FILTER(!bound(?country2)), it will return the opposite answers: -------------- | bookName | ============== | "Book C" | | "Book Cpp" | -------------- I can not understand the reasons? Thank you very much for your help to explain to me. Best wishes, Jitao
Received on Tuesday, 2 June 2009 07:52:04 UTC