Class or individual that is the question

Immer wieder kommt es vor, dass man bei der Erstellung von Taxonomien bzw. Ontologien vor der Frage steht, ob man etwas als Klasse oder Individuum modellieren soll. Das mag auf ersten Blick sonderbar erscheinen, sind doch Klasse und Individuum so völlig verschieden.

Betrachten wir als Beispiel die Modellierung von Berufen. Der Einfachheit halber seien die Berufe in drei große Gruppen eingeteilt: Berufe in der Landwirtschaft, Berufe in der Industrie und Berufe im Dienstleistungssektor (im Folgenden ist aber nur kurz von Landwirtschaft, Industrie und Dienstleistung die Rede). Als ganz konkretes Beispiel für die Nutzung unserer Berufstaxonomie soll folgender Sachverhalt dienen: „Schweinebauer Knut entscheidet sich 2010, von der Schweinezucht auf Getreibeanabau zu wechseln und wird somit zum Getreidebauer“. Offensichtlich handelt es sich bei „Knut“ um ein Individuum. Wir wollen Knut als eine Instanz von Person definieren:

ClassAssertion( :Person :Knut )

Die Berufe „Schweinebauer“ und „Getreidebauer“ lassen sich wie folgt eingruppieren:

Nun stellt sich die Frage, macht man „Schweinebauer“ (und alle anderen Berufe) zu einer Klasse oder zu einem Individuum. Entscheiden wir uns zunächst dafür, die Berufe als Klassen zu modellieren:

Die Darstellung, dass Knut ein Schweinebauer ist bei der Modellierung der Berufe als Klassen einfach:

Wie würde es aussehen, wenn man aus „Schweinebauer“ ein Individuum macht? Da nun Knut keine Instanz dieser Klasse sein kann, muss man eine Verbindung über eine Object Property herstellen:

Problematisch wird es dadurch, dass Knut 2010 ein Getreidebauer, also eine Instanz der Klasse „Getreidebauer“ wird. Da OWL keine Zeit kennt und jede Aussage damit ewig gilt, ist er nun plötzlich „Getreidebauer“ und „Schweinebauer“. Dadurch wird sogar die Ontologie inkonsistent, da (in unserem einfachen Beispiel) die Klassen disjunkt sind. Ein ähnliches Problem hat man, bei der Verwendung von Individuen, da auch hier die beiden Object Properties, die Knut mit den beiden Berufs-Instanzen verbinden, nicht zu unterscheiden wären. Als Lösung verwendet man ein anonymes Individuum, dem man sogar noch Informationen über die Zeit mitgeben kann:

Diese Lösung funktioniert allerdings auch für Klassen:

Bisher haben wir also noch kein klares Argument für Individuum oder Klasse gefunden. Ein kleinen Vorteil bietet die Modellierung als Individuum, da beim Ignorieren von Zeitangaben zumindest keine inkonsistenten Ontologie entstehen.

Was ist also dann eine Entscheidungskriterium für Individuum oder Klasse? In der Regel begnügt man sich nicht damit, nur eine einfache Taxonomie von Berufen aufzustellen, sondern möchte die einzelnen Berufen mit weiteren Informationen versehen. Das können je nach Einsatzzweck ganz verschiedene Dinge sein, z.B.

  • Handelt es sich um einen Ausbildungsberuf?
  • Wie viel verdient ein Azubi im ersten Lehrjahr?
  • Ein Schweinebauer hat etwas mit Schweinen zu tun.
  • Ein Schweinebauer arbeitet auf einem Bauernhof.

Die erste Information ließe sich problemlos mit einer Unterklassenbeziehung realisieren. Bei der zweiten Information bietet sich eine Data Property an, die letzten beiden Informationen legen die Verwendung von Object Properties (oder unschön Data Properties und Literale) nahe. Ist damit die Entscheidung, Individuen zu verwenden, bereits gefallen, da Objekt Properties und Data Properties nur für Individuen angegeben werden können?

Mit einem Kniff kann man auch Klassen mit den entsprechenden Informationen versehen:

Declaration(Class(:Bauer))
Declaration(Class(:SchweineBauer))
SubClassOf(:Schweinebauer :Bauer)
Declaration(DataProperty(:arbeitetAuf))
EquivalentClasses(  :Schweinebauer
                    DataHasValue( : arbeitetAuf "Bauernhof" )
)

Es reicht, dass Knut eine Instanz der Klasse Schweinebauer ist, damit eine implizite Aussage

:Knut : arbeitetAuf "Bauernhof"

in der Ontologie enthalten ist. Auch mit einer Object Property funktioniert dies. Statt DataHasValue verwendet man ObjectHasValue. Dann ist Knut mit einem Individuum „Bauernhof“ verbunden. Eine Klasse „Bauernhof“ kann an dieser Stelle übrigens nicht verwendet werden, das Ziel einer Object Property ist stets ein Individuum. Diese Tatsache ist der nächste Hinweis, dass eine Modellierung als Klasse nicht günstig ist. Man denke daran, wie man aufschreiben würde, welchen Beruf Personen haben, die auf Arbeitsplatz der Klasse „Bauernhof“ arbeiten.

Deutlich zu Tage tritt das Problem, wenn man verschiedene Berufe miteinander in Beziehung setzen möchte. Das kann z.B.

  • eine Ähnlichkeitsbeziehung quer über Teilbäume der Taxonomie hinweg sein („Tischler ist ähnlich wie Zimmermann“),
  • verschiedene Qualifikationsstufen „Tischlermeister ist eine höhere Qualifikation als Tischlergeselle“ oder
  • ein Hinweis auf einen Nachfolgeberuf („Hausmeister ist heute Facility manager“).

Da man den oben genannten Kniff nur auf einer Seite einer Object Property anwenden kann, ist man bei einer Verbindung zweier Berufe mit Hilfe einer Object Property gezwungen, sie als Individuen zu modellieren.

Ein weiterer ganz praktischer Grund, einen Beruf als Individuum zu modellieren, liegt darin, dass auch die Deutsche Nationalbibliothek in der GND Berufe als Individuen modelliert, z.B. Tischler = http://d-nb.info/gnd/4125471-5

Allerdings ist es sinnvoll, einen Teil der Berufshierarchie trotzdem als Klassen zu modellieren, um eine automatische Klassifikation beim Reasoning zur Verfügung zu haben. Wo aber zieht man die Trennlinie zwischen Klassen und Individuen? Die Antwort ist relativ einfach: Alle abstrakten Berufe/Berufsgruppen werden als Klassen, alle konkreten Berufe als Individuen modelliert.

Dass es nicht richtig sein kann, nur Klassen zu verwenden, ergibt sich auch ganz intuitiv, wenn man sich folgende Aussagen durchliest, die sich durch eine Klassenhierarchie der Berufe und die Klassenzugehörigkeiten einer Person ergeben würden:

  • Beruf in der Landwirtschaft ist ein Beruf. – ok
  • Bauer ist ein Beruf in der Landwirtschaft. – ok
  • Bauer ist ein Beruf. – ok
  • Knut ist eine Person. – ok
  • Knut ist ein Schweinebauer. – ok
  • Knut ist ein Bauer. – ok
  • Knut ist ein Beruf in der Landwirtschaft. – Hier stimmt etwas nicht!

Und genau an dieser Stelle („Bauer“ isA „Beruf in der Landwirtschaft“) sollte man den Wechsel von Klasse zu Individuum durchführen, also „Bauer“ instanceOf „Beruf in der Landwirtschaft“.