- 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