TL;DR version: use --think= rather than --apply= for cwm reasoning In cwm, --apply=r.n3 will apply the rules in r.n3 to the triples in the store in one pass and add any newly inferred triples to the store. The newly inferred triples will not, in general, be available for reasoning with the rules in r.n3 as they are being added to the store. --think=r.n3, however, does an --apply and then keeps on running the rules in multiple passes over the store until no further conclusions can be drawn. Unless you know that the new triples generated by a set of rules can not themselves combine with the rules, you should probably use think. As an example, look at ex1.ttl in examples/n3/apply_vs_think ex1.ttl has: :Student rdfs:subClassOf :Person . :Person rdfs:subClassOf :Mammal . :Mammal rdfs:subClassOf :Animal . :john a :Student. Doing cwm ex1.ttl --apply=rdfs-rules.n3 produces the new triples :john a :Mammal, :Person, :Student, rdfs:Resource . whereas cwm ex1.ttl --think=rdfs-rules.n3 produces :john a :Animal, :Mammal, :Person, :Student, rdfs:Resource . The relevant N3 rule being used here is {?A rdfs:subClassOf ?B. ?S a ?A} => {?S a ?B}. In this case, the new type triples being inferred (e.g., :john a :Person) can combine with other triples in the store and the rule to yield more triples. So, --think should be used.