Matthew,

You should look at the text of the results, you might well be hitting 4store's 
complexity limiter. If you are there there will be a comment to that effect.

You can turn up the limit with soft_limit in the query params, default is about 
1000. You can turn it off by setting it to -1. c.f. 
http://4store.org/trac/wiki/SparqlServer#SoftLimits and 
http://4store.org/trac/wiki/Query

- Steve

On 2010-08-03, at 16:10, Matthew Pocock wrote:

> [replied in public-sparql-dev only to avoid cluttering public-owl-dev]]
> 
> Thanks Lee, that got me started. However, I'm now seeing strange results when 
> running this against my real data.
> 
> The simplest query finds all a,b,c as follows:
> 
> prefix rt: <http://cs.ncl.ac.uk/ib2010_data.1.2/relationType/>
> 
> select distinct ?a ?b ?c where
>   { ?a rt:sim ?b
>   . ?b rt:bi_to ?c
>   }
> 
> When I run this, I get 30,233 results. Now, if I search for all of those 
> where in addition, a rt:bi_to c:
> 
> select distinct ?a ?b ?c where
>   { ?a rt:sim ?b
>   . ?b rt:bi_to ?c
>   . ?a rt:bi_to ?c
>   }
> 
> This returns 5,800 results.
> 
> Now, we try the negation-as-failure query to pull out things where a rt:bi_to 
> c is not asserted:
> 
> select distinct ?a ?b ?c where
>   { ?a rt:sim ?b
>   . ?b rt:bi_to ?c
>   . OPTIONAL
>     { ?a rt:bi_to ?c2
>     . FILTER(?c = ?c2)
>     }
>   . FILTER (!BOUND(?c2))
>   }
> 
> This returns 29,078 results. Since in every case of the original query, 
> either a does or a does not rt:bi_to c, I would expect 29,078 + 5,800 to sum 
> to 30,233. However, this is obviously not the case. So perhaps it's something 
> to do with this negation clause. Let's try again but flip the bound filter, 
> to recover a query that should behave the same as the 2nd one above:
> 
> select DISTINCT ?a ?b ?c where
>   { ?a rt:sim ?b
>   . ?b rt:bi_to ?c
>   . OPTIONAL
>     { ?a rt:bi_to ?c2
>     . FILTER(?c = ?c2)
>     }
>   . FILTER (BOUND(?c2))
>   }
> 
> This returns only 2,734 results, which clearly is not equal to 5,800, and 
> also does not get us to 30,233. Reassuringly, if we drop the filter..bound 
> clause entirely, we get the count we'd expect.
> 
> select DISTINCT ?a ?b ?c where
>   { ?a rt:sim ?b
>   . ?b rt:bi_to ?c
>   . OPTIONAL
>     { ?a rt:bi_to ?c2
>     . FILTER(?c = ?c2)
>     }
>   }
> 
> This returns 30,233 hits.
> 
> I am now utterly perplexed. There's no fancy reasoning going on - this 
> particular collection of triples have not been introduced to rdfs or owl 
> reasoning of any sort, so same_as collapsing or any other trickery should not 
> be happening.
> 
> I've been using 4store and its 4s-query application to execute the queries.
> 
> Matthew
> 

Reply via email to