175 lines
5.3 KiB
Markdown
175 lines
5.3 KiB
Markdown
# Flalingo Path JSON Structure Documentation
|
|
|
|
This directory contains example JSON files that demonstrate the structure of learning paths in the Flalingo language learning application.
|
|
|
|
## Overview
|
|
|
|
A learning path in Flalingo is a structured sequence of educational content organized into nodes, where each node contains multiple exercises. The JSON structure mirrors the Rust data models used in the application.
|
|
|
|
## File Examples
|
|
|
|
- **`example_path.json`** - Comprehensive example showing a complete German family vocabulary path
|
|
- **`simple_path.json`** - Basic example for beginners (German greetings)
|
|
- **`advanced_path.json`** - Complex business German communication path
|
|
|
|
## JSON Structure
|
|
|
|
### Root Path Object
|
|
|
|
```json
|
|
{
|
|
"id": "string", // Unique identifier for the path
|
|
"title": "string", // Human-readable path title
|
|
"description": "string", // Detailed description of the path content
|
|
"metadata": [...], // Array of metadata objects
|
|
"nodes": [...] // Array of node objects
|
|
}
|
|
```
|
|
|
|
### Metadata Object
|
|
|
|
```json
|
|
{
|
|
"path_id": "string", // Reference to parent path ID
|
|
"version": "string", // Semantic version (e.g., "1.2.0")
|
|
"created_at": "string", // ISO 8601 UTC timestamp
|
|
"updated_at": "string" // ISO 8601 UTC timestamp
|
|
}
|
|
```
|
|
|
|
### Node Object
|
|
|
|
```json
|
|
{
|
|
"id": number, // Unique numeric identifier
|
|
"title": "string", // Node title/name
|
|
"description": "string", // Node description
|
|
"path_id": "string", // Reference to parent path ID
|
|
"exercises": [...] // Array of exercise objects
|
|
}
|
|
```
|
|
|
|
### Exercise Object
|
|
|
|
```json
|
|
{
|
|
"id": number, // Unique numeric identifier
|
|
"ex_type": "string", // Exercise type (see types below)
|
|
"content": "string", // JSON-encoded exercise content
|
|
"node_id": number // Reference to parent node ID
|
|
}
|
|
```
|
|
|
|
## Exercise Types
|
|
|
|
The `ex_type` field defines the type of exercise. Common types include:
|
|
|
|
### Basic Types
|
|
- **`vocabulary`** - Single word/phrase learning
|
|
- **`multiple_choice`** - Question with multiple answer options
|
|
- **`fill_blank`** - Complete sentences with missing words
|
|
- **`translation`** - Translate between languages
|
|
- **`listening`** - Audio comprehension exercises
|
|
|
|
### Interactive Types
|
|
- **`drag_drop`** - Match items by dragging and dropping
|
|
- **`conversation`** - Simulated dialogue practice
|
|
- **`speaking`** - Voice recording and pronunciation
|
|
- **`role_play`** - Interactive scenario-based exercises
|
|
|
|
### Advanced Types
|
|
- **`grammar_explanation`** - Detailed grammar lessons
|
|
- **`story_completion`** - Complete narrative texts
|
|
- **`comprehensive_quiz`** - Multi-format assessment
|
|
- **`case_study_comprehensive`** - Complex real-world scenarios
|
|
|
|
## Exercise Content Structure
|
|
|
|
The `content` field contains a JSON-encoded string with exercise-specific data:
|
|
|
|
### Vocabulary Exercise
|
|
```json
|
|
{
|
|
"word": "der Vater",
|
|
"translation": "father",
|
|
"audio": "/audio/vater.mp3",
|
|
"example": "Mein Vater ist Arzt."
|
|
}
|
|
```
|
|
|
|
### Multiple Choice Exercise
|
|
```json
|
|
{
|
|
"question": "How do you say 'sister' in German?",
|
|
"options": ["die Schwester", "der Schwester", "das Schwester", "die Schwestern"],
|
|
"correct": 0,
|
|
"explanation": "'Die Schwester' is feminine, so it uses the article 'die'."
|
|
}
|
|
```
|
|
|
|
### Conversation Exercise
|
|
```json
|
|
{
|
|
"scenario": "Family introduction at a party",
|
|
"dialogue": [
|
|
{"speaker": "A", "text": "Ist das deine Familie?"},
|
|
{"speaker": "B", "text": "Ja, das sind meine Eltern und mein Bruder."}
|
|
],
|
|
"vocabulary_focus": ["Familie", "Eltern", "Alter", "Beruf"]
|
|
}
|
|
```
|
|
|
|
### Listening Exercise
|
|
```json
|
|
{
|
|
"audio_file": "/audio/family_description.mp3",
|
|
"transcript": "Hallo, ich heiße Anna...",
|
|
"questions": [
|
|
{"question": "Wie heißt die Frau?", "answer": "Anna"},
|
|
{"question": "Ist sie verheiratet?", "answer": "Ja"}
|
|
]
|
|
}
|
|
```
|
|
|
|
## Design Principles
|
|
|
|
### Progressive Difficulty
|
|
Paths are structured with increasing complexity:
|
|
1. **Simple vocabulary introduction**
|
|
2. **Basic grammar concepts**
|
|
3. **Practical application**
|
|
4. **Comprehensive review**
|
|
|
|
### Content Organization
|
|
- **Logical grouping**: Related concepts are grouped within nodes
|
|
- **Sequential learning**: Nodes build upon previous knowledge
|
|
- **Mixed exercise types**: Various formats maintain engagement
|
|
- **Real-world context**: Practical scenarios and authentic language use
|
|
|
|
### Metadata Usage
|
|
- **Version control**: Track content updates and revisions
|
|
- **Timestamps**: Monitor content freshness and usage patterns
|
|
- **Path relationships**: Enable content dependencies and prerequisites
|
|
|
|
## File Naming Convention
|
|
|
|
- `simple_*.json` - Beginner level (A1-A2)
|
|
- `example_*.json` - Intermediate level (B1-B2)
|
|
- `advanced_*.json` - Advanced level (C1-C2)
|
|
- `specialized_*.json` - Domain-specific content (business, academic, etc.)
|
|
|
|
## Integration Notes
|
|
|
|
These JSON files can be:
|
|
- **Imported** into the SQLite database using migration scripts
|
|
- **Exported** from the database for backup or sharing
|
|
- **Used as templates** for creating new learning paths
|
|
- **Validated** against the Rust type system for consistency
|
|
|
|
## Validation
|
|
|
|
All JSON files should be validated for:
|
|
- **Structure compliance** with the documented schema
|
|
- **Content consistency** (valid references, proper formatting)
|
|
- **Educational quality** (appropriate difficulty progression, clear instructions)
|
|
- **Technical accuracy** (valid audio paths, properly encoded JSON strings) |