Skip to content

Commit

Permalink
Minor refactoring + new README
Browse files Browse the repository at this point in the history
  • Loading branch information
fstueber committed Aug 13, 2021
1 parent 0dae78b commit acd9839
Show file tree
Hide file tree
Showing 6 changed files with 402 additions and 68 deletions.
90 changes: 86 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,95 @@

Das ENBREA CSV Format (kurz ECF-Format) dient zum Importieren von Daten nach ENBREA und zum Exportieren von Daten aus ENBREA. Auch andere Anwendungen wie z.B. DAVINCI und MAGELLAN unterstützen das ECF-Format.

Das ECF-Format umfasst einen standardisierte Menge an CSV-Dateien, die mit Hilfe von [Simple JSON Schema](https://github.com/simple-csv-schema/simple-csv-schema.spec) formal spezifiziert sind.

Die Liste der Schema-Dateien [findest Du hier](src).
Das ECF-Format umfasst einen standardisierte Menge von CSV-Dateien, die mit Hilfe von [Simple CSV Schema](https://github.com/simple-csv-schema/simple-csv-schema.spec) formal spezifiziert sind.

## Dokumentation

Die Dokumentation zum ECF-Format findest Du im [GitHub-Wiki](https://github.com/stuebersystems/schema.ecf/wiki).
### Liste der ECF-Dateien

Die Liste aller Schema-Dateien [findest Du hier](src).

#### Schlüsselverzeichnisse

Dateiname | Inhalt | Spezifikation
--------------------------------- | ------------------------------- | -------------
Countries.csv | Staaten | [CSV-Schema](src/ecf-countries.scsv.json)
CourseCategories.csv | Kurskategorien | [CSV-Schema](src/ecf-catalog.scsv.json)
CourseFlags.csv | Kursmerkmale | [CSV-Schema](src/ecf-catalog.scsv.json)
CourseTypes.csv | Kursarten | [CSV-Schema](src/ecf-catalog.scsv.json)
Languages.csv | Sprachen | [CSV-Schema](src/ecf-languages.scsv.json)
MaritalStatuses.csv | Ehestände | [CSV-Schema](src/ecf-catalog.scsv.json)
Nationalities.csv | Nationalitäten | [CSV-Schema](src/ecf-nationalities.scsv.json)
Religions.csv | Religionszugehörigkeiten | [CSV-Schema](src/ecf-catalog.scsv.json)
RoomAbsenceReasons.csv | Raumausfallgründe | [CSV-Schema](src/ecf-catalog.scsv.json)
RoomAbsenceStatuses.csv | Raumausfallstatus | [CSV-Schema](src/ecf-catalog.scsv.json)
SchoolClassAbsenceReasons.csv | Klassenabwesenheitsgründe | [CSV-Schema](src/ecf-catalog.scsv.json)
SchoolClassCategories.csv | Klassenkategorien | [CSV-Schema](src/ecf-catalog.scsv.json)
SchoolClassLevels.csv | Klassenstufen | [CSV-Schema](src/ecf-catalog.scsv.json)
SchoolClassProfiles.csv | Klassenprofile | [CSV-Schema](src/ecf-catalog.scsv.json)
SchoolClassTypes.csv | Klassenarten | [CSV-Schema](src/ecf-catalog.scsv.json)
SchoolOrganisations.csv | Schulorganisationen | [CSV-Schema](src/ecf-catalog.scsv.json)
SchoolProfiles.csv | Schulprofile | [CSV-Schema](src/ecf-catalog.scsv.json)
SchoolTypes.csv | Schularten | [CSV-Schema](src/ecf-catalog.scsv.json)
SubjectFocuses.csv | Fachschwerpunkte | [CSV-Schema](src/ecf-catalog.scsv.json)
SubjectCategories.csv | Fachkategorien | [CSV-Schema](src/ecf-subject-categories.scsv.json)
SubjectGroups.csv | Fachgruppen | [CSV-Schema](src/ecf-catalog.scsv.json)
SubjectTypes.csv | Facharten | [CSV-Schema](src/ecf-catalog.scsv.json)
TeacherAbsenceReasons.csv | Lehrerabwesenheitsgründen | [CSV-Schema](src/ecf-catalog.scsv.json)

#### Schuldaten

Dateiname | Inhalt | Spezifikation
--------------------------------- | ------------------------------- | -------------
Announcements.csv | Mitteilungen | [CSV-Schema](src/ecf-announcements.scsv.json)
Courses.csv | Kurse | [CSV-Schema](src/ecf-courses.scsv.json)
Departments.csv | Abteilungen | [CSV-Schema](src/ecf-departments.scsv.json)
LessonGaps.csv | Fehlstellen | [CSV-Schema](src/ecf-lesson-gaps.scsv.json)
RoomAbsences.csv | Raumausfälle | [CSV-Schema](src/ecf-room-absences.scsv.json)
Rooms.csv | Räume | [CSV-Schema](src/ecf-rooms.scsv.json)
ScheduledLessons.csv | Verplanter Unterricht | [CSV-Schema](src/ecf-scheduled-lessons.scsv.json)
SchoolClassAbsences.csv | Klassenabwesenheiten | [CSV-Schema](src/ecf-schoolclass-absences.scsv.json)
SchoolClasses.csv | Klassen | [CSV-Schema](src/ecf-schoolclasses.scsv.json)
StudentCourseAttendances.csv | Schüler-Kursteilnahmen | [CSV-Schema](src/ecf-student-course-attendances.scsv.json)
StudentForeignLangusges.csv | Schüler-Fremdsprachenfolge | [CSV-Schema](src/ecf-student-foreign-languages.scsv.json)
StudentSchoolClassAttendances.csv | Schüler-Klassenteilnahmen | [CSV-Schema](src/ecf-student-schoolclass-attendances.scsv.json)
StudentSubjects.csv | Schüler-Fachdaten | [CSV-Schema](src/ecf-student-subjects.scsv.json)
Students.csv | Schüler | [CSV-Schema](src/ecf-students.scsv.json)
Subjects.csv | Fächer | [CSV-Schema](src/ecf-subjects.scsv.json)
SubstituteLessons.csv | Vertretungsunterricht | [CSV-Schema](src/ecf-substitute-lessons.scsv.json)
TeacherAbsences.csv | Lehrer-Abwesenheiten | [CSV-Schema](src/ecf-teacher-absences.scsv.json)
TeacherCourseAttendances.csv | Lehrer-Kursteilnahmen | [CSV-Schema](src/ecf-teacher-course-attendances.scsv.json)
Teachers.csv | Lehrer | [CSV-Schema](src/ecf-teachers.scsv.json)
TimeFrames.csv | Zeitrahmen | [CSV-Schema](src/ecf-timeframes.scsv.json)
Vacations.csv | Ferien | [CSV-Schema](src/ecf-vacations.scsv.json)

### Konzepte

#### CSV-Schema

ECF ist mit Hilfe von [Simple CSV Schema](https://github.com/simple-csv-schema/simple-csv-schema.spec) formal spezifiziert.

Vorteile:

+ ECF-Dateien sind sauber dokumentiert. Die Dokumentation ist standardisiert und versionierbar.
+ ECF-Dateien können validiert werden.

#### JSON-Schema als Unterschema

CSV ist ein relationales Format, das Daten 2-dimensional abbildet: Jede Zeile in einer CSV-Datei ist ein Datensatz und jede Spalte repräsentiert ein Feld in diesen Datensätzen. Komplexere Strukturen werden standardmäßig durch zusätzliche CSV-Dateien modelliert, die untereinander eine Relationsbeziehung aufbauen. Das ist aber nicht immer gewünscht. In diesem Fall muss man den Inhalt einzelne CSV-Felder komplexer modellieren.

Das ECF-Format nutzt dafür das [JSON](https://www.json.org/json-de.html) als eingebettetes Format, d.h. die Inhalte einzelner Felder sind entweder als JSON-Array oder als JSON-Objekt gespeichert.

Ein Beispiel:

```
Id;Code;Name;DepartmentIdList
216C0B8C-E6BB-4C9A-9463-47531650238A;DE;Deutsch;"[""CA96D550-DA95-4DE4-8CE7-57BB8AE5ADED"",""DDDFA6BF-BDE4-45B9-B4DF-37410CE6619F""]"
```

Das Feld `DepartmentIdList` ist hier als JSON-Array mit zwei Id-Einträgen formatiert.

[Simple CSV Schema](https://github.com/simple-csv-schema/simple-csv-schema.spec) unterstützt [JSON-Schema](https://json-schema.org/) als Unterschema, so dass einer vollständigen Validierung von ECF nichts im Wege steht.

## Kann ich mithelfen?

Expand Down
7 changes: 0 additions & 7 deletions src/ecf-catalog.scsv.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,6 @@
"optional": true,
"nullable": true
},
{
"name": "InternalCode",
"description": "Internes Kürzel",
"type": "string",
"optional": true,
"nullable": true
},
{
"name": "Name",
"description": "Langname",
Expand Down
43 changes: 43 additions & 0 deletions src/ecf-student-foreign-languages.scsv.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"title": "Schüler-Fremdsprachenfolge",
"description": "ECF-Schema für Schüler-Fremdsprachenfolge",
"table": {
"name": "StudentForeignLanguages.csv",
"type": "unordered",
"columns": [
{
"name": "Id",
"description": "Eindeutige Id",
"type": "string"
},
{
"name": "StudentId",
"description": "Schüler (Verweis auf Students.csv)",
"type": "string"
}
{
"name": "SubjectId",
"description": "Fach mit Kategorie 'Fremdsprache' (Verweis auf Subjects.csv)",
"type": "string"
},
{
"name": "SequenceNo",
"description": "1., 2., ... Fremdsprache",
"type": "int",
"minValue": "1",
},
{
"name": "FromLevel",
"description": "Von Klassenstufe",
"type": "int",
"minValue": "1",
},
{
"name": "ToLevel",
"description": "Bis Klassenstufe",
"type": "int",
"minValue": "1",
}
]
}
}
112 changes: 55 additions & 57 deletions src/ecf-student-subjects.scsv.json
Original file line number Diff line number Diff line change
@@ -1,61 +1,59 @@
{
"title": "Schüler-Fachdaten",
"description": "ECF-Schema für Schüler-Fachdaten",
"tables": [
{
"name": "StudentSubjects.csv",
"type": "unordered",
"columns": [
{
"name": "Id",
"description": "Eindeutige Id",
"type": "string"
},
{
"name": "SchoolClassId",
"description": "Klasse (Verweis auf SchoolClasses.csv)",
"type": "string"
},
{
"name": "SubjectId",
"description": "Fach (Verweis auf Subjects.csv)",
"type": "string"
},
{
"name": "CourseTypeId",
"description": "Kursart (Verweis auf CourseTypes.csv)",
"type": "string",
"optional": true,
"nullable": true
},
{
"name": "CourseNo",
"description": "Kursnummer",
"type": "int",
"optional": true,
"nullable": true
},
{
"name": "EntryDate",
"description": "Start der Kursteilnahme",
"type": "date",
"formats": [
"yyyy-MM-dd"
],
"optional": true,
"nullable": true
},
{
"name": "ExitDate",
"description": "Ende der Kursteilnahme",
"type": "date",
"formats": [
"yyyy-MM-dd"
],
"optional": true,
"nullable": true
}
]
}
]
"table": {
"name": "StudentSubjects.csv",
"type": "unordered",
"columns": [
{
"name": "Id",
"description": "Eindeutige Id",
"type": "string"
},
{
"name": "SchoolClassId",
"description": "Klasse (Verweis auf SchoolClasses.csv)",
"type": "string"
},
{
"name": "SubjectId",
"description": "Fach (Verweis auf Subjects.csv)",
"type": "string"
},
{
"name": "CourseTypeId",
"description": "Kursart (Verweis auf CourseTypes.csv)",
"type": "string",
"optional": true,
"nullable": true
},
{
"name": "CourseNo",
"description": "Kursnummer",
"type": "int",
"optional": true,
"nullable": true
},
{
"name": "EntryDate",
"description": "Start der Kursteilnahme",
"type": "date",
"formats": [
"yyyy-MM-dd"
],
"optional": true,
"nullable": true
},
{
"name": "ExitDate",
"description": "Ende der Kursteilnahme",
"type": "date",
"formats": [
"yyyy-MM-dd"
],
"optional": true,
"nullable": true
}
]
}
}
Loading

0 comments on commit acd9839

Please sign in to comment.