SPARQL returns one row for each possible matching. But to keep it short,
please provide:


1. The whole query that is executed

2. The whole code snippet that runs the query

3. The whole data of the matching resource, i.e. in your case the book
for which two rows are returned.

By the way, you can avoid using the subclasses explicitly which property
paths:

?x rdf:type/rdfs:subClassOf* mo:Book .


On 03.07.2017 23:09, Sidra shah wrote:
> Hello Andy and Lorenz, thank you.
>
> I have made a mistake that I used ?x rdf:type mo:Book , because Book has
> sub classes of Java and Semantic Web books. So if I use ?x rdf:type mo:Java
> or ?x rdf:type mo:SemanticWeb, it works.
>
> But still it prints the instances of these books twice.
>
>
>
> On Mon, Jul 3, 2017 at 3:44 PM, Andy Seaborne <[email protected]> wrote:
>
>>>> The prefixes are Ok because for simple queries (without Filter), it
>> works.
>>
>> So with
>>
>> SELECT  *  WHERE { ?s rdf:type mo:Book.?s mo:BookCategory ?book }
>>
>> you get something?  what?
>>
>>
>> If you do then ?book is not equal to (i.e. exactly) the string 'Semantic
>> Web'.
>>
>> In your original email, you had:
>>
>>    ?book ='str'
>>
>> (It is easy to run out of date code.)
>>
>>     Andy
>>
>>
>>
>> On 03/07/17 12:34, Sidra shah wrote:
>>
>>> I am giving the code after query, may be the problem exist in these lines.
>>>
>>>    Query query = QueryFactory.create(str);
>>> QueryExecution qexec = QueryExecutionFactory.create(query, model) ;
>>> ResultSet results = qexec.execSelect() ;
>>>          while (results.hasNext())
>>> {
>>> QuerySolution binding = results.nextSolution();
>>> Resource subj = (Resource) binding.get("s");
>>>                  ss= subj.getLocalName().toString();
>>>
>>>              System.out.println(ss);
>>>
>>> On Mon, Jul 3, 2017 at 2:12 PM, Sidra shah <[email protected]>
>>> wrote:
>>>
>>> Hello Lorenz, BookCategory is a data property whose value is string (Java
>>>> or Semantic Web).
>>>>
>>>> The print out of the query is given:
>>>>
>>>> PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>>>> PREFIX mo:<http://www.semanticweb.org/ontologies/2017/5/
>>>> untitled-ontology-758#>
>>>>   SELECT  *  WHERE { ?s rdf:type mo:Book.?s mo:BookCategory ?book.
>>>> FILTER ( ?book ='Semantic Web' ). }
>>>>
>>>> The prefixes are Ok because for simple queries (without Filter), it
>>>> works.
>>>>
>>>> On Mon, Jul 3, 2017 at 11:12 AM, Lorenz Buehmann
>>>> <[email protected]
>>>> leipzig.de> wrote:
>>>>
>>>> Is it Java code?
>>>>> Print the query string that is created.
>>>>>
>>>>> Check the prefixes.
>>>>>
>>>>> Make sure that you properly distinguish between literals and URIs -> is
>>>>> a book category a literal or a resource? Is the value of str a URI or a
>>>>> literal?
>>>>>
>>>>>
>>>>> On 03.07.2017 07:12, Sidra shah wrote:
>>>>>
>>>>>> Hello
>>>>>>
>>>>>> I have a Book class having Java and Semantic Web sub classes.
>>>>>> Java class have some instances: JSP, Java by Dietel, JDBC
>>>>>> Semantic Web has also some instances: SPARQL, Semantic Programming,
>>>>>> etc.
>>>>>>
>>>>>> I have a data property BookCategory for each instance which will be
>>>>>>
>>>>> either
>>>>>
>>>>>> Java or Semantic Web
>>>>>>
>>>>>> I have a combo box where users if select Java, all java books will be
>>>>>> displayed and similarly for semantic web.
>>>>>>
>>>>>> The following query does not work. (Display nothing)
>>>>>>
>>>>>>   String str=jComboBox1.getSelectedItem().toString();
>>>>>>
>>>>>> SELECT  *  WHERE { ?s rdf:type mo:Book.?s mo:BookCategory ?book FILTER
>>>>>> (
>>>>>> ?book ='str' ). }
>>>>>>
>>>>>>
>>>>>

Reply via email to