diff --git a/moochub-schema.json b/moochub-schema.json index 82b728a..5492937 100644 --- a/moochub-schema.json +++ b/moochub-schema.json @@ -575,80 +575,56 @@ "type": "object", "description": "This schema describes the attributes of a course id. It is used to point at a specific course.", "properties": { - "name": { - "type": "array", - "description": "List of names of the course. This array allows localized strings. A name and a language have to be given in the respective element.", - "items": { - "type": "object", - "properties": { - "inLanguage": { - "type": "string", - "description": "The language the name is given in. Has to be a shortcode according to BCP 47.", - "example": "en" - }, - "name": { - "type": "string", - "description": "The name of the course in the given language by the \"inLanguage\" attribute.", - "example": "HPI Academy: Leading Digital Transformation and Innovation - Fall 2020" - } - }, - "required": [ - "inLanguage", - "name" - ] - } - }, - "educationalFramework": { - "type": "string", - "description": "This labels the object as a link to a course. It is needed to be compliant with a \"Skill\" ", - "enum": [ - "Course_ID" - ] - }, - "educationalFrameworkVersion": { + "title": { "type": "string", - "description": "This labels the object as a link to a course. It is needed to be compliant with a \"Skill\" ", - "example": "Fall 2020" + "description": "The name of the course.", + "example": "HPI Academy: Leading Digital Transformation and Innovation - Fall 2020" }, - "targetUrl": { - "type": "string", - "description": "An IRI pointing at a course.", - "example": "https://open.hpi.de/courses/digitrans2020-1" - } - }, - "required": [ - "name", - "educationalFramework", - "educationalFrameworkVersion" - ] - }, - "ProgramReference": { - "title": "Program", - "type": "object", - "description": "This schema describes the attributes of a course program to an extend that it links to a EducationalOccupationalProgram.", - "properties": { "url": { "type": "string", - "description": "An IRI pointing at the course program or a homepage of the program, ... etc.", + "description": "An IRI pointing at the course or program.", "format": "iri" }, "type": { "type": "string", - "description": "The type of the object.", + "description": "The type of the referenced object.", "enum": [ - "Program" + "Program", + "Course" ] - }, - "title": { - "type": "string", - "description": "The title or name of the course program this course is part of." } }, "required": [ + "title", "url", "type" ] }, + "CoursePartReference": { + "description": "A course that is part of a program or a course. In addition to the properties of CourseReference, the requirementLevel property is used to indicate if the course is mandatory or elective.", + "allOf": [ + { + "$ref": "#/$defs/CourseReference" + } + ], + "properties": { + "requirementLevel": { + "$ref": "#/$defs/RequirementLevel" + } + }, + "required": [ + "requirementLevel" + ] + }, + "RequirementLevel": { + "type": "string", + "description": "The level of requirement for this course in the context of the parent course. Can be 'mandatory' or 'elective'.", + "enum": [ + "mandatory", + "elective" + ], + "example": "mandatory" + }, "CompetencyRequirement": { "type": "array", "description": "A list of competencies that are required to successfully complete this item. This includes skills, certificated, (high) school degrees, other courses", @@ -1026,9 +1002,10 @@ }, "type": { "type": "string", - "description": "Type of the object.", + "description": "Type of the object. 'Course' for individual courses, 'Program' for microdegrees and course programs.", "enum": [ - "Course" + "Course", + "Program" ] }, "attributes": { @@ -1299,19 +1276,57 @@ }, "hasPart": { "type": "array", - "description": "A list of the learning items like videos, lectures, quizzes, ... in the course.", + "description": "A list of the learning items like videos, lectures, quizzes, ... or courses that make up the course or program (both mandatory and elective).", "uniqueItems": true, "items": { - "$ref": "#/$defs/LearningItem" + "oneOf": [ + { + "$ref": "#/$defs/LearningItem" + }, + { + "$ref": "#/$defs/CoursePartReference" + } + ] } }, "isPartOf": { "type": "array", - "description": "A list of programs (preferable EducationalOccupationalPrograms) this course is part of. The given metadata shall at least contain a link to the program.", + "description": "A list of courses or programs (preferable EducationalOccupationalPrograms) this course is part of.", "uniqueItems": true, "example": null, "items": { - "$ref": "#/$defs/ProgramReference" + "$ref": "#/$defs/CourseReference" + } + }, + "relatedTo": { + "type": [ + "array", + "null" + ], + "description": "A list of relationships this course has with other courses. Uses a simple 2-dimensional approach: sequence type (prequel/sequel/complementary) combined with requirement level (mandatory/recommended). This enables defining course pathways and learning sequences.", + "uniqueItems": true, + "items": { + "title": "CourseRelationship", + "type": "object", + "description": "Defines a relationship between this course and another course, including the type of relationship and reference to the related course.", + "properties": { + "course": { + "$ref": "#/$defs/CourseReference" + }, + "type": { + "type": "string", + "description": "The type of relationship between this course and the related course. Defines the nature of the relationship, such as whether it is a prerequisite, a follow-up, or complementary.", + "enum": [ + "foundation", + "continuation", + "complementary" + ] + } + }, + "required": [ + "course", + "type" + ] } } }