Designing An Ontology In OWL - Every object must use this property

My last posting Designing An Ontology In OWL - Using A Domain Or Range dealt with the domain and range values on properties. Consider a class Author and a property is_author_of that has a domain of Author. This means that it maps Authors to the thing that they authored. Using the property, therefore, allows an inference engine to determine that an individual is of type Author because it has the property is_author_of.

By setting a domain or range, you cause an inferential consequence that individuals linked using the property have a specific type. On the other hand, what if you want to say that an Author is the author of something? You can do this using a Restriction.

  1. <owl:Class rdf:ID="Author"> 
  2.   <rdfs:subClassOf>
  3.     <owl:Restriction> 
  4.       <owl:onProperty rdf:resource="#is_author_of"/>
  5.       <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality>
  6.     </owl:Restriction> 
  7.   </rdfs:subClassOf>
  8. </owl:Class>

In this case, inferential consequence is that any Author is known to be the author of at least one thing. This does not mean that you must list the item, it just means that somewhere in the world there exist at least one thing that the individual is an author of. You can do something similar using someValuesFrom.
  1. <owl:Class rdf:ID="Author"> 
  2.   <rdfs:subClassOf>
  3.     <owl:Restriction> 
  4.       <owl:onProperty rdf:resource="#is_author_of"/>
  5.       <owl:someValuesFrom rdf:resource="&owl;Thing"/>
  6.     </owl:Restriction> 
  7.   </rdfs:subClassOf>
  8. </owl:Class>

What this really states is that for all Authors, they have at least one is_author_of that is a Thing. The important thing is that they use the property at least once.

Designing An Ontology In OWL - Using A Domain Or Range