Skip to content

Glossarium-System: Gesamtübersicht

Inhaltsverzeichnis

  1. Einführung
  2. Systemarchitektur
  3. Wortarten im Glossarium
  4. Datenmodell und Tabellenstruktur
  5. Morphologiesystem
  6. Verweissystem
  7. Gemeinsame Datenbankfelder
  8. Verwendung und Workflows

Einführung

Das Glossarium ist das zentrale Wörterbuch-System von Hermeneus für lateinische Lemmata. Es bildet die Grundlage für alle Vokabeloperationen, Übungen und Textanalysen in der Applikation.

Zweck des Glossariums

  • Zentrale Verwaltung aller lateinischen Vokabeln nach Wortarten
  • Automatische Generierung aller flektierten Formen (Morphologie)
  • Bereitstellung morphologischer Daten für Textanalyse und Übungen
  • Unterstützung von Alternativformen und Formverweisen
  • Grundlage für das Vokabellernsystem

Kernprinzipien

  1. Wortartspezifische Tabellen: Jede Wortart hat ihre eigene Tabelle mit spezifischen linguistischen Feldern
  2. Automatische Morphologie: Aus linguistischen Angaben werden alle Formen generiert
  3. Hierarchische JSON-Speicherung: Morphologische Daten werden strukturiert in der morph-Spalte gespeichert
  4. Vererbungshierarchie: Alle Wortart-Models erben von der abstrakten Klasse Vocab

Systemarchitektur

Klassenstruktur

Vocab (abstrakte Basisklasse)
├── Adjektiv
├── Eigenname (extends Nomen)
├── Nomen
├── Numerale
├── Partikel
├── Pronomen
├── Verb
└── Wendung

Verzeichnisstruktur

app/
├── Models/
│   ├── Vocab.php                 # Abstrakte Basisklasse
│   ├── Adjektiv.php
│   ├── Nomen.php
│   ├── Verb.php
│   └── ...                        # Weitere Wortarten
├── Morpher/
│   ├── AdjektivMorpher.php        # Morphologie-Logik für Adjektive
│   ├── NomenMorpher.php
│   ├── VerbMorpher.php
│   ├── AdjektivMorphInfoHandler.php
│   └── ...                        # Weitere Morpher
└── Traits/
    └── Glossarium/
        ├── Morphable.php          # Morphologie-Funktionalität
        ├── Verifiable.php         # Validierung
        ├── hasStatus.php          # Status-Management
        ├── hasVerweise.php        # Verweis-Funktionalität
        └── ...                    # Weitere Traits

Lookup-Tabellen in Vocab.php

Die Basisklasse Vocab definiert mehrere Lookup-Tabellen für die Zuordnung zwischen verschiedenen Bezeichnungen:

php
// Route-Name → Model-Klasse
$RouteModelLookUpTable = [
    'adjektive' => Adjektiv::class,
    'nomina' => Nomen::class,
    'verben' => Verb::class,
    ...
];

// String → Model-Klasse
$StringModelLookUpTable = [
    'adjektiv' => Adjektiv::class,
    'nomen' => Nomen::class,
    ...
];

// Class → Wortart-String
$ClassWortartLookUpTable = [
    'App\Models\Adjektiv' => 'adjektiv',
    'App\Models\Nomen' => 'nomen',
    ...
];

Wortarten im Glossarium

Das Glossarium umfasst acht Wortarten, die in separaten Datenbanktabellen verwaltet werden:

WortartTabelleMorphologisierbarManuelle Morphologie
Adjektiveglossarium_adjektiveJaJa
Eigennamenglossarium_eigennamenJaJa
Nominaglossarium_nominaJaJa
Numeraliaglossarium_numeraliaJaNein
Partikelglossarium_partikelNeinNein
Pronominaglossarium_pronominaJaNein
Verbenglossarium_verbenJaJa
Wendungenglossarium_wendungenNeinNein

Detaillierte Dokumentationen

Für jede Wortart existiert eine separate, detaillierte Dokumentation:


Datenmodell und Tabellenstruktur

Gemeinsame Basisfelder (alle Wortarten)

Alle Glossarium-Tabellen enthalten folgende Basisfelder:

