Consider e.g.: hasAnnotation (Note that I have chanced the rdf:type to owl:ObjectProperty) <rdf:Resource rdf:about="http://bibframe.org/vocab/hasAnnotation"> <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/> * <rdfs:domain rdf:resource="http://bibframe.org/vocab/Work"/>* * <rdfs:domain rdf:resource="http://bibframe.org/vocab/Instance"/>* * <rdfs:domain rdf:resource="http://bibframe.org/vocab/Authority"/>* <rdfs:range rdf:resource="http://bibframe.org/vocab/Annotation"/> <rdfs:label>Has Annotation</rdfs:label> </rdf:Resource> If we create two individuals, thingA and thingB _:thingA rdf:type bf:Work _:thingB rdf:type bf:Annotation _:thingA bf:hasAnnotation _:thingB And run a reasoner, we get the additional inferences: _:thingA rdf:type bf:Work _:thingA rdf:type bf:Authority _:thingA rdf:type bf:Instance This is because the ontology is asserting that anything that has an Annotation must be a Work, an Authority, and an Instance. If we try to assert that thingA is not an Instance, the reasoner will fail due to inconsistency. What was probably intended was that if something has an Annotation, it is a Work or an Authority or an Instance. This would be expressed using a unionOf axiom - e.g.: ObjectPropertyDomain(bf:hasAnnotation ObjectUnionOf(bf:Authority bf:Instance bf:Work)) We can now safely assert that thingA is not an Instance, though we could also assert that it is, since the classes are not disjoint. We can even assert remove the assertion that thingA is a Work, and instead assert that it is not an Instance or an Authority, and the reasoner will be able to infer that it must be a Work. Simon