People Ontology

An ontology about people is available in RDF/XML. It is also shown below in abstract syntax format.

Namespace(a	= <http://owl.man.ac.uk/2005/sssw/people#>)

Ontology(

 ObjectProperty(a:drives)
 ObjectProperty(a:eaten_by)
 ObjectProperty(a:eats
  inverseOf(a:eaten_by)
  domain(a:animal))
 ObjectProperty(a:has_child)
 ObjectProperty(a:has_father
  range(a:man))
 ObjectProperty(a:has_mother
  range(a:woman))
 ObjectProperty(a:has_parent)
 ObjectProperty(a:has_part
  inverseOf(a:part_of))
 ObjectProperty(a:has_pet
  domain(a:person)
  range(a:animal))
 ObjectProperty(a:is_pet_of
  inverseOf(a:has_pet))
 ObjectProperty(a:likes)
 ObjectProperty(a:part_of)
 ObjectProperty(a:reads
  range(a:publication))
 ObjectProperty(a:works_for)

 Class(a:adult partial 
  annotation(rdfs:comment "Things that are adult.")  
 Class(a:animal partial     
  restriction(a:eats someValuesFrom (owl:Thing)))
 Class(a:animal_lover complete 
  intersectionOf(restriction(a:has_pet minCardinality(3)) a:person))
 Class(a:animal_lover partial 
  annotation(rdfs:comment "Someone who really likes animals"))
 Class(a:bicycle partial 
  a:vehicle)
 Class(a:bicycle partial 
  annotation(rdfs:comment "A human propelled vehicle, with two
  wheels"))  
 Class(a:bone partial)
 Class(a:brain partial)
 Class(a:broadsheet partial 
  annotation(rdfs:comment "A newspaper. Broadsheets are usually 
  considered to be more \"high-brow\" than tabloids."))  
  a:newspaper)
 Class(a:bus partial 
  a:vehicle)
 Class(a:bus_company partial 
  a:company)
 Class(a:bus_driver complete 
  annotation(rdfs:comment "Someone who drives a bus.")
  intersectionOf(restriction(a:drives someValuesFrom (a:bus))
  a:person))
 Class(a:car partial 
  a:vehicle)
 Class(a:cat partial 
  a:animal)
 Class(a:cat_liker complete 
  intersectionOf(a:person restriction(a:likes someValuesFrom (a:cat))))
 Class(a:cat_owner complete 
  intersectionOf(a:person restriction(a:has_pet someValuesFrom (a:cat))))
 Class(a:company partial)
 Class(a:cow partial 
  annotation(rdfs:comment "Cows are naturally vegetarians.")
  a:vegetarian)
 Class(a:dog partial 
  restriction(a:eats someValuesFrom (a:bone)))
 Class(a:dog_liker complete 
  intersectionOf(restriction(a:likes someValuesFrom (a:dog)) a:person))
 Class(a:dog_owner complete 
  intersectionOf(a:person restriction(a:has_pet someValuesFrom (a:dog))))
 Class(a:driver complete 
  intersectionOf(restriction(a:drives someValuesFrom (a:vehicle)) a:person))
 Class(a:driver partial 
  a:adult)
 Class(a:duck partial a:animal)
 Class(a:elderly partial a:adult)
 Class(a:female partial)
 Class(a:giraffe partial 
  a:animal
  restriction(a:eats allValuesFrom (a:leaf)))
 Class(a:grass partial 
  a:plant)
 Class(a:grownup complete 
  intersectionOf(a:person a:adult))
 Class(a:haulage_company partial 
  a:company)
 Class(a:haulage_truck_driver complete 
  intersectionOf(restriction(a:drives someValuesFrom (a:truck)) a:person 
    restriction(a:works_for someValuesFrom 
      (restriction(a:part_of someValuesFrom (a:haulage_company))))))
 Class(a:haulage_worker complete 
  restriction(a:works_for someValuesFrom 
   (unionOf(restriction(a:part_of someValuesFrom (a:haulage_company)) 
            a:haulage_company))))
 Class(a:kid complete 
  intersectionOf(a:person a:young))
 Class(a:leaf partial 
  restriction(a:part_of someValuesFrom (a:tree)))
 Class(a:lorry partial 
  a:vehicle)
 Class(a:lorry_driver complete 
  intersectionOf(restriction(a:drives someValuesFrom (a:lorry)) a:person))
 Class(a:mad_cow complete 
  annotation(rdfs:comment "A mad cow is a cow that has been eating the
  brains of sheep.") 
  intersectionOf(restriction(a:eats someValuesFrom 
    (intersectionOf(restriction(a:part_of someValuesFrom (a:sheep)) a:brain))) a:cow))
 Class(a:magazine partial 
  a:publication)
 Class(a:male partial 
   annotation(rdfs:comment "The class of all male things."))
 Class(a:man complete 
  intersectionOf(a:male a:person a:adult))
 Class(a:newspaper partial 
  annotation(rdfs:comment "All newspapers are either broadsheets or tabloids.")
  a:publication
  unionOf(a:tabloid a:broadsheet))
 Class(a:old_lady complete 
  intersectionOf(a:female a:person a:elderly))
 Class(a:old_lady partial 
  intersectionOf(restriction(a:has_pet allValuesFrom (a:cat)) 
                 restriction(a:has_pet someValuesFrom (a:animal))))
 Class(a:person partial 
  a:animal)
 Class(a:pet complete 
  restriction(a:is_pet_of someValuesFrom (owl:Thing)))
 Class(a:pet_owner complete 
  intersectionOf(restriction(a:has_pet someValuesFrom (a:animal)) a:person))
 Class(a:plant partial)
 Class(a:publication partial)
 Class(a:quality_broadsheet partial a:broadsheet)
 Class(a:red_top partial a:tabloid)
 Class(a:sheep partial 
  a:animal
  restriction(a:eats allValuesFrom (a:grass)))
 Class(a:tabloid partial 
  annotation(rdfs:comment "A newspaper. Tabloids are usually thought of
as more "down-market" than broadsheets.")
  a:newspaper)
 Class(a:tiger partial 
  a:animal)
 Class(a:tree partial 
  a:plant)
 Class(a:truck partial 
  a:vehicle)
 Class(a:van partial 
  a:vehicle)
 Class(a:van_driver complete 
  intersectionOf(restriction(a:drives someValuesFrom (a:van)) a:person))
 Class(a:vegetarian complete 
  annotation(rdfs:comment "A vegetarian is defined as an animal that
  eats no other animals, or parts of animals.")
  intersectionOf(a:animal 
    restriction(a:eats allValuesFrom (complementOf(restriction(a:part_of someValuesFrom (a:animal))))) 
    restriction(a:eats allValuesFrom (complementOf(a:animal)))))
 Class(a:vehicle partial)
 Class(a:white_thing partial)
 Class(a:white_van_man complete 
  annotation(rdfs:comment "A white van man is a man who drives a white van.")
  intersectionOf(restriction(a:drives someValuesFrom (intersectionOf(a:van a:white_thing))) a:man))
 Class(a:white_van_man partial 
  restriction(a:reads allValuesFrom (a:tabloid)))
 Class(a:woman complete 
  intersectionOf(a:female a:person a:adult))
 Class(a:young partial)
 Class(owl:Thing partial)

 AnnotationProperty(rdfs:comment)
 AnnotationProperty(rdfs:label)

 Individual(a:Daily_Mirror annotation(rdfs:comment "The paper read by Mick (a white van man).")
  type(owl:Thing))
 Individual(a:Dewey type(a:duck))
 Individual(a:Fido type(a:dog))
 Individual(a:Flossie type(a:cow))
 Individual(a:Fluffy type(a:tiger))
 Individual(a:Fred type(a:person)
  value(a:has_pet a:Tibbs))
 Individual(a:Huey type(a:duck))
 Individual(a:Joe type(a:person)
  type(restriction(a:has_pet maxCardinality(1)))
  value(a:has_pet a:Fido))
 Individual(a:Kevin type(a:person)
  value(a:has_pet a:Fluffy)
  value(a:has_pet a:Flossie))
 Individual(a:Louie type(a:duck))
 Individual(a:Mick
  annotation(rdfs:comment "Mick is male and drives a white van. Due to
  the axiom concerning drivers, we know that Mick must be a man, and
  is therefore a white van man. The axiom about the reading material
  of a white van man then allows us to infer things about the Daily
  Mirror.")
  type(a:male)
  value(a:reads a:Daily_Mirror)
  value(a:drives a:Q123_ABC))
 Individual(a:Minnie type(a:female) type(a:elderly)
  value(a:has_pet a:Tom))
 Individual(a:Pete type(owl:Thing))
 Individual(a:Q123_ABC
  annotation(rdfs:comment "A white van")
  type(a:van)
  type(a:white_thing))
 Individual(a:Rex type(a:dog)
  value(a:is_pet_of a:Mick))
 Individual(a:Spike type(owl:Thing)
  value(a:is_pet_of a:Pete))
 Individual(a:The_Guardian type(a:broadsheet))
 Individual(a:The_Sun type(a:tabloid))
 Individual(a:The_Times type(a:broadsheet))
 Individual(a:Tibbs type(a:cat))
 Individual(a:Tom type(owl:Thing))
 Individual(a:Walt type(a:person)
  value(a:has_pet a:Huey)
  value(a:has_pet a:Louie)
  value(a:has_pet a:Dewey))

 AllDifferent(a:Daily_Mirror a:Dewey a:Fido a:Flossie a:Fluffy a:Fred
  a:Huey a:Joe a:Kevin a:Louie a:Mick a:Minnie a:Pete a:Q123_ABC 
  a:Rex a:Spike a:The_Guardian a:The_Sun a:The_Times a:Tibbs
  a:Tom a:Walt)

 DisjointClasses(unionOf(a:animal restriction(a:part_of someValuesFrom (a:animal))) 
  unionOf(a:plant restriction(a:part_of someValuesFrom (a:plant))))
 DisjointClasses(a:tabloid a:broadsheet)
 DisjointClasses(a:adult a:young)
 DisjointClasses(a:cat a:dog)

 SubPropertyOf(a:has_mother a:has_parent)
 SubPropertyOf(a:has_father a:has_parent)
 SubPropertyOf(a:has_pet a:likes)
)

Class Inferences

Bus Drivers are Drivers.
Class(a:bus_driver complete intersectionOf(a:person
  restriction(a:drives someValuesFrom (a:bus))))

Class(a:driver complete intersectionOf(a:person
  restriction(a:drives someValuesFrom (a:vehicle))))

Class(a:bus partial a:vehicle)

The subclass is inferred due to subclasses being used in existential quantification.

Cat Owners like Cats
Class(a:cat_owner complete intersectionOf(a:person
  restriction(a:has_pet someValuesFrom (a:cat))))

SubPropertyOf(a:has_pet a:likes)

Class(a:cat_liker complete intersectionOf(a:person
  restriction(a:likes someValuesFrom (a:cat))))

The subclass is inferred due to a subproperty assertion.

Drivers are Grown Ups

(Note: A grown up is an adult person)

Class(a:driver complete intersectionOf(a:person
  restriction(a:drives someValuesFrom (a:vehicle))))

Class(a:driver partial a:adult)

Class(a:grownup complete intersectionOf(a:adult a:person))

An example of axioms being used to assert additional necessary information about a class. We do not need to know that a driver is an adult in order to recognize one, but once we have recognized a driver, we know that they must be adult.

Sheep are Vegetarians
Class(a:sheep partial 
  restriction(a:eats allValuesFrom (a:grass))
  a:animal)

Class(a:grass partial a:plant)

DisjointClasses(unionOf(restriction(a:part_of someValuesFrom (a:animal)) a:animal) 
                          unionOf(a:plant restriction(a:part_of someValuesFrom (a:plant))))

Class(a:vegetarian complete intersectionOf(
    restriction(a:eats allValuesFrom (complementOf(restriction(a:part_of someValuesFrom (a:animal))))) 
    restriction(a:eats allValuesFrom (complementOf(a:animal))) a:animal))

Note the complete definition, which means that we can recognise when things are vegetarians.

Giraffes are Vegetarians
 Class(a:giraffe partial a:animal
  restriction(a:eats allValuesFrom (a:leaf)))

 Class(a:leaf partial restriction(a:part_of someValuesFrom (a:tree)))
 Class(a:tree partial a:plant)

DisjointClasses(unionOf(restriction(a:part_of someValuesFrom (a:animal)) a:animal) 
                          unionOf(a:plant restriction(a:part_of someValuesFrom (a:plant))))

Class(a:vegetarian complete intersectionOf(
    restriction(a:eats allValuesFrom (complementOf(restriction(a:part_of someValuesFrom (a:animal))))) 
    restriction(a:eats allValuesFrom (complementOf(a:animal))) a:animal))

Similar to the previous example with the additional inference provided by the existential restriction in the definition of leaf.

Old Ladies own Cats
Class(a:old_lady complete 
  intersectionOf(a:person a:female a:elderly))

Class(a:old_lady partial intersectionOf(
  restriction(a:has_pet allValuesFrom (a:cat)) 
  restriction(a:has_pet someValuesFrom (a:animal))))

Class(a:cat_owner complete intersectionOf(a:person
  restriction(a:has_pet someValuesFrom (a:cat))))

An example of the interaction between an existential quantification (asserting the existence of a pet) and a universal quantification (constraining the types of pet allowed).

This also illustrates that an ontology is one view on the world — you may disagree with my modelling but I am being explicit about it.

Mad Cows are inconsistent
Class(a:cow partial a:vegetarian)

DisjointClasses(unionOf(restriction(a:part_of someValuesFrom (a:animal)) a:animal) 
                          unionOf(a:plant restriction(a:part_of someValuesFrom (a:plant))))

Class(a:vegetarian complete intersectionOf(
    restriction(a:eats allValuesFrom (complementOf(restriction(a:part_of someValuesFrom (a:animal))))) 
    restriction(a:eats allValuesFrom (complementOf(a:animal))) a:animal))

Class(a:mad_cow complete intersectionOf(a:cow 
  restriction(a:eats someValuesFrom (intersectionOf(restriction(a:part_of someValuesFrom (a:sheep)) 
                                                                                   a:brain)))))

Class(a:sheep partial a:animal
  restriction(a:eats allValuesFrom (a:grass)))

Thus a mad cow has been eating part of an animal, which is inconsistent with the definition of a vegetarian

Instance Inferences

The Daily Mirror is a Tabloid
 Individual(a:Daily_Mirror type(owl:Thing))

 Individual(a:Mick type(a:male)
  value(a:drives a:Q123_ABC)
  value(a:reads a:Daily_Mirror))

 Individual(a:Q123_ABC type(a:van) type(a:white_thing))

 Class(a:white_van_man complete 
  intersectionOf(a:man restriction(a:drives someValuesFrom (intersectionOf(a:van a:white_thing)))))
 Class(a:white_van_man partial restriction(a:reads allValuesFrom (a:tabloid)))

Here we see interaction between complete and partial definitions plus a universal quantification allowing an inference about a role filler.

Pete is a Person, Spike is an Animal
Individual(a:Spike type(owl:Thing)
  value(a:is_pet_of a:Pete))

Individual(a:Pete
  type(owl:Thing))

ObjectProperty(a:has_pet domain(a:person) range(a:animal))

ObjectProperty(a:is_pet_of inverseOf(a:has_pet))

Here we see an interaction between an inverse relationship and domain and range constraints on a property. The domain of a property is the range of its inverse and the range of a property is the domain of its inverse.

Walt loves animals
Individual(a:Walt type(a:person)
  value(a:has_pet a:Huey)
  value(a:has_pet a:Louie)
  value(a:has_pet a:Dewey))

Individual(a:Huey type(a:duck))
Individual(a:Dewey type(a:duck))
Individual(a:Louie type(a:duck))

DifferentIndividuals(a:Huey a:Dewey a:Louie)

Class(a:animal_lover complete intersectionOf(a:person restriction(a:has_pet minCardinality(3))))

Note that in this case, we don't actually need to include person in the definition of animal lover (as the domain restriction will allow us to draw this inference).

Tom is a Cat
Individual(a:Minnie type(a:female) type(a:elderly) value(a:has_pet a:Tom))

Individual(a:Tom type(owl:Thing))

ObjectProperty(a:has_pet domain(a:person) range(a:animal))

Class(a:old_lady complete 
  intersectionOf(a:person a:female a:elderly))

Class(a:old_lady partial intersectionOf(
  restriction(a:has_pet allValuesFrom (a:cat)) 
  restriction(a:has_pet someValuesFrom (a:animal))))

Here the domain restriction gives us additional information which then allows us to infer a more specific type. The universal quantification then allows us to infer information about the role filler.