FeldTypZweck
idINTPrimärschlüssel
lemmaVARCHARGrundform des Wortes (Lemma)
infoTEXTZusätzliche Informationen/Anmerkungen
bedeutungTEXTDeutsche Bedeutung (Hauptbedeutung)
bedeutungen_alleTEXTWeitere/alle Bedeutungen
statusINTMorphologisierungsstatus (0=unmorphologisiert, 1=in Bearbeitung, 2=fertig)
morphJSONMorphologische Daten als hierarchischer JSON
morph_modeINTMorphologisierungsmodus (0=automatisch, 1=manuell)
created_atTIMESTAMPErstellungszeitpunkt
updated_atTIMESTAMPLetzte Aktualisierung
deleted_atTIMESTAMPSoft-Delete-Zeitpunkt
created_by_idINTBenutzer-ID des Erstellers
updated_by_idINTBenutzer-ID des letzten Bearbeiters

Wortartspezifische Felder

Jede Wortart hat zusätzliche spezifische Felder (Präfix fb_ = Formenbildung):

Beispiel: Verben

  • fb_stamm - Stamm des Verbs
  • fb_kklasse - Konjugationsklasse
  • fb_1pssgpr - 1. Person Singular Präsens
  • fb_1pssgpf - 1. Person Singular Perfekt
  • fb_hat_ppp - Bildet PPP (boolean)
  • fb_ppp - Partizip Perfekt Passiv
  • usw.

Beispiel: Adjektive

  • fb_stamm - Stamm des Adjektivs
  • fb_dklasse - Deklinationsklasse
  • fb_genera - Anzahl der Genera (1endig, 2endig, 3endig)
  • fb_hat_komparativ_superlativ - Bildet Steigerungsformen
  • fb_komparativ - Komparativform
  • fb_superlativ - Superlativform

Morphologiesystem

Funktionsprinzip

Das Morphologiesystem generiert aus den linguistischen Angaben in den fb_*-Feldern automatisch alle flektierten Formen eines Lemmas.

Linguistische Angaben → Morpher-Klasse → JSON-Morphologie → Datenbank

Morphologie-Pipeline

  1. Eingabe: Benutzer gibt linguistische Daten ein (z.B. Stamm, Deklinationsklasse, Genus)
  2. Validierung: System prüft, ob alle erforderlichen Felder ausgefüllt sind
  3. Morphologie-Generierung: Passender Morpher wird instantiiert
  4. Regelanwendung: Morpher wendet grammatische Regeln an
  5. JSON-Erstellung: Hierarchisches Array mit allen Formen wird erstellt
  6. Speicherung: JSON wird in der morph-Spalte gespeichert
  7. Status-Update: status wird auf 2 (morphologisiert) gesetzt

Morpher-Klassen

Jede morphologisierbare Wortart hat eine zugehörige Morpher-Klasse:

WortartMorpher-KlasseDatei
AdjektivAdjektivMorpherapp/Morpher/AdjektivMorpher.php
NomenNomenMorpherapp/Morpher/NomenMorpher.php
VerbVerbMorpherapp/Morpher/VerbMorpher.php
PronomenPronomenMorpherapp/Morpher/PronomenMorpher.php
NumeraleNumeraleMorpherapp/Morpher/NumeraleMorpher.php

Verwendung des Morphable-Traits

Alle morphologisierbaren Wortarten nutzen das Morphable-Trait:

php
use Morphable;

// Morphologisierung durchführen
$verb->morph();  // Startet automatische Morphologie

// Morphologisierungs-Informationen abrufen
$morphInfo = $verb->morphInfo();

JSON-Struktur der Morphologie

Die morph-Spalte enthält ein hierarchisches JSON mit allen Formen. Die Struktur ist wortartspezifisch:

Beispiel: Nomen (amica, ae f. - die Freundin)

json
{
  "1_sg": {
    "1_nom": "amica",
    "2_gen": "amicae",
    "3_dat": "amicae",
    "4_akk": "amicam",
    "5_vok": "amica",
    "6_abl": "amica"
  },
  "2_pl": {
    "1_nom": "amicae",
    "2_gen": "amicarum",
    "3_dat": "amicis",
    "4_akk": "amicas",
    "5_vok": "amicae",
    "6_abl": "amicis"
  }
}

Beispiel: Adjektiv (acer, acris, acre - scharf)

json
{
  "1_pos": {
    "1_sg": {
      "1_mask": { "1_nom": "acer", "2_gen": "acris", ... },
      "2_fem": { "1_nom": "acris", "2_gen": "acris", ... },
      "3_neutr": { "1_nom": "acre", "2_gen": "acris", ... }
    },
    "2_pl": { ... }
  },
  "2_komp": { ... },
  "3_superl": { ... },
  "4_adv": {
    "1_pos": "acriter",
    "2_komp": "acrius",
    "3_superl": "acerrime"
  }
}

