Да, вы совершенно правы, что ваше представление не будет иметь должного эффекта.
Есть, возможно, 2 способа, которые я могу придумать, чтобы достичь более или менее того, что вы хотите:
(1) Ввести иррефлексивную роль coTeachesWith
и определить teaches
как teaches \sqsubseteq coTeachesWith o teaches
. Таким образом, вы можете заявить, что лектор преподает совместно с другим лектором, и из этого вы можете сделать вывод, что он ведет одни и те же курсы. Недостатком является то, что будет сделан вывод, что все занятия, которые преподает этот лектор, также преподаются совместно лектором, что, вероятно, не то, что вам нужно.
(2) Другой способ — использовать правила SWRL. При этом вы можете указать правило следующим образом:
teaches(?x, ?c) ^ teaches(?y, ?c) ^ differentFrom(?x, ?y) ->
CoTeachingFaculty(?x) ^ CoTeachingFaculty(?y)
Ниже я привожу синтаксис OWL Manchester для онтологии, применяющей эти 2 варианта:
Префикс: : http://www.henrietteharmse.com/turtorial/ontologies/DistinctIndividual# Префикс: owl: http://www.w3.org/2002/07/owl# Префикс: rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# Префикс: rdfs: http://www.w3.org/2000/01/rdf-schema# Префикс: xml: http://www.w3.org/XML/1998/namespace Префикс: 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. Я не устанавливал teaches
в качестве инверсии taughtBy
, потому что тогда teaches
больше не является простой ролью и не может использоваться в цепочке ролей. Подробнее см. документ на SROIQ.
person
Henriette Harmse
schedule
31.10.2020