This example is based on a simple model of a University department.
The department consists of Staff who can be Academic staff or Non-Academic Staff, Professors and Students. Professors are Academic Staff, Students can be Graduate Students or Undergraduate Students. The situation is summarised in the diagram below.
The department offers a number of Modules in Mathematics, Computer Science or Economics (no module can be in two areas). Each module is taught by a single academic. We have chosen to model this as subclasses ComputerScienceModule, EconomicsModule and MathematicsModule.
Each Undergraduate Student takes a number of modules (for the purposes of this model, we assume that Graduate Students are involved purely in research projects, thus the only students that take course are UndergraduateStudents).
The tables below show some known facts that populate the model.
Module | Area | Teacher |
---|---|---|
CS101 | Computer Science | Prof1 |
CS102 | Computer Science | Prof2 |
CS103 | Computer Science | Prof3 |
CS104 | Computer Science | Prof1 |
CS105 | Computer Science | Prof3 |
MT101 | Maths | Prof4 |
MT102 | Maths | Prof5 |
MT103 | Maths | Prof6 |
EC101 | Economics | Prof4 |
EC102 | Economics | Prof7 |
EC103 | Economics | Prof1 |
Student | Modules | |||
---|---|---|---|---|
Student1 | CS101 | CS102 | ||
Student2 | CS101 | MT101 | ||
Student3 | MT101 | EC103 | ||
Student4 | CS101 | MT101 | ||
Student5 | MT102 | MT103 |
The example ontology university1 defines the classes above.
A Joint Honors Maths & Computer Science Student is one who takes both Computer Science and Mathematics modules. A Single Honours Maths [Computer Science, Economics] Student is one who takes only Maths [Computer Science, Economics] modules.
One way of trying to define a Joint Honours Maths/CS Student would as below:
Class(JointHonoursMathsCSStudent complete intersectionOf(student restriction(takes someValuesFrom ( intersectionOf( MathsModule ComputerScienceModule ) ) ) ) )
This is "wrong", however, as it's saying that a Joint Honours Student is one who takes something that is both a MathsModule and a ComputerScienceModule. This is impossible as the two classes are disjoint. This definition is thus inconsistent — it is impossible for there ever to be any instances of this class.
Rather, we should define it as:
Class(JointHonoursMathsCSStudent complete intersectionOf(student restriction(takes someValuesFrom ( MathsModule ) ) restriction(takes someValuesFrom ( ComputerScienceModule ) ) ) )
This then states that a Joint Honours Maths & Computer Science Student is one who takes a MathsModule and takes a ComputerScienceModule.
For the Single Honours Maths Student, we could define
Class(SingleHonoursMathsStudent complete intersectionOf(student restriction(takes allValuesFrom ( MathsModule ) ) ) )
This captures the fact that all modules taken must be MathsModules. However, you will see that those students that only take MathsModules don't appear under this definition. The issue here is again the Open World Assumption -- we don't know that these students don't take any other modules.
Note also that this definition will subsume GraduateStudent. The domain of takes is UndergraduateStudent and this is disjoint from GraduateStudent. Thus we know that no GraduateStudent can take any Modules, so all Modules they take are MathsModules. Again an example of universal quantification over an empty set.
In this particular case, we cannot effectively capture the notion of a generic Single Honours student. One solution would be to define a Single Honours Maths Student as above and a Single Honours Computer Science Student similarly, then define the generic Single Honours as the union of the two. The problem then is that if we introduce a new subject area, we need to then rework this definition. This is an example of a situation where OWL's expressivity is not enough to capture what we want to say. The situation is the same with Joint Honours. OWL does not give us sufficient expressivity to capture the class of individuals that take modules that are from different classes (without explicitly stating what those classes are).
The table below shows some additional information about more students. Where the module code contains question marks, we have some partial information. So we know that Student 6 takes two modules, but we don't know the second one. Student 7 takes some unknown CS module.
Student | Modules | |||
---|---|---|---|---|
Student6 | MT101 | ????? | ||
Student7 | CS101 | MT??? | ||
Student8 | CS102 | EC??? |
Example ontology university2 encodes the information about the students listed above.
The university has a regulation that each undergraduate student must take exactly 2 modules.
We can use a cardinality restriction as follows:
Class( Student partial ( takes maxCardinality( 2 ) ) )
This states that a student can take at most 2 classes. Note that in this case, the original definition of a Single Honours Maths Student will then include those students that only take MathsModules. The cardinality constraint allows us to infer that the two modules named must be the only modules that the student takes.
Student | Modules | |||
---|---|---|---|---|
Student9 | MT101 | CS101 | CS102 |
Example university3 includes the restriction identified above and a definition of Student9.
Student | Modules | |||
---|---|---|---|---|
Student10 | MT101 | CS101 | EC101 |
Example university4 includes a definition of Student10.
For student10, however, the disjointness of the various modules means that the three course named must be different, thus we have an inconsistency. Note also that the way that the reasoner reports the inconsistency may not talk about student10.
Again, here we must be explicit about the things that are different. OWL does not make the Unique Name Assumption, so we must say which individuals we expect to be distinct. Adding an axiom asserting that all the courses are different objects would then cause the reasoner to spot the "error" in the information about student9.
If you have time remaining at the end of the session, consider extending the model to cover Teaching Assistants. Teaching Assistants are Graduate Students that are also Non-Academic staff who assist with teaching on particular modules. Each module may have at most one TA associated with it. Alternatively, use the information about members of staff in order to define classes such as Professors who only teach on, say, Mathematics courses.