Hierarchie-Schlüssel

Die Schlüssel im JSON folgen einem einheitlichen System:

Numeri:

  • 1_sg = Singular
  • 2_pl = Plural

Kasus (bei Nomina, Adjektiven, Pronomina):

  • 1_nom = Nominativ
  • 2_gen = Genitiv
  • 3_dat = Dativ
  • 4_akk = Akkusativ
  • 5_vok = Vokativ
  • 6_abl = Ablativ

Genera (bei Adjektiven, Pronomina):

  • 1_mask = Maskulinum
  • 2_fem = Femininum
  • 3_neutr = Neutrum

Steigerungsstufen (bei Adjektiven):

  • 1_pos = Positiv
  • 2_komp = Komparativ
  • 3_superl = Superlativ
  • 4_adv = Adverb

Genera Verbi (bei Verben):

  • 1_aktiv = Aktiv
  • 2_passiv = Passiv
  • 3_gerundium = Gerundium
  • 4_gerundiv = Gerundivum
  • 5_supin = Supinum

Tempora (bei Verben):

  • 1_praesens = Präsens
  • 2_imperfekt = Imperfekt
  • 3_perfekt = Perfekt
  • 4_plusquamperfekt = Plusquamperfekt
  • 5_futur = Futur I
  • 6_futur2 = Futur II

Modi (bei Verben):

  • 0_infinitiv = Infinitiv
  • 1_indikativ = Indikativ
  • 2_konjunktiv = Konjunktiv
  • 3_imperativ = Imperativ
  • 4_partizip = Partizip

Personae (bei Verben):

  • 1_sg1 = 1. Person Singular
  • 2_sg2 = 2. Person Singular
  • 3_sg3 = 3. Person Singular
  • 4_pl1 = 1. Person Plural
  • 5_pl2 = 2. Person Plural
  • 6_pl3 = 3. Person Plural

Verweissystem

Das Glossarium verfügt über ein ausgefeiltes System zur Verwaltung von Beziehungen zwischen Lemmata.

Verweis-Tabelle

Die Tabelle verweise speichert Beziehungen zwischen Vokabeln:

FeldTypZweck
idINTPrimärschlüssel
from_vocab_idINTID des verweisenden Lemmas
from_vocab_typeVARCHARModel-Klasse des verweisenden Lemmas
to_vocab_idINTID des Ziel-Lemmas
to_vocab_typeVARCHARModel-Klasse des Ziel-Lemmas
form_fromVARCHARSpezifische Form, von der verwiesen wird
form_toVARCHARSpezifische Form, auf die verwiesen wird
relationVARCHARArt der Beziehung
confusion_factorFLOATVerwechslungsgefahr (für Übungen)

Verweis-Typen (Relation)

Die relation-Spalte definiert die Art der Beziehung:

Relation-CodeBedeutung
(leer/null)"siehe auch" (allgemeiner Verweis)
etym"ist etymologisch verwandt mit"
part"ist Bestandteil von"
cont"beinhaltet"
lemm"hat als eigentliches Lemma"

Formverweise

Verweise können sich auf spezifische Formen beziehen:

Beispiel: Das Verb incipere (beginnen) hat eine Alternativform im Perfekt:

  • Reguläre Form: incepi
  • Alternativform: coepi

Dies kann auf zwei Arten abgebildet werden:

Option 1: Inline im JSON

json
{
  "1_aktiv": {
    "3_perfekt": {
      "1_indikativ": {
        "1_sg1": "coepi / incepi"
      }
    }
  }
}

Option 2: Verweis-Eintrag

  • from_vocab_id: ID von incipere
  • to_vocab_id: ID von coepere
  • form_from: Pfad zur Form (z.B. "1_aktiv.3_perfekt.1_indikativ.1_sg1")
  • form_to: Zielform

Accessor-Methoden für Verweise

Die Vocab-Klasse bietet Accessor-Methoden für Verweise:

php
// Verweise VON diesem Lemma (ausgehend)
$verweiseFrom = $vocab->verweise_from;

// Verweise AUF dieses Lemma (eingehend)
$verweiseTo = $vocab->verweise_to;

// Formverweise AUF dieses Lemma
$verweiseToFormen = $vocab->verweise_to_formen;

Gemeinsame Datenbankfelder

