Glossarium-System: Gesamtübersicht
Inhaltsverzeichnis
- Einführung
- Systemarchitektur
- Wortarten im Glossarium
- Datenmodell und Tabellenstruktur
- Morphologiesystem
- Verweissystem
- Gemeinsame Datenbankfelder
- 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
- Wortartspezifische Tabellen: Jede Wortart hat ihre eigene Tabelle mit spezifischen linguistischen Feldern
- Automatische Morphologie: Aus linguistischen Angaben werden alle Formen generiert
- Hierarchische JSON-Speicherung: Morphologische Daten werden strukturiert in der
morph-Spalte gespeichert - Vererbungshierarchie: Alle Wortart-Models erben von der abstrakten Klasse
Vocab
Systemarchitektur
Klassenstruktur
Vocab (abstrakte Basisklasse)
├── Adjektiv
├── Eigenname (extends Nomen)
├── Nomen
├── Numerale
├── Partikel
├── Pronomen
├── Verb
└── WendungVerzeichnisstruktur
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 TraitsLookup-Tabellen in Vocab.php
Die Basisklasse Vocab definiert mehrere Lookup-Tabellen für die Zuordnung zwischen verschiedenen Bezeichnungen:
// 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:
| Wortart | Tabelle | Morphologisierbar | Manuelle Morphologie |
|---|---|---|---|
| Adjektive | glossarium_adjektive | Ja | Ja |
| Eigennamen | glossarium_eigennamen | Ja | Ja |
| Nomina | glossarium_nomina | Ja | Ja |
| Numeralia | glossarium_numeralia | Ja | Nein |
| Partikel | glossarium_partikel | Nein | Nein |
| Pronomina | glossarium_pronomina | Ja | Nein |
| Verben | glossarium_verben | Ja | Ja |
| Wendungen | glossarium_wendungen | Nein | Nein |
Detaillierte Dokumentationen
Für jede Wortart existiert eine separate, detaillierte Dokumentation:
Datenmodell und Tabellenstruktur
Gemeinsame Basisfelder (alle Wortarten)
Alle Glossarium-Tabellen enthalten folgende Basisfelder:
| Feld | Typ | Zweck |
|---|---|---|
id | INT | Primärschlüssel |
lemma | VARCHAR | Grundform des Wortes (Lemma) |
info | TEXT | Zusätzliche Informationen/Anmerkungen |
bedeutung | TEXT | Deutsche Bedeutung (Hauptbedeutung) |
bedeutungen_alle | TEXT | Weitere/alle Bedeutungen |
status | INT | Morphologisierungsstatus (0=unmorphologisiert, 1=in Bearbeitung, 2=fertig) |
morph | JSON | Morphologische Daten als hierarchischer JSON |
morph_mode | INT | Morphologisierungsmodus (0=automatisch, 1=manuell) |
created_at | TIMESTAMP | Erstellungszeitpunkt |
updated_at | TIMESTAMP | Letzte Aktualisierung |
deleted_at | TIMESTAMP | Soft-Delete-Zeitpunkt |
created_by_id | INT | Benutzer-ID des Erstellers |
updated_by_id | INT | Benutzer-ID des letzten Bearbeiters |
Wortartspezifische Felder
Jede Wortart hat zusätzliche spezifische Felder (Präfix fb_ = Formenbildung):
Beispiel: Verben
fb_stamm- Stamm des Verbsfb_kklasse- Konjugationsklassefb_1pssgpr- 1. Person Singular Präsensfb_1pssgpf- 1. Person Singular Perfektfb_hat_ppp- Bildet PPP (boolean)fb_ppp- Partizip Perfekt Passiv- usw.
Beispiel: Adjektive
fb_stamm- Stamm des Adjektivsfb_dklasse- Deklinationsklassefb_genera- Anzahl der Genera (1endig, 2endig, 3endig)fb_hat_komparativ_superlativ- Bildet Steigerungsformenfb_komparativ- Komparativformfb_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 → DatenbankMorphologie-Pipeline
- Eingabe: Benutzer gibt linguistische Daten ein (z.B. Stamm, Deklinationsklasse, Genus)
- Validierung: System prüft, ob alle erforderlichen Felder ausgefüllt sind
- Morphologie-Generierung: Passender Morpher wird instantiiert
- Regelanwendung: Morpher wendet grammatische Regeln an
- JSON-Erstellung: Hierarchisches Array mit allen Formen wird erstellt
- Speicherung: JSON wird in der
morph-Spalte gespeichert - Status-Update:
statuswird auf 2 (morphologisiert) gesetzt
Morpher-Klassen
Jede morphologisierbare Wortart hat eine zugehörige Morpher-Klasse:
| Wortart | Morpher-Klasse | Datei |
|---|---|---|
| Adjektiv | AdjektivMorpher | app/Morpher/AdjektivMorpher.php |
| Nomen | NomenMorpher | app/Morpher/NomenMorpher.php |
| Verb | VerbMorpher | app/Morpher/VerbMorpher.php |
| Pronomen | PronomenMorpher | app/Morpher/PronomenMorpher.php |
| Numerale | NumeraleMorpher | app/Morpher/NumeraleMorpher.php |
Verwendung des Morphable-Traits
Alle morphologisierbaren Wortarten nutzen das Morphable-Trait:
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)
{
"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)
{
"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= Singular2_pl= Plural
Kasus (bei Nomina, Adjektiven, Pronomina):
1_nom= Nominativ2_gen= Genitiv3_dat= Dativ4_akk= Akkusativ5_vok= Vokativ6_abl= Ablativ
Genera (bei Adjektiven, Pronomina):
1_mask= Maskulinum2_fem= Femininum3_neutr= Neutrum
Steigerungsstufen (bei Adjektiven):
1_pos= Positiv2_komp= Komparativ3_superl= Superlativ4_adv= Adverb
Genera Verbi (bei Verben):
1_aktiv= Aktiv2_passiv= Passiv3_gerundium= Gerundium4_gerundiv= Gerundivum5_supin= Supinum
Tempora (bei Verben):
1_praesens= Präsens2_imperfekt= Imperfekt3_perfekt= Perfekt4_plusquamperfekt= Plusquamperfekt5_futur= Futur I6_futur2= Futur II
Modi (bei Verben):
0_infinitiv= Infinitiv1_indikativ= Indikativ2_konjunktiv= Konjunktiv3_imperativ= Imperativ4_partizip= Partizip
Personae (bei Verben):
1_sg1= 1. Person Singular2_sg2= 2. Person Singular3_sg3= 3. Person Singular4_pl1= 1. Person Plural5_pl2= 2. Person Plural6_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:
| Feld | Typ | Zweck |
|---|---|---|
id | INT | Primärschlüssel |
from_vocab_id | INT | ID des verweisenden Lemmas |
from_vocab_type | VARCHAR | Model-Klasse des verweisenden Lemmas |
to_vocab_id | INT | ID des Ziel-Lemmas |
to_vocab_type | VARCHAR | Model-Klasse des Ziel-Lemmas |
form_from | VARCHAR | Spezifische Form, von der verwiesen wird |
form_to | VARCHAR | Spezifische Form, auf die verwiesen wird |
relation | VARCHAR | Art der Beziehung |
confusion_factor | FLOAT | Verwechslungsgefahr (für Übungen) |
Verweis-Typen (Relation)
Die relation-Spalte definiert die Art der Beziehung:
| Relation-Code | Bedeutung |
|---|---|
(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
{
"1_aktiv": {
"3_perfekt": {
"1_indikativ": {
"1_sg1": "coepi / incepi"
}
}
}
}Option 2: Verweis-Eintrag
from_vocab_id: ID von incipereto_vocab_id: ID von coepereform_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:
// 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
'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 BearbeitersLemma und Bedeutung
'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, optionalMorphologie-Felder
'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
// INTFormenbildungsfelder (fb_*)
Diese Felder sind wortartspezifisch und enthalten linguistische Angaben zur Formenbildung:
Gemeinsame FB-Felder:
'fb_stamm' // Stamm des Wortes (für Flexion)
// VARCHAR, meist REQUIREDVerben:
'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:
'fb_dklasse' // Deklinationsklasse (a, o, u, e, 3dekl, indekl)
'fb_genus' // Genus (m, f, n)
'fb_bes_numerus' // Numerus-Besonderheiten (pltantum, sgtantum)Adjektive:
'fb_dklasse' // Deklinationsklasse (ao, 3kons)
'fb_genera' // Anzahl Genera (1endig, 2endig, 3endig)
'fb_komparativ' // Komparativform
'fb_superlativ' // Superlativform
'fb_hat_komparativ_superlativ' // BooleanVerwendung und Workflows
Erstellung eines neuen Lemmas
// 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
// 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; // CollectionValidierung vor Morphologie
// 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
// 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
// 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)
// 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 UserZusätzliche Attribute (Accessors)
// 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
- Minimale Angaben zuerst: Fülle nur die absolut notwendigen Felder aus
- Validierung nutzen: Prüfe
$lemma->RequiredFieldsfür erforderliche Felder - Status beachten: Status 0 = noch nicht morphologisiert
- Morphologie sofort generieren: Nach Eingabe direkt
morph()aufrufen - Fehlerbehandlung: Morphologie kann fehlschlagen, Exceptions abfangen
Bei der Abfrage von Formen
- Performance: Nutze
scopeExclude(['morph']), wenn Morphologie nicht benötigt wird - Caching: Morphologische Daten sind groß, nicht unnötig abrufen
- Accessor nutzen: Verwende
getMorphArrayAttribute()statt direktem JSON-Zugriff - Null-Checks: Prüfe, ob
morphexistiert (nicht alle Wortarten haben Morphologie)
Bei der Programmierung
- Traits verwenden: Nutze existierende Traits wie
Morphable,Verifiable - Constants beachten: Jedes Model definiert
ROUTE_NAME,CLASS_NAME,MORPHER, etc. - Lookup-Tabellen: Verwende die zentral definierten Lookup-Tabellen in
Vocab - 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:
- Wortartspezifische Speicherung in eigenen Tabellen mit linguistischen Feldern
- Automatische Morphologie-Generierung durch spezialisierte Morpher-Klassen
- Hierarchische JSON-Struktur für flektierte Formen
- Flexibles Verweissystem für Beziehungen und Alternativformen
- Vererbungshierarchie mit gemeinsamer Basisklasse und Traits
- 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