OntoBroker implements negation as the so-called "default negation" (OntoBroker supports both stratified and wellfounded negation). This means that when you have the program:
QUERY q1: ?- q(?X) AND NOT r(?X).
Then OntoBroker evaluates the rule as follows:
|1.||Retrieve all tuples for q(X): X=a, X=b|
|2.||Retrieve all tuples for r(X): X=a|
|3.||Subtract the tuples r(X) from q(X).|
So the result of the query is "X=b" because b does not occur in r(X) and hence the formula "NOT r(X)" is true.
Imagine what would happen if we had the program:
QUERY q1: ?- NOT r(?X).
We have nothing as the base where we could subtract the r(X) facts from. So the result would be infinitely large (= the result size is not range restricted).