ID und Metadaten

php
'id'              // Primärschlüssel, AUTO_INCREMENT
'created_at'      // Erstellungszeitpunkt (automatisch)
'updated_at'      // Letzte Änderung (automatisch)
'deleted_at'      // Soft-Delete-Zeitpunkt (NULL = nicht gelöscht)
'created_by_id'   // Benutzer-ID des Erstellers
'updated_by_id'   // Benutzer-ID des letzten Bearbeiters

Lemma und Bedeutung

php
'lemma'           // Das Grundform-Wort (z.B. "amare", "amicus")
                  // Bei Verben: der Infinitiv Präsens
                  // Bei Nomina: Nominativ Singular
                  // Bei Adjektiven: maskuline Nominativ-Form
                  // VARCHAR, UNIQUE innerhalb der Wortart

'info'            // Zusatzinformationen zum Lemma
                  // Wird in getLemmaInfo() verwendet
                  // TEXT, optional

'bedeutung'       // Primäre deutsche Bedeutung
                  // TEXT, REQUIRED

'bedeutungen_alle' // Weitere/alternative Bedeutungen
                   // TEXT, optional

Morphologie-Felder

php
'morph'           // JSON mit allen morphologischen Formen
                  // Wird vom Morpher generiert
                  // JSON/TEXT

'morph_mode'      // Morphologisierungsmodus
                  // 0 = automatisch (Standard)
                  // 1 = manuell (Sonderformen)
                  // INT

'status'          // Morphologisierungsstatus
                  // 0 = unmorphologisiert
                  // 1 = in Bearbeitung
                  // 2 = fertig morphologisiert
                  // INT

Formenbildungsfelder (fb_*)

Diese Felder sind wortartspezifisch und enthalten linguistische Angaben zur Formenbildung:

Gemeinsame FB-Felder:

php
'fb_stamm'        // Stamm des Wortes (für Flexion)
                  // VARCHAR, meist REQUIRED

Verben:

php
'fb_kklasse'      // Konjugationsklasse (a, e, i, k, ki)
'fb_1pssgpr'      // 1. Person Singular Präsens
'fb_1pssgpf'      // 1. Person Singular Perfekt
'fb_ppp'          // Partizip Perfekt Passiv
'fb_pfa'          // Partizip Futur Aktiv
'fb_hat_ppp'      // Boolean: Bildet PPP?
'fb_hat_pfa'      // Boolean: Bildet PFA?
'fb_ist_deponens' // Boolean: Ist Deponens?

Nomina/Eigennamen:

php
'fb_dklasse'      // Deklinationsklasse (a, o, u, e, 3dekl, indekl)
'fb_genus'        // Genus (m, f, n)
'fb_bes_numerus'  // Numerus-Besonderheiten (pltantum, sgtantum)

Adjektive:

php
'fb_dklasse'      // Deklinationsklasse (ao, 3kons)
'fb_genera'       // Anzahl Genera (1endig, 2endig, 3endig)
'fb_komparativ'   // Komparativform
'fb_superlativ'   // Superlativform
'fb_hat_komparativ_superlativ' // Boolean

Verwendung und Workflows

Erstellung eines neuen Lemmas

php
// 1. Neues Lemma erstellen
$verb = Verb::create([
    'lemma' => 'amare',
    'bedeutung' => 'lieben',
    'fb_stamm' => 'am',
    'fb_kklasse' => 'a',
    'fb_1pssgpr' => 'amo',
    'fb_1pssgpf' => 'amavi',
    'fb_ppp' => 'amatum',
    'fb_ist_deponens' => false,
]);

// 2. Morphologie generieren
$verb->morph();

// 3. Status prüfen
// $verb->status === 2 (morphologisiert)

Abrufen morphologischer Daten

php
// Zugriff auf morph als Array
$morphArray = $verb->getMorphArrayAttribute();

// Beispiel: 1. Person Singular Präsens Aktiv Indikativ
$form = $morphArray['1_aktiv']['1_praesens']['1_indikativ']['1_sg1'];
// => "amo"

// Alle Formen eines Lemmas
$alleFormen = $verb->alle_formen;  // Collection

Validierung vor Morphologie

php
// Prüfen, ob alle erforderlichen Felder gesetzt sind
$requiredFields = $verb->RequiredFields;
// => ['lemma', 'fb_stamm', 'fb_kklasse', 'fb_1pssgpr', 'fb_1pssgpf', ...]

