Metadaten
Aufbau
<task subatoId="15" trackingId="244a854f-c562-45b7-b425-198cd00b8380" lang="java" attempts="25">
<name>Appointment</name>
<evaluator>java8</evaluator>
<evaluatorParams>
<!-- wenn assert Statements in der Lösung verwendet werden -->
<param key="jvm.enable_asserts" value="true"/>
</evaluatorParams>
<description>Termine</description>
<submissionModes default="TEXT">
<submissionMode name="TEXT"/>
<submissionMode name="FILE"/>
</submissionModes>
<files>
<file public="true" type="template" path="Appointment.java"/>
<file public="false" type="test" path="AppointmentTest.java"/>
<file public="false" type="acceptanceTest" path="AppointmentAbnahmeTest.java"/>
<file public="false" type="include" path="Date.java"/>
<file public="false" type="include" path="DateTime.java"/>
<file public="false" type="include" path="Time.java"/>
<file public="false" type="solution" path="Appointment.java"/>
<file public="true" type="misc" path="Anhang.pdf"/>
</files>
<mimeMappings>
<!-- in diesem Beispiel eigentlich nicht notwendig - nur zur Vollständigkeit-->
<mimeMapping map=".java" to="text/x-java-source"></mimeMapping>
</mimeMappings>
<custom>
<sample>Hello World!</sample>
</custom>
</task>
Es existiert eine XSD, mit der eine erste lokale Validierung der meta.xml
erfolgen kann. Es wird zwar keine vollständige Validierung durchgeführt, dafür erspart die XSD aber unnötige Roundtrips aufgrund von syntaktischen Fehlern.
Header
<task subatoId="15" trackingId="244a854f-c562-45b7-b425-198cd00b8380" lang="java" attempts="25">
...
</task>
Attribut | Erforderlich | Typ | Beschreibung |
---|---|---|---|
subatoId | nein | int | Legacy, nicht mehr verwenden |
trackingId | ja | UUID4 | ID, welche zur Zuordnung der Lösungen verwendet wird. Diese muss innerhalb des Aufgaben-Pools eindeutig sein und sollte sich nie ändern. Diese ist von der ID der Aufgabe zu unterscheiden, die durch den Namen des Verzeichnisses festgelegt wird. Diese darf sich im Gegensatz zur trackingId ändern. |
attempts | nein | int | Gibt an, wie oft eine Lösung zu dieser Aufgabe abgegeben werden kann. Lösungen können auch nach Überschreitung abgegeben werden, sie werden dann aber entsprechend markiert. Wenn nichts angegeben wird, gibt es keine Begrenzung. |
lang | ja | string | Identifier der Sprache, die die Aufgabe "am besten trifft". Für mögliche Werte im Subato unter dem Menüpunkt "Sprachen" schauen (Wert ohne Klammern ist Identifier, in Klammern ist Anzeigename). Bei Bedarf neue Sprachen hinzufügen. |
Allgemein
<name>Appointment</name>
<evaluator>java8</evaluator>
<evaluatorParams>
<param key="jvm.enable_asserts" value="true"/>
</evaluatorParams>
<description>Termine</description>
Element | Erforderlich | Typ | Beschreibung |
---|---|---|---|
name | ja | string | Anzeigename der Aufgabe |
description | nein | string | Kurzbeschreibung der Aufgabe, die angezeigt wird. Kurz halten! |
evaluator | nein | Evaluator | Identifier des Evaluators, der für die automatische Auswertung von Lösungen (Kompilierung, Tests, Style) verwendet wird. |
evaluatorParams | nein | - | Parameter für den Evaluator, siehe Dokumentation des entsprechenden Evaluators für die möglichen Parameter. Aktuell sind nur einfache Key-Value Paare mit primitiven Werten möglich. |
Abgabemodus
Gibt an, wie Lösungen für diese Aufgabe abgegeben werden können.
<submissionModes default="TEXT">
<submissionMode name="TEXT"/>
<submissionMode name="FILE" extensions="java" archives="true" extract="true"/>
</submissionModes>
Attribut | Erforderlich | Typ | Beschreibung |
---|---|---|---|
submissionModes.default | nein | SubmissionMode | Standardmäßig ausgewählter Abgabemodus im UI |
submissionMode.name | ja | SubmissionMode | |
submissionMode.extensions | nein (default: alle Dateiendungen der template -Dateien) | string | Erlaubte Dateiendungen (separiert durch ; ). Nur Lösungsdateien mit den ausgewählten Dateiendungen werden akzeptiert. Bezieht sich nur auf Dateien, die unmittelbar abgegeben werden (nicht rekursiv in Archiven). Nur bei submissionMode.name = FILE |
submissionMode.archives | nein (default: true ) | boolean | Ob eine Abgabe als Archiv möglich ist. Erlaubt sind dann zusätzlich die in SubmissionMode aufgeführten Dateiendungen. Nur bei submissionMode.name = FILE |
submissionMode.extract | nein (default: true wenn Evaluator konfiguriert, false sonst) | boolean | Ob Archive entpackt werden sollen, um z.B. Lösungen direkt in der Weboberfläche ansehen zu können. Wenn ein Evaluator konfiguriert wurde, muss das Attribut den Wert true haben, da die Quelldateien darin zur Lösungsauswertung verarbeitet werden müssen. Nur bei submissionMode.name = FILE |
Die Angabe von submissionModes
ist optional. Wenn submissionModes
nicht angegeben wird, ist FILE
immer aktiviert (mit den Defaultwerten für extensions
, archives
und extract
). TEXT
ist dann aktiviert, wenn es genau eine template
-Datei gibt. default
entspricht TEXT
(sofern aktiviert), ansonsten FILE
.
Falls TEXT
explizit konfiguriert wird und es keine template
-Datei gibt, wird ein leerer Editor angezeigt und die abgegebene Lösung wird unter der Datei unnamed.txt
abgespeichert.
TEXT
für kleinere Aufgaben (z.B. Textaufgabe), in denen ein Web-Editor ausreicht. FILE
für alle anderen Aufgaben, für die eine Bearbeitung in einer IDE bzw. in einem regulären Text-Editor besser geeignet wäre.
Referenzen auf Dateien
Ergänzung von Metadaten zu benötigten Dateien. Alle Dateien (bis auf die Musterlösungen), die in den Ordnern abgelegt werden, müssen hier aufgelistet werden, damit sie berücksichtigt werden. Die Angabe von Dateien ist optional, es kann also Aufgaben ohne Dateien geben.
<files>
<file public="true" type="template" path="Appointment.java"/>
<file public="false" type="test" path="AppointmentTest.java"/>
<file public="false" type="acceptanceTest" path="AppointmentAbnahmeTest.java"/>
<file public="false" type="include" path="Date.java"/>
<file public="false" type="include" path="DateTime.java"/>
<file public="false" type="include" path="Time.java"/>
<file public="false" type="solution" path="Appointment.java"/>
<file public="true" type="misc" path="Anhang.pdf"/>
</files>
Für jede Datei ist ein file
-Element zu definieren. Es können folgende Attribute angegeben werden:
Attribut | Erforderlich | Typ | Beschreibung |
---|---|---|---|
type | nein (default: misc ) | FileType | |
path | ja | string | Relativer Pfad zur Datei, ausgehend vom Ordner files/<type> |
public | nein (default: false ) | boolean | Ist die Datei für nicht-Dozenten sichtbar? |
Weiterhin kann mit <file>Eine Beschreibung</file>
eine optionale kurze Beschreibung der Datei angegeben werden, die im UI angezeigt wird.
Mime-Type Zuordnungen
Aufgabenspezifische Zuordnungen von Dateiendungen zu Mime-Types (z.B. text/plain
). Der Mime-Type ist entscheidend, ob die Datei in einem Code-Editor angezeigt werden kann und welche Regeln für Syntax-Highlighting anzuwenden sind. Zudem beeinflusst er auch, ob die Abgabe einer bestimmten Lösungsdatei erlaubt ist - also ob es sich z.B. um eine Quelldatei handelt.
<mimeMappings>
<mimeMapping map=".eva" to="text/plain"></mimeMapping>
</mimeMappings>
Attribut | Erforderlich | Typ | Beschreibung |
---|---|---|---|
mimeMapping.map | ja | string | Zu matchender Suffix des Dateinamens |
mimeMapping.to | ja | string | Zu verwendender Mime-Type, falls Suffix übereinstimmt |
Die Angabe ist optional. Standardmäßig wird versucht, den Mime-Type automatisch abzuleiten. Es kann jedoch vorkommen, dass der Mime-Type nicht oder falsch abgeleitet wird. Das ist vor allem dann der Fall, wenn eine eigene Domain Specific Language entwickelt wird.
Kompetenzen
Jeder Aufgabe können mehrere Kompetenzen zugewiesen werden. (WIP, Forschung)
<competences>
<competence>useJavaCompiler</competence>
<competence>applyShortCircuit</competence>
<competence>overloadingMethods</competence>
</competences>
Die Angabe ist optional.
Erweiterbarkeit
Falls weitere Elemente benötigt werden, müssen diese innerhalb eines <custom></custom>
-Elements abgebildet werden:
<custom>
<sample>Hello World!</sample>
</custom>
Eigene Elemente können nicht an beliebiger Stelle definiert werden, da eine XSD 1.0 für die Validierung der meta.xml
verwendet wird. Bei XSD 1.1 gäbe es diese Limitierung nicht, allerdings kann Subato nur XSD 1.0 verarbeiten.