OWL punning to represent a placeholder or abstract class

I’m trying to develop an ontology to represent a curricula, and in this curricula a student must take 6 elective courses (and has a long list of courses from which to choose).

Right now I have this classes:

- Course
--- Elective (defined class by isElective = true && type = Course)

And all my possible elective courses are instances of the type Course with the data property isElective set to true.

But I want to represent that this 6 elective courses must be taken in a certain way, for instance, a student needs to take 4 of this courses on the last year (Year is a class) of the curricula.

I have been thinking of how to define this placeholder/abstract class, which as I have read isn’t possible and doesn’t make sense, and came across punning but I don’t know if it is what I’m looking for.

Let’s say I define a subclass of Course called ElectivePlaceholder, and then then 4 instances of this class where:

ElectiveX instanceOf ElectivePlaceholder
Year5 instanceOf Year
ElectiveX isPartOf Year5

Then I want to have a way to represent that a student choose to take AdvancedMaths (instance of Elective, aka instance of Course with isElective set to true) as it’s ElectiveX.

How would I do that? Would punning be useful? Since it allows an object to treated as both a class and an individual.


What I’m trying to model is not what a student chooses but the curricula itself.

Each curricula individual has different requirements as to how many elective courses the students must undertake and in which years. I need to represent this in a way either on the Curricula individual or the Year individual (so it can be inferred for the Curricula).

Right now:

YearX partOf CurriculaX

OWL punning to represent a placeholder or abstract class