// Model-Methode zur Validierung
if ($verb->IsValid()) {
    $verb->morph();
}

Soft Deletes

php
// Lemma löschen (soft)
$verb->delete();  // deleted_at wird gesetzt

// Gelöschte Lemmata einbeziehen
$allVerbs = Verb::withTrashed()->get();

// Nur gelöschte Lemmata
$deletedVerbs = Verb::onlyTrashed()->get();

// Endgültig löschen
$verb->forceDelete();

// Wiederherstellen
$verb->restore();

Verwendung der Lookup-Tabellen

php
// Route-Name zu Model-Klasse
$modelClass = Vocab::$RouteModelLookUpTable['verben'];
// => Verb::class

// Lemma nach Wortart finden
$route = 'nomina';
$Wortart = Vocab::getWortartZu($route);
$lemma = $Wortart::where('lemma', 'amicus')->first();

Beziehungen (Relationships)

php
// Sachfelder eines Lemmas
$sachfelder = $verb->sachfelder;  // MorphToMany

// Lerneinheiten, die dieses Lemma enthalten
$lerneinheiten = $verb->lerneinheiten;  // BelongsToMany

// Ersteller und Bearbeiter
$creator = $verb->creator;  // BelongsTo User
$updater = $verb->updater;  // BelongsTo User

Zusätzliche Attribute (Accessors)

php
// Wortart als String
$wortart = $verb->wortart;  // => "verb"

// Route-Name
$routeName = $verb->route_name;  // => "verben"

// Dictionary Headword (für Wörterbuch-Suche)
$headword = $verb->dictionary_headword;
// Bei Verben: 1. Person Sg. Präs., sonst Lemma

// Lemma-Info (für Anzeige)
$lemmaInfo = $verb->lemma_info;
// => z.B. "amo, amavi, amatum"

// Descriptors (lesbare Feldnamen)
$descriptors = $verb->descriptors;
// => ['fb_stamm' => 'Stamm', 'fb_kklasse' => 'Konjugationsklasse', ...]

Best Practices

Bei der Eingabe neuer Lemmata

  1. Minimale Angaben zuerst: Fülle nur die absolut notwendigen Felder aus
  2. Validierung nutzen: Prüfe $lemma->RequiredFields für erforderliche Felder
  3. Status beachten: Status 0 = noch nicht morphologisiert
  4. Morphologie sofort generieren: Nach Eingabe direkt morph() aufrufen
  5. Fehlerbehandlung: Morphologie kann fehlschlagen, Exceptions abfangen

Bei der Abfrage von Formen

  1. Performance: Nutze scopeExclude(['morph']), wenn Morphologie nicht benötigt wird
  2. Caching: Morphologische Daten sind groß, nicht unnötig abrufen
  3. Accessor nutzen: Verwende getMorphArrayAttribute() statt direktem JSON-Zugriff
  4. Null-Checks: Prüfe, ob morph existiert (nicht alle Wortarten haben Morphologie)

Bei der Programmierung

  1. Traits verwenden: Nutze existierende Traits wie Morphable, Verifiable
  2. Constants beachten: Jedes Model definiert ROUTE_NAME, CLASS_NAME, MORPHER, etc.
  3. Lookup-Tabellen: Verwende die zentral definierten Lookup-Tabellen in Vocab
  4. Polymorphe Beziehungen: Sachfelder und Verweise nutzen polymorphe Relationships

Zusammenfassung

Das Glossarium-System ist ein hochgradig spezialisiertes und sprachorientiertes System für die Verwaltung lateinischer Vokabeln. Die Hauptmerkmale sind:

  1. Wortartspezifische Speicherung in eigenen Tabellen mit linguistischen Feldern
  2. Automatische Morphologie-Generierung durch spezialisierte Morpher-Klassen
  3. Hierarchische JSON-Struktur für flektierte Formen
  4. Flexibles Verweissystem für Beziehungen und Alternativformen
  5. Vererbungshierarchie mit gemeinsamer Basisklasse und Traits
  6. Soft Deletes und vollständige Metadaten-Verwaltung

Die detaillierten Dokumentationen zu den einzelnen Wortarten beschreiben die spezifischen Felder, Morphologie-Regeln und Verwendungsmöglichkeiten.


Weiterführende Dokumentation:

Externe Referenzen:

  • Rubenbauer/Hofmann: Lateinische Grammatik (RH)
  • Lateinische Grammatik von Kühner-Stegmann