Description Logic representation that requires the modelling of sameness or distiction of two individuals

Yes, you are quite correct that your representation will not have the desired effect.

There are possibly 2 ways that I can think of that will achieve more-or-less what you want:

(1) Introduce a coTeachesWith role which is irreflexive and define teaches as teaches \sqsubseteq coTeachesWith o teaches. In this way you can state that a lecturer co-teaches with another lecturer and from that you can infer that teach the same courses. The downside is that it will infer that all classes taught by this lecturer are also taught by the co-teaching lecturer – which is likely not what you want.

(2) Another way is to use SWRL rules. With that you can provide a rule as follows:

teaches(?x, ?c) ^ teaches(?y, ?c) ^ differentFrom(?x, ?y) ->

CoTeachingFaculty(?x) ^ CoTeachingFaculty(?y)

Below I provide the OWL Manchester syntax for the ontology applying these 2 options:

Prefix: : http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual# Prefix: owl: http://www.w3.org/2002/07/owl# Prefix: rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# Prefix: rdfs: http://www.w3.org/2000/01/rdf-schema# Prefix: xml: http://www.w3.org/XML/1998/namespace Prefix: xsd: http://www.w3.org/2001/XMLSchema#

Ontology: <http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual>
<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual/0.0.1>

AnnotationProperty: <http://swrl.stanford.edu/ontologies/3.3/swrla.owl#isRuleEnabled>   
AnnotationProperty: rdfs:comment
AnnotationProperty: rdfs:label
Datatype: xsd:boolean
Datatype: xsd:string

ObjectProperty: coTeachesWith
    Characteristics: Irreflexive
    Domain: CoTeachingFaculty
    Range: CoTeachingFaculty

ObjectProperty: isTaughtBy
    Domain: Course
    Range: AcademicStaff
    
ObjectProperty: teaches
    SubPropertyChain: coTeachesWith o teaches
    Domain: AcademicStaff
    Range: Course
    
Class: AcademicStaff
    SubClassOf: Person,
        teaches some Course
    
Class: CoTaughtCourse
    EquivalentTo: isTaughtBy min 2 owl:Thing
    SubClassOf: Course
    
Class: CoTeachingFaculty
    SubClassOf: AcademicStaff
    
Class: Course
    DisjointWith: Person
    
Class: Person
    DisjointWith: Course
    
Class: owl:Thing    

Individual: course1
    Types: Course
    Facts:  
     isTaughtBy  lecturer1,
     isTaughtBy  lecturer2
    DifferentFrom: course2
    
Individual: course2
    Types: Course
    DifferentFrom: course1
    
Individual: course3

Individual: lecturer1
    Facts:  coTeachesWith  lecturer2
    DifferentFrom: lecturer2
    
Individual: lecturer2
    Facts:  
     teaches  course1,
     teaches  course2
    DifferentFrom: lecturer1
    
Individual: lecturer3
    Facts:  teaches  course2
    DifferentFrom: lecturer4
    
Individual: lecturer4
    Facts:  teaches  course2
    DifferentFrom: lecturer3
    
DifferentIndividuals: 
    course1,course2,course3

Rule: 
    teaches(?<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#x>, ?<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#c>), teaches(?<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#y>, ?<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#c>),  DifferentFrom (?<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#x>, ?<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#y>) -> CoTeachingFaculty(?<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#x>), CoTeachingFaculty(?<http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual#y>)

PS. I did not set teaches to be the inverse of taughtBy because then teaches is no longer a simple role and then cannot be used in a role chain. For details see paper on SROIQ.

CLICK HERE to find out more related problems solutions.

Leave a Comment

Your email address will not be published.

Scroll to Top