Designing an Ontology (using the Web Ontology Language – OWL) can be a difficult thing. Creating a model is difficult on its own, and it is further complicated by the subtleties of the language. Consider an Ontology with the following classes and properties
It is common to use a reasoner with an Ontology. The result is that the reasoner uses logic to find things out about the world. If I state that Sue Has_Brother Bob, a reasoner will then decide that Bob must be a Male and Sue must be a Person. In other words, a range or domain does not typically limit what can be used, but rather, provides information about what is used. If the individuals are expanded and Sue is listed as a Female, what is the effect of stating that Bob Has_Brother Sue? Sue is then interpreted by a reasoner as type Male. As it stands, this is not a problem; Sue is both a Male and a Female. If you desire that it is a problem, then the Ontology should state that Male disjointWith Female (or Female disjointWith Male). Stating that Sue is a Female and that she is the brother of Bob allows a reasoner to notice that the Ontology individuals are inconsistent.
In the presented Ontology, Has_Pet has no range specified. This is another very common error, set Cat and Dog for the range?
<rdf:Description rdf:about="http://www#Has_Pet">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
<rdfs:range rdf:nodeID="A0"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A0">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
<owl:unionOf rdf:nodeID="A1"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A1">
<rdf:first rdf:resource="http://www#Cat"/>
<rdf:rest rdf:nodeID="A2"/>
</rdf:Description>
<rdf:Description rdf:nodeID="A2">
<rdf:first rdf:resource="http://www#Dog"/>
<rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
</rdf:Description>
<owl:Class rdf:ID="Human">
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#has_parent"/>
<owl:allValuesFrom rdf:resource="#Human"/>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
Until next time... You may find useful information here:
http://www.w3.org/TR/owl-features/
http://en.wikipedia.org/wiki/Web_Ontology_Language