5.4 KiB
5.4 KiB
JSON Structure Documentation
Diese Dokumentation erklärt die JSON-Struktur für Lernpfade in der Flalingo-Anwendung.
Übersicht
Ein Lernpfad (Path) besteht aus mehreren hierarchischen Elementen:
- Path: Der Hauptcontainer für einen Lernkurs
- Metadata: Versionierung und Zeitstempel
- Nodes: Lerneinheiten innerhalb des Pfads
- Exercises: Einzelne Übungen innerhalb der Nodes
JSON Schema
Path (Hauptstruktur)
{
"id": "string", // Eindeutige Pfad-ID
"title": "string", // Titel des Lernpfads
"description": "string", // Beschreibung des Pfads
"metadata": [...], // Array von Metadata-Objekten
"nodes": [...] // Array von Node-Objekten
}
Metadata
{
"path_id": "string", // Referenz zur Pfad-ID
"version": "string", // Versionsnummer (z.B. "1.0.0")
"created_at": "string", // ISO 8601 Timestamp
"updated_at": "string" // ISO 8601 Timestamp
}
Node (Lerneinheit)
{
"id": number, // Eindeutige Node-ID (Zahl)
"title": "string", // Titel der Lerneinheit
"description": "string", // Beschreibung der Einheit
"path_id": "string", // Referenz zur übergeordneten Pfad-ID
"exercises": [...] // Array von Exercise-Objekten
}
Exercise (Übung)
{
"id": number, // Eindeutige Exercise-ID (Zahl)
"ex_type": "string", // Typ der Übung (siehe Exercise-Typen)
"content": "string", // JSON-String mit übungsspezifischen Daten
"node_id": number // Referenz zur übergeordneten Node-ID
}
Exercise-Typen
Das content-Feld enthält einen JSON-String, dessen Struktur je nach ex_type variiert:
vocabulary
Vokabel-Lernkarten
{
"word": "hola",
"translation": "hallo",
"audio": "hola.mp3",
"image": "greeting.jpg",
"context": "informal greeting",
"gender": "feminine", // für gendered Sprachen
"type": "greeting" // Kategorie
}
multiple_choice
Multiple-Choice Fragen
{
"question": "Was bedeutet 'apple'?",
"options": ["Apfel", "Birne", "Orange", "Banane"],
"correct": 0, // Index der richtigen Antwort
"explanation": "Apple = Apfel auf Deutsch"
}
fill_blank
Lückentexte
{
"sentence": "The cat ___ on the table",
"answer": "is",
"options": ["is", "are", "was", "were"], // optional
"hint": "Verb 'to be' in 3rd person singular"
}
translation
Übersetzungsübungen
{
"source": "I am happy",
"target": "Ich bin glücklich",
"language_pair": "en-de",
"hints": ["I = Ich", "am = bin", "happy = glücklich"]
}
grammar
Grammatik-Erklärungen und -Übungen
{
"rule": "Present tense of 'ser'",
"explanation": "Das Verb 'ser' (sein) im Präsens",
"examples": ["Yo soy estudiante", "Tú eres profesor"],
"conjugations": [
{"person": "yo", "form": "soy"},
{"person": "tú", "form": "eres"}
]
}
pronunciation
Ausspracheübungen
{
"phrase": "Me llamo...",
"phonetic": "me ˈʎamo",
"audio": "me_llamo.mp3",
"tip": "Das 'll' wird wie 'j' ausgesprochen",
"speed": "normal" // slow, normal, fast
}
matching
Zuordnungsübungen
{
"pairs": [
{"left": "hermano", "right": "Bruder"},
{"left": "hermana", "right": "Schwester"},
{"left": "padre", "right": "Vater"}
],
"instruction": "Ordne die spanischen Wörter den deutschen zu"
}
listening
Hörverständnisübungen
{
"audio": "dialogue.mp3",
"question": "Was sagt die Frau?",
"options": ["Ich bin müde", "Ich bin hungrig", "Ich bin glücklich"],
"correct": 1,
"transcript": "Tengo hambre" // optional
}
sentence_building
Sätze zusammensetzen
{
"words": ["Yo", "soy", "estudiante", "de", "medicina"],
"correct_order": ["Yo", "soy", "estudiante", "de", "medicina"],
"translation": "Ich bin Medizinstudent",
"shuffled": true // Wörter werden gemischt dargestellt
}
image_selection
Bildauswahl
{
"instruction": "Wähle das rote Auto",
"images": ["red_car.jpg", "blue_car.jpg", "green_car.jpg"],
"correct": "red_car.jpg",
"audio": "red_car_audio.mp3" // optional
}
conversation
Dialogübungen
{
"scenario": "Im Restaurant bestellen",
"dialogue": [
{"speaker": "waiter", "text": "¿Qué desea ordenar?"},
{"speaker": "customer", "text": "Quiero una pizza, por favor"},
{"speaker": "waiter", "text": "¿Algo para beber?"}
],
"user_role": "customer",
"context": "formal restaurant setting"
}
Datentypen und Validierung
Pflichtfelder
- Alle
idFelder sind erforderlich und müssen eindeutig sein titleunddescriptionsind immer erforderlichcontentmuss ein gültiger JSON-String sein
Referenzielle Integrität
metadata.path_idmuss mitpath.idübereinstimmennode.path_idmuss mitpath.idübereinstimmenexercise.node_idmuss mitnode.idübereinstimmen
Zeitstempel
Alle Zeitstempel müssen im ISO 8601 Format vorliegen:
"2024-01-20T10:30:00Z"
Beispiel-Dateien
example_path.json- Vollständiger Spanisch-Anfängerkursexample_path_simple.json- Vereinfachtes Beispiel mit grundlegenden Typen
Erweiterbarkeit
Das System ist so konzipiert, dass neue Exercise-Typen einfach hinzugefügt werden können:
- Neuen
ex_typedefinieren - Entsprechende
content-Struktur dokumentieren - Repository-Layer unterstützt automatisch neue Typen