Das Dateiformat dient zum Austausch von Daten zwischen den 3 AdLer-Komponenten AMG, Backend und 3D-Frontend.
Die Visualisierung stellt die Version 0.5 des ATF-Formats dar.
Die Struktur der gesamten Lernwelt sowie übergeordneten Metadaten wird über ein einzigen JSON-Objekt abgebildet. Zum jetzigen Zeitpunkt befindet sich auf dem Root-Level dieses Objekts rein die Versionsnummer des Files sowie ein Objekt, welches die Lernwelt mit all ihren Inhalten beschreibt.
Um sicherzustellen, dass die Komponenten ordnungsgemäß kommunizieren können, wird das ATF-File mit einer Versionsnummer versehen. Diese Versionsnummer wird auf dem Root-Level des JSON-Objekts gespeichert. Die Komponenten können nun überprüfen, ob sie mit der Version des Files umgehen können.
Das ATF File wurde im laufe der Entwicklung des AdLer-System stetig weiterentwickelt. Allerdings wurden diese Entwicklungen nicht, oder nicht ausreichend Dokumentiert. Deshalb startet das AFT-Format mit der Versionsnummer 0.3. Alle vorherigen Änderungen sind nicht einzusehen und nicht im Changelog vorhanden.
Die Konventionen, die in diesem Dokument verwendet werden, richten sich grundlegend nach der JSON-Spec.
Zusätzlich dazu wird auf eine Normalisierung der Datenstruktur geachtet. Das bedeutet, dass die Datenstruktur immer gleich ist, unabhängig von der Anzahl der Elemente. Das führt dazu, Elemente, welche öfters in verschiedenen Objekten vorkommen, in eigene Objekte ausgelagert werden und per Id Referenziert werden.
Die Namen von schlüsseln, welche einen einzigen Wert beinhalten, sollen immer im Singular geschrieben werden. Die Namen von Schlüsseln, welche mehrere Werte (Arrays) beinhalten, sollen immer im Plural geschrieben werden.
Schlüssel | Datentyp | Funktion | benötigt? |
---|---|---|---|
$type |
string | Typ des Moduls/Elements | Ja |
elementId |
int | Eindeutige ID des Adaptivity-Moduls | Ja |
elementUUID |
string | Eindeutige UUID des Adaptivity-Moduls | Ja |
elementName |
string | Name des Adaptivity-Moduls | Ja |
elementDescription |
string | Beschreibung des Adaptivity-Moduls | Nein |
elementGoals |
[string] | Ziele des Adaptivity-Moduls | Nein |
elementCategory |
string | Kategorie des Moduls (z.B. "adaptivity") | Ja |
elementFileType |
string | Art des Dateityps des Adaptivity-Moduls (könnte optional sein, da nur ein Adaptivity-Modul existiert) | Ja |
elementMaxScore |
integer | Maximale Punktzahl, die für das Modul vergeben werden kann (noch zu klären) | Ja |
elementModel |
string | Modell zur Anzeige des Moduls | Ja |
adaptivityContent |
object | Inhalte des Adaptivity-Moduls | Ja |
adaptivityTasks |
[object] | Liste der Aufgaben innerhalb des Adaptivity-Moduls | Ja |
adaptivityQuestions |
[object] | Fragen, die mit den Aufgaben verbunden sind | Ja |
adaptivityRules |
[object] | Regeln für die Adaptivität basierend auf der Richtigkeit der Antwort | Ja |
choices |
[object] | Auswahlmöglichkeiten für die Fragen (Ordnung im Array ist wichtig zur Identifizierung der Antworten; Mischung/Neuordnung sollte im Frontend erfolgen, da keine IDs für die Auswahlmöglichkeiten existieren) | Ja |
Schlüssel | Datentyp | Funktion | benötigt? |
---|---|---|---|
$type |
string | Typ des Lernelements | Ja |
elementId |
int | Eindeutige ID des Lernelements | Ja |
elementUUID |
string | Eindeutige UUID des Lernelements | Ja |
elementName |
string | Name des externen Lernelements | Ja |
elementCategory |
string | Kategorie des Lernelements (z.B. "text") | Ja |
elementFileType |
string | Art des Dateityps des Lernelements | Ja |
Schlüssel | Datentyp | Funktion | benötigt? |
---|---|---|---|
lmsElementIdentifier | objekt | Objekt, welches durch Angabe von Typ und Wert ein Elementen im LMS eindeutig bezeichnen kann | Ja |
worldDescription | string | Beschreibung der Lernwelt, welche dem Nutzer angezeigt wird | Nein |
worldGoals | [string] | Einzelne Lernziele der Welt | Nein |
worldName | string | Name der Welt | Ja |
spaces | [object] | Array aus Spaces, welche in der Welt vorhanden sind | Ja |
evaluationLink | string | Link für einen Evaluations-Link, sollte dieser in der Engine angezeigt werden | Nein |
Schlüssel | Datentyp | Funktion | benötigt? |
---|---|---|---|
topicId | int | Id des Topics | Ja |
topicName | string | Name des Topics | Ja |
topicContents | [int] | Array aus den Ids der Spaces, welche in dem Topic enthalten sind | Ja |
Schlüssel | Datentyp | Funktion | benötigt? |
---|---|---|---|
lmsElementIdentifier | objekt | Objekt, welches durch Angabe von Typ und Wert ein Elementen im LMS eindeutig bezeichnen kann | Ja |
spaceContents | [int] | (deprecated ab version 0.4)ids der LernElemente, welche sich in dem Raum befinden | Ja |
includedPoints | int | Wie viele Punkte ein Raum Maximal abwerfen kann | Ja |
requiredPointsToComplete | integer | Wie viele Punkte in einem Raum angesammelt werden müssen, damit er als abgeschlossen gilt | Ja |
requiredSpacesToEnter | string (boolsche Algebra) | Spaces mit UND und ODER verknüpft, welche die Bedingung zum öffnen des Space bilden (siehe beschreibung unten) | Ja |
spaceName | string | Name des Lernraumes | Ja |
spaceDescription | string | Beschreibung des Spaces, welche dem Nutzer angezeigt wird | Nein |
spaceGoals | [string] | Einzelne Lernziele des Spaces | Nein |
spaceSlotContents | [int] | Die Lernelemente, welche sich in dem Raum befinden mit deren Slot (repräsentiert durch den Array index(null = leer)) | Ja |
spaceTemplate | string | Das Temapate, welches für das Modell des Raumes genutzt wird | Ja |
spaceTemplateStyle | string | Der Style des Templates, welcher genutzt werden soll | Ja |
Schlüssel | Datentyp | Funktion | benötigt? |
---|---|---|---|
lmsElementIdentifier | objekt | Objekt, welches durch Angabe von Typ und Wert ein Elementen im LMS eindeutig bezeichnen kann | Ja |
elementId | int | id des Lernelements | Ja |
elementDescription | string | Beschreibung des Lernelements | Nein |
elementGoals | [string] | ziele des Lernelements | Nein |
elementCategory | string | Art des Lernelements (Bild, Text, H5P, etc) | Ja |
elementFileType | string | genauer Content des Lernelements (im Falle Bild: Jpeg, PNG, ...) | Ja |
elementMaxScore | integer | wie viele Punkte gibt das Element (maximal) gibt, wenn es abgeschlossen ist | Ja |
elementName | string | Name des Elements | Ja |
elementModel | string | Modell, weklches zur Anzeige des Elements genutzt werden soll | Ja |
spaceStory | objekt | Stellt die Story für einen Lernraum bereit. | Nein |
Schlüssel | Datentyp | Funktion | benötigt? |
---|---|---|---|
fileVersion | string | gibt die Version des ATF Files an | Ja |
amgVersion | string | gibt die Version des AMG Tools an | Nein |
author | string | Autor der Lernwelt | Nein |
language | ["de", "en"] | Sprache der Lernwelt in Country Code ist | Nein |
world | objekt | beinhaltet alle Daten der Lernwelt | Ja |
Schlüssel | Datentyp | Funktion | benötigt? |
---|---|---|---|
intoStory | objekt | Story die beim betreten des Raumes abgespielt wird | Nein |
outroStory | objekt | Story die beim verlassen des Raumes abgespielt wird | Nein |
storyTexts | [string] | Texte, aus welchen die Story besteht | Nein |
elementModel | string | Das Modell, welches für das Lernelement genutzt wird | Ja |
Das File Format ist mittels JSON-Schema definiert. Neben einer eindeutigen Dokumentation aller Typen, Elementen, Schlüsseln und Strukturen kann damit auch eine Validierung der Datei ausgeführt werden.
Ein JSON-Schema zu jeder Version ist in den Entsprechenden Ordnern zu finden.
Die Bedingungen zwischen Lernräumen gehen über reine Mindestpunkte hinaus. Aus diesem Grund wurde eine Aussagelogik implementiert, welche es ermöglicht, die Bedingungen zwischen Lernräumen zu definieren.
Dabei werden räume mittels UND (^) und ODER (v) verknüpft. Komplexere zusammenhänge können mittels Klammern realisiert werden. Eine Negation oder ähnliches ist nicht möglich, jedoch gilt die allgemeine Regel "Und vor Oder".
Dabei ist zu beachten, dass ein Raum ab dann als abgeschlossen gilt, wenn er seine benötigen Punkte zur Freischaltung erreicht hat.
Eine Beispielhafte Verknüpfung für einen Lernraum ist: "requiredSpacesToEnter": "(5)v((7)^(4))"
- "image", "text", "h5p" oder "video"
- "jpeg", "png", "mp4", "h5p" weitere bitte von AMG ergänzen
Nachfolgend sind die Templates aufgelistet, welche für die Darstellung der Räume genutzt werden können. In den Spalten "Template" befinden sich die möglichen Strings für das Feld spaceTemplate. In den Spalten "Style" befinden sich die möglichen Strings für das Feld spaceTemplateStyle.
Template | Style | Beschreibung |
---|---|---|
"Template1" | "Template1Style1" | |
"Template1Style2" | ||
"Template1Style3" |
Lernelement Typ | Modell | Beschreibung |
---|---|---|
"image" | "imageModel1" | |
"text" | "textModel1" | |
"h5p" | "h5pModel1" | |
"video" | "videoModel1" | |
"pdf" | "pdfModel1" |
- evaluationLink An optional field for an evaluation link for a learning world has been added
In Version 0.4 werden Templates für Lernräume sowie für Lernelemente hinzugefügt.
- spaceTemplate: Das Template, welches für das Modell des Raumes genutzt wird
- spaceTemplateStyle: Der Style des Templates, welcher genutzt werden soll
- spaceSlotContents: Die Lernelemente, welche sich in dem Raum befinden mit deren Slot (repräsentiert durch den Array index(null = leer))
- elementModel: Das Modell, welches für das Lernelement genutzt wird
- identifier für verschiedene Elemente auf dem LMS: Elemente können auf dem LMS leider nicht immer mit einer Id versehen werden. Daher MUSS es mehrere Möglichkeiten geben, diese zu identifizieren. Bisher werden Elemente im LMS (Lernwelt, Lernelement) mittels dem Namen identifiziert. Da es in Zukunft aber möglich sein soll, diese Elemente mittels einer ID zu identifizieren, wurde sich bis jetzt dazu entschieden, ein Objekt aus Identifikationsmethode und dem jeweiligen Wert zu übergeben.
- worldGoals: Im Gegensatz zu bisher ist hier nun ein Array aus Strings. Das hat den Grund, dass es eventuell sinnvoller ist, die Lernziele als Liste zu Formatieren und diese dementsprechend nutzerfreundlicher anzuzeigen. Gleiches gilt für die Spaces und Elemente
- fileVersion: Soll dazu dienen, den richtigen Parser zu wählen.
- amgVersion: Soll primär zum debugging dienen, um zu identifizieren, mit welchem Generator das File erstellt wurde, sollte etwas schief gegangen sein.
- elementPoints: Ursprünglich war hier eine Liste an "Belohnungen", welche der Nutzer für das Abschließen des Elements bekommt. Neben Punkten hätten dies beispielsweiße auch Badges oder Errungenschaften sein können. Jedoch wurde sich dazu entschieden, Errungenschaften und Badges vorerst zu Ignorieren und diese, wenn immer noch gefordert an anderer Stellt zu implementieren.
- url: Wurde entfernt, da der content des Lernelements ohnthin über die API erfragt wird, da nicht in jeden fall der content hier angegeben werden kann.
- elementFileType: Gibt an, wie der Inhalt des Element behandelt werden muss, sobald er von dem 3D Frontend geladen wurde.
- learningSpaceParentId: Wurde entfernt, da es eine redundante Information ist und nicht nicht Normalisiert ist.
- Autor und Language Da es im AMG ohnehin eingegeben wird, schlage ich vor, das direkt auch mitzuliefern. Es wurde sich auch überlegt, den moodle Autor dafür zu nutzen, allerdings kann es auch ein anderer sein, der das Backup auf Moodle hochlädt.
- namen für alle elemente Es wurden Namen für alle Elemente hinzugefügt (World, Space, Element)
- "Learning" als prefix herausgestrichen der übersicht halber wurde das Wort "Learning" weg rationalisiert
fileVersion
wird zwingen benötigtlearningWorld
heißt jetztworld
idNumber
existiert nicht mehridentifier
heißt jetztlmsElementIdentifier
und hat andere werteworldName
ist zwingend notwendigdescription
undgoals
heißen jetztworldDescription
undworldGoals
worldGoals
ist ein Array aus stringstopics
existiert nicht mehrlearningWorldContent
existiert nicht mehrlearningSpaces
heißt jetztspaces
identifier
heißt jetztlmsElementIdentifier
und hat andere wertespaceName
wird jetzt zwingend benötigtdescription
undgoals
heißen jetztspaceDescription
undspaceGoals
spaceGoals
ist ein array aus StringslearningspaceContent
heißt jetztspaceContents
includedPoints
existiert nicht mehrrequiredPoints
heißt jetztrequiredPointsToComplete
requirements
heißt jetztrequiredSpacesToEnter
id
heißt jetztelementId
identifier
heißt jetztlmsElementIdentifier
und hat andere werteurl
gibts nicht mehrdescription
undgoals
heißen jetztelementDescription
undelementGoals
elementName
wird zwingen benötigtelementGoals
ist ein Array aus StringselementType
heißt jetztelementFileType
learningElementValueList
heißt jetztelementMaxScore
und ist nur noch ein integer mit PunktenlearningspaceParentId
existiert nicht mehr