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(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.
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.
(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.
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.
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.
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.
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
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.
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.
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).
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.