Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Titel

Course API

Status

Status
colourPurple
titleIn ontwikkeling
Status
titleROSA-Architectuurscan
Status
titleBEsluitvorming
Status
titleimplementatie
Status
titlein beheer

Versie

Documentatie: 0.0.24

schemaVersion: 0.0.24

Datum13 December 2023

27 September 2024

Auteur

Werkgroep Combineren en arrangeren

Acties

  • Geen openstaande acties

...

Gegevensdienst

Leermaterialen

Scopes

  • eduv.course

EntiteitenObjecten

Bron

  • Leermaterialencatalogus

Afnemers

  • Overkoepelende leermiddelencatalogus

  • Onderwijsleeromgeving

  • Leermiddelendashboard

Endpoints

Leermaterialencatalogus

  • GET Courses

  • GET Course by ID

  • GET CourseStructure by ID

Notifications

De Notifications API kan gebruikt worden om als afnemer een notificatie te ontvangen bij een wijziging in de stand (nieuw/gewijzigd/verwijderde Course). Hiervoor dient zowel de bron als de afnemer dan de Berichteninfrastructuur en de Notifications API te hebben geïmplementeerd.

Anchor
course
course

...

Object: Course

Het bericht object Course beschrijft een LeermiddelStructuur zijnde een LeermateriaalBeschrijving of een LeermoduleBeschrijving. In de LeermiddelStructuur is de titel, omschrijving en de laatste versie en de toepasbaarheid in het onderwijs (vakcode en levels) opgenomen.

Veld

Type

Format

Omschrijving

Voorbeeld

O/V

Vullingsregel

courseId

string

string

De unieke identifier voor de Course

 

V

Waarde mag niet gewijzigd worden

title

string

string

De benaming voor de Course.

 

V

 

description

string

string

Korte omschrijving van de Course

 

O

 

lastPublished
Version

string

 

string

Laatst gepubliceerde versie van de Course.

#1

#1.2

2022-03-24

V

Versienummer zoals gehanteerd door de leverancier.

Bij iedere wijziging op de Course wordt het nummer verhoogd.

studies

array

studyStudy

De opleidingseenheden waar deze Course op gericht is.

Zie object study Study in de Catalogue API

V

Werkingsregel is om dit veld te vullen conform de waardelijst afspraken voor opleidingen, opleidingsjaren en niveaus.

subjects

array

subjectSubject

De vakken waar deze Course op gericht is.

Zie object subject Subject in de Catalogue API

V

Werkingsregels is om dit veld te vullen conform de waardelijst afspraken voor vakken.

Anchor
course-structure
course-structure

...

Object: CourseStructure (xAPI CMI5)

Het bericht object CourseStructure beschrijft een LeermiddelStructuur zijnde een LeermateriaalBeschrijving of een LeermoduleBeschrijving in detailniveau. In het bericht object is de metadata, zijn de leerdoelen en is de structuur en de opbouw van de LeermiddelStructuur uit onderliggende Leermaterialen (assignable units, aus) en/of Leermodules (blocks) gespecificeerd. De Onderwijsleeromgeving kan deze boomstructuur tonen en zo onderwijsmedewerkers de mogelijkheid geven om specifieke leermaterialen te plannen voor onderwijsdeelnemers.

...

Vanwege de adoptie van deze internationale standaard is de conventie voor de benamingen van de velden overgenomen in de berichtdefinitiehet object. Het veld publicationdate wordt daarom niet geschreven als publicationDate.

Veld

Type

Format

Omschrijving

Voorbeeld

O/V

Vullingsregel

course

object

courseCourse

Bevat de metadata over de Course

Zie course

V

 

objectives

array

objectiveObjective

Bevat de leerdoelen van de Course

Zie objective

O

 

aus

array

auAu

Bevat de assignable units (Leermaterialen) van de Course

Zie au

O

Wordt gebruikt zodra de Course bestaat uit een enkel niveau en alleen bestaat uit een aantal Leermaterialen.

blocks

array

blockBlock

Bevat de blocks (Leermodules) van de Course

Zie block

O

Wordt gebruikt zodra de Course bestaat uit meerdere niveaus (zoals hoofdstukken en paragrafen).

Anchor
course
course
Object

...

Course

In onderstaande tabel is het object Course nader gespecificeerd. In dit object wordt de relevante metadata van de Course beschreven.

Veld

Type

Format

Omschrijving

Voorbeeld

O/V

Vullingsregel

id

string

string

De unieke identifier voor deze Course

 

V

Komt overeen met courseId uit Course berichtdefinitieobject.

Waarde mag niet gewijzigd worden

title

array

[lang, langstring]

Een titel (langstring) en de taal van de titel (lang)

[nl-NL, Hallo]

V

In XML te representeren als: <langstring lang=”nl-NL”>Hallo
</langstring>

Dit is niet mogelijk in openAPI3, zie issue

description

array

[lang, langstring]

Een beschrijving (langstring) en de taal van de beschrijving (lang)

[nl-NL, Cursusbeschrijving voor Stepping Stones]

V

Zie title

image

string

URI

URI naar een afbeelding om deze Course te representeren

 

O

 

publicationdate

string

date

Datum van publicatie van de huidige versie van de Course

2022-11-02

O*

Waarde is in CMI5 niet verplicht.

Vullingsregel is om dit veld te vullen met de datum van publicatie van de versie

publisher

string

string

Naam van de uitgever van de Course

Noordhoff

O

 

streamcode

string

string

Benaming om de Course te identificeren

steppingstone-5e-4vwo

O

 

version

string

string

De versie van de Course

#1

#1.2

2022-03-24

O*

Waarde is in CMI5 niet verplicht.

Vullingsregel is om deze gelijk te stellen aan lastPublished
Version in Course berichtobject

Bij iedere wijziging op de Course wordt het nummer verhoogd.

streams

array

streamStream

Aanduidingen voor streams die gebruikt worden als type in de assignable units.

Helpt Leraren om individuele leerroutes voor leerlingen te plannen.

optioneel

verdieping

Zie stream Stream

O

 

Anchor
stream
stream
Object

...

Stream

In het Course Object bevat het veld streams één of meerdere stream objecten. Een stream Stream object wordt gespecificeerd conform onderstaande tabel.

Veld

Type

Format

Omschrijving

Voorbeeld

O/V

Vullingsregel

id

string

string

Unieke identifier voor de stream

 

O

Waarde mag niet gewijzigd worden

description

string

string

Beschrijving van de stream

optioneel

verdieping

O

 

Anchor
objective
objective
Object

...

Objective

Een Course bevat één of meerdere Leerdoelen (Objectives). De Leerdoelen worden gespecificeerd op het niveau van de CourseStructure. In de Blocks en Assignable Units is het mogelijk om vervolgens te verwijzen naar de identifiers (objective.id ). Zo is te achterhalen welk onderdeel van de Course bijdraagt aan welk leerdoel.

Veld

Type

Format

Omschrijving

Voorbeeld

O/V

Vullingsregel

id

string

string

Unieke identifier voor het leerdoel

 

V

Waarde mag niet gewijzigd worden

title

string

string

Benaming voor het leerdoel

 

O

 

description

string

string

Korte omschrijving van het leerdoel

 

O

 

Anchor
au
au
Object

...

Assignable unit (

...

Au)

De assignable units vormen de basisonderdelen van de Course API. Deze assignable units kunnen worden gezien als een LeermateriaalBeschrijving. De CMI5 standaard ondersteunt geavanceerde launchmethoden, launchmethoden en moveon criteria. Dit is nog niet geïmplementeerd in deze specificatie. In deze beschrijving wordt de metadata van het Leermateriaal beschreven en is ook de Deeplink naar het leermateriaal opgenomen.

...

Veld

Type

Format

Omschrijving

Voorbeeld

O/V

Vullingsregel

id

string

string

Unieke identifier voor de assignable unit

-

V

Waarde mag niet gewijzigd worden

activity
Type

string

string

Beschrijft hoe het leermateriaal te interpreteren.

Oefening

Naslagwerk

Arrangement

Assignment

Test

Instructie

Theorie

V

Dit is een vrij veld. Voorkeur heeft om hier op termijn afspraken over te maken.

launch
Method

string

ENUM

Beschrijft hoe de content gepresenteerd dient te worden

AnyWindow

OwnWindow

V

Exact gebruik van launchmethod en launchParameters is nog niet gedocumenteerd.
Dit veld wordt genegeerd.

Default: AnyWindow

moveOn

string

ENUM

Wordt gebruikt door een Onderwijsleeromgeving om te bepalen of een assignable unit volwaardig is afgerond.

Passed

Completed

CompletedAndPassed

Completed
OrPassed

NotApplicable

V

Dit veld is verplicht maar wordt niet gebruikt.

Default: CompletedOrPassed

title

array

[lang, langstring]

Een titel (langstring) en de taal van de titel (lang)

[nl-NL, Hallo]

V

In XML te representeren als: <langstring lang=”nl-NL”>Hallo
</langstring>

Dit is niet mogelijk in openAPI3, zie issue

description

array

[lang, langstring]

Een beschrijving (langstring) en de taal van de beschrijving (lang)

[nl-NL, Hallo]

O

Zie title

objectives

array

objective
.id

Een array van ids van Objectives (Leerdoelen) waar dit Leermateriaal aan bijdraagt.

-

O

 

url

string

url

Deeplink naar het Leermateriaal

www.uitgever.nl/leermateriaal

V

Optioneel kan een Onderwijsleeromgeving gebruik maken van de parameter product om de Aanbieder een suggestie te geven van het Leermiddel waartoe het Leermateriaal behoort en waarop de onderwijsdeelnemer een aanspraak heeft.

launch
Parameters

string

string

De parameters die meegestuurd worden in een Launched statement

 

O

Exact gebruik van launchmethod en launchParameters is nog geen onderdeel van de specificatie.
Dit veld wordt genegeerd.

image

string

URI

URI naar een afbeelding om deze Assignable Unit te representeren

-

O

 

streamref

string

stream
.id

Referentie naar een stream waar dit Leermateriaal binnen valt.

-

O

 

Anchor
block
block
Object

...

Block

Assignable units (Leermaterialen) kunnen gecombineerd worden in een grotere eenheid, zijnde een Block (Leermodule). Een Block kan zelfs ook weer bestaan uit meerdere Blocks. Denk bijvoorbeeld aan een Hoofdstuk Block dat bestaat uit meerdere Paragraaf Blocks, waarbij een Paragraaf Block bestaat uit meerdere Leermateriaal Assignable Units. Deze vrijheid van combineren van Blocks en Assignable Units geven leveranciers van leermiddelen de mogelijkheid om hun content te structureren passend bij het Leermiddel dat ze aanbieden.

Veld

Type

Format

Omschrijving

Voorbeeld

O/V

Vullingsregel

id

string

string

Unieke identifier voor de assignable unit

-

V

Waarde mag niet gewijzigd worden

title

array

[lang, langstring]

Een titel (langstring) en de taal van de titel (lang)

[nl-NL, Hallo]

V

In XML te representeren als: <langstring lang=”nl-NL”>Hallo
</langstring>

Dit is niet mogelijk in openAPI3, zie issue

description

array

[lang, langstring]

Een beschrijving (langstring) en de taal van de beschrijving (lang)

[nl-NL, Hallo]

O

Zie title

Veld wordt veelal gevuld met beschrijving van Hoofdstuk of Paragraaf.

blocks

array

blockBlock

Een array van Blocks die onderdeel zijn van dit Block

Zie deze Tabel

O

Een Block kan weer bestaan uit één of meerdere Blocks.

aus

array

auAu

Een array van Assignable Units die onderdeel zijn van dit Block

Zie Tabel 88object Assignable Unit

O

Een Block kan bestaan uit één of meerdere Assignable Units.

instructions

array

[lang, langstring]

Een instructie (langstring) en de taal van de instructie (lang)

[nl-NL, Hallo]

O

Zie title

image

string

URI

URI naar een afbeelding om dit Block te representeren

-

O

 

studyload
indicator

integer

integer

Een relatieve indicator voor de zwaarte van de studielast

1,2,5

O

Deze informatie is zeer zinvol om te representeren in de studiewijzer.

Waarde is een indicatie en geen betreft geen absolute duur in bijvoorbeeld dagen, uren of minuten.

...

Open api
filternone
operationsSorteralpha
supportedSubmitMethodsnone
tagsSorteralpha
showDownloadButtontrue
openapi: 3.0.0
info:
  title: Course API
  version: '0.0.24'
  description: |
    This API enables an `Onderwijsleeromgeving` to get more information about the Learning Materials. In the Course API a supplier of learning materials can specify the structure of these Learning Materials in Courses, Blocks, and with Assignable Units. The Course API consists of metadata about the learning materials, and does not contain the content of the Learning materials itself. The Course API is based on [xAPI cmi5](https://github.com/AICC/CMI-5_Spec_Current/blob/quartz/v1/CourseStructure.xsd). In the Catalogue API a reference is made to Learning materials in the Course API. This allows a `Onderwijsleeromgeving` to present detailed learning material information to Students or Teachers that are entitled (or licensed) to activate and use a Product.
    
    The Course API is also used within the Progress API te report learning progress on specific parts of a Course. The most detailed level being an Assignable Unit which defines a single piece of content within a Course.
    
    More information is available in the Documentation.
    
  contact:
    name: Edu-V
    url: www.edu-v.org/afsprakenstelsel
    email: info@edu-v.org

components:
  schemas:
    
    schemaVersion:
      type: string
      description: |
        Schema version of this API using semantic versioning 2.0.0.
        The API version number is communicated in the header.
        The major version is communicated in the URI.
        For more information see the [Edu-V versioning guidelines](https://edu-v.atlassian.net/wiki/spaces/AFSPRAKENS/pages/9437200/Versiebeheer).
      default: 0.0.24
    
    Course:
      title: Course
      type: object
      x-tags:
        - Course
      description: |
        The Course Object includes basic information about the Course. This basic info can be presented by a `Onderwijsleeromgeving` in a Portal to Students and/or Teachers. 
      properties:
        courseId:
          type: string
          description: 'Unique identifier for this Course. This identifier equals the identifier of the corresponding CourseStructure.'
          xml:
            attribute: true
        tile:
          type: string
          description: 'Title of the Course, to be presented in the `Onderwijsleeromgeving`.'
        description:
          type: string
          description: 'Short description of the Course, to be presented in the `Onderwijsleeromgeving`.'
        lastPublishedVersion:
          type: string
          description: 'Last published version of this course. Version number is defined by the supplier. After every modification the version number levels up.'
        studies:
          type: array
          description: 'The studies and study years that this product is targeted at.'
          items:
            $ref: '#/components/schemas/Study'
        subjects:
          type: array
          description: 'The subjects that this product is targeted at.'
          items:
            $ref: '#/components/schemas/Subject'
      required:
        - courseId
        - tile
        - lastPublishedVersion
        - studies
        - subjects
    
    Study:
      title: Study
      type: object
      description: 'A study where this product is targeted at.'
      properties:
        studyName:
          type: string
          description: |
            Offical name of the study.
            - primary education: the `po-opleidingseenheden in RIO korte naam` name as specified in [Waardenlijst Opleidingseenheden po](https://www.edustandaard.nl/standaard_werkgroepen/beheergroep-waardenlijsten-rio/) is used.
            - secondary education: the `vo-opleidingseenheden in RIO korte naam` name as specified in [Waardenlijst Opleidingseenheden vo](https://www.edustandaard.nl/standaard_werkgroepen/beheergroep-waardenlijsten-rio/) is used.              
            - vocational education: the `kwalificatienaam` as specfied in [Register kwalificatiestructuur SBB](https://kwalificatie-mijn.s-bb.nl) is used.
        studyCode:
          type: string
          description: |
            Offical code of the study.
            - primary education: the `erkendeopleidingscode` as specified in [Waardenlijst Opleidingseenheden po](https://www.edustandaard.nl/standaard_werkgroepen/beheergroep-waardenlijsten-rio/) is used.
            - secondary education: the `erkendeopleidingscode` as specified in [Waardenlijst Opleidingseenheden vo](https://www.edustandaard.nl/standaard_werkgroepen/beheergroep-waardenlijsten-rio/) is used.
            - vocational education: the `crebocode` as specfied in [Register kwalificatiestructuur SBB](https://kwalificatie-mijn.s-bb.nl) is used.
          minLength: 4
          maxLength: 5
          pattern: "^[0-9]*$"
        studyLevels:
          type: array
          description: |
            Official levels of the study.
            Primary and secundarysecondary education studyLevels are based on the `Niveau` as specified in [SLO curriculum](https://opendata.slo.nl/curriculum/2023/api/v1/niveau/)
            For Vocational Education Edu-V extended this list as documented on [Waardelijst onderwijsniveaus en leerjaren](https://edu-v.atlassian.net/wiki/spaces/AFSPRAKENS/pages/179470347/Waardelijst+onderwijsniveaus+en+leerjaren).
          items:
            type: object
            properties:
              studyLevelId:
                type: string
                description: 'The uuid of the level.'
                example: 'cb61531d-61eb-4412-a52f-ca065ca37e39/'
                pattern: '^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$'
              studyLevelPrefix:
                type: string
                description: 'The prefix of the level'
                example: 4205
                minLength: 4
                maxLength: 4
                pattern: "^[0-9]*$"
              studyLevelName:
                type: string
                description: 'The name of the level.'
                example: 'havo 5'
            required:
              - studyLevelId
              - studyLevelPrefix
              - studyLevelName
      required:
        - studyName
                
    Subject:
      title: Subject
      type: object
      x-tags:
        - Product
      description: 'A subject where this product is targeted at.'
      properties:
        subjectPrefix:
          type: string
          description: |
            Prefix of the subject.
            - primary education: the `vakleergebied prefix` from [SLO curriculum](https://opendata.slo.nl/curriculum/2023/api/v1/vakleergebied/)
            - secondary education:the `vakleergebied prefix` from [SLO curriculum](https://opendata.slo.nl/curriculum/2023/api/v1/vakleergebied/)
        subjectName:
          type: string
          description: |
            Name of the subject.
            - primary education: the `vakleergebied name` from [SLO curriculum](https://opendata.slo.nl/curriculum/2023/api/v1/vakleergebied/)
            - secondary education:the `vakleergebied name` from [SLO curriculum](https://opendata.slo.nl/curriculum/2023/api/v1/vakleergebied/)
      required:
        - subjectName
        - subjectPrefix
    
    CMI5.CourseStructure:
      title: CMI5.CourseStructure
      type: object
      x-tags:
        - CourseStructure
      description: |-
        Course definition in CMI5 format. 
        (see https://github.com/AICC/CMI-5_Spec_Current/blob/quartz/v1/CourseStructure.xsd)
        The cmi5 course structure definition is extended with http://www.sanoma.com/cmi5/ExtendedCourseStructureExtension.xsd fields. They are added in this spec with an xml namespace 'ecs'.


        If the API the xml version is defined. This cannot be fully defined in openAPI/JSON, but this is a close mapping for reference.
        Technical: In the xml the aus and blocks collections are not explicit available and are there implicit
        example:
        <courseStructure>
          <course...>
          </course>
          <au>
              details
          </au>
          <block>
              details
          </block>
          <block>
              details
          </block>
        <courseStructure>
        
      x-examples:
        example-1:
          course:
            title:
              - lang: string
                langstring: string
            description:
              - lang: string
                langstring: string
            image: string
            publicationdate: string
            publisher: string
            streamcode: string
            version: string
            streams:
              - id: string
                description: string
          objectives: string
          aus:
            - id: string
              activityType: string
              moveOn: string
              launchMethod: string
              title:
                - lang: string
                  langstring: string
              objectives:
                - null
              url: string
              launchParameters: string
              image: string
              streamref: string
          blocks:
            - id: string
              title:
                - lang: string
                  langstring: string
              description:
                - lang: string
                  langstring: string
              blocks:
                - {}
              aus:
                - id: string
                  activityType: string
                  moveOn: string
                  launchMethod: string
                  title:
                    - lang: string
                      langstring: string
                  objectives:
                    - null
                  url: string
                  launchParameters: string
                  image: string
                  streamref: string
              image: string
              studyloadindicator: 0
      properties:
        course:
          $ref: '#/components/schemas/CMI5.Course'
        objectives:
          type: array
          description: 'All (learning) objectives from this Course are defined at the highest level in this array. Within Assignable Units a reference can be made to the identifiers of these objectives.'
          items:
            $ref: '#/components/schemas/CMI5.Objective'
        aus:
          type: array
          description: 'If the course has no structure in Blocks then this list contains all the assignable units from the Course.'
          items:
            $ref: '#/components/schemas/CMI5.AU'
        blocks:
          type: array
          description: 'A Course consists of Blocks with underlying Blocks and/or Assignable Units. E.g. Blocks can be used to define chapters and paragraphs.'
          items:
            $ref: '#/components/schemas/CMI5.Block'
      required:
        - course
    
    CMI5.Course:
      title: CMI5.Course
      type: object
      x-tags:
        - CourseStructure
      description: |-
        Course definition as based on cmi5 course definition: 
        (see https://github.com/AICC/CMI-5_Spec_Current/blob/quartz/v1/CourseStructure.xsd)
        The cmi5 course structure definition is extended with http://www.sanoma.com/cmi5/ExtendedCourseStructureExtension.xsd fields. They are added in this spec with an xml namespace 'ecs'
      
      x-examples:
        example-1:
          id: 39c50b7f-c0f6-499b-bd90-e673eace2be4
          title:
            - lang: nl-NL
              langstring: Stepping Stones - 4 vwo K2 (5e Ed.)
          description:
            - lang: nl-NL
              langstring: A very nice course called Stepping Stones 5th edition for vwo 4
          image: 'https://sem.noordhoff.nl/content/stepping-365839.png'
          publicationdate: 2020-02-04
          publisher: Noordhoff BV
          streamcode: string
          version: 04-02-2020
          streams:
            - id: string
              description: string
      properties:
        id:
          type: string
          xml:
            attribute: true
          description: the unique identifier of this version of the course
        title:
          $ref: '#/components/schemas/CMI5.TextType'
        description:
          $ref: '#/components/schemas/CMI5.TextType'
        image:
          type: string
          xml:
            prefix: ecs
            namespace: 'http://www.sanoma.com/cmi5/ExtendedCourseStructureExtension.xsd'
          description: 'Additional field: URI to the image to represent this course'
        publicationdate:
          type: string
          xml:
            prefix: ecs
            namespace: 'http://www.sanoma.com/cmi5/ExtendedCourseStructureExtension.xsd'
          description: 'Additional field: Date of the publication of this version of the course. Format: YYYY-MM-DD (according to RFC3339).'
        publisher:
          type: string
          xml:
            prefix: ecs
            namespace: 'http://www.sanoma.com/cmi5/ExtendedCourseStructureExtension.xsd'
          description: 'Additional field: name of the publisher of this course'
        streamcode:
          type: string
          xml:
            prefix: ecs
            namespace: 'http://www.sanoma.com/cmi5/ExtendedCourseStructureExtension.xsd'
          description: 'Additional: the course identifier (like steppingstone-5e-4vwo)'
        version:
          type: string
          xml:
            prefix: ecs
            namespace: 'http://www.sanoma.com/cmi5/ExtendedCourseStructureExtension.xsd'
          description: 'Additional field to specify a version of this course (like #1, #2 or a date 2022-03-14)'
        streams:
          type: array
          xml:
            prefix: ecs
            namespace: 'http://www.sanoma.com/cmi5/ExtendedCourseStructureExtension.xsd'
          minItems: 0
          description: |-
            Additional: 
            A list of used streams in this course. A stream is an extra metadata field for the au's to indicate optional material, core material or other types of material ('verdieping', etc.). It helps teachers to specify individual courses for each student
          items:
            $ref: '#/components/schemas/CMI5.Stream'
      required:
        - id
        - title
        - description
    
    CMI5.Objective:
      title: CMI5.Objective
      type: object
      x-tags:
        - CourseStructure
      description: 'A learning objective.'
      properties:
        id:
          type: string
          description: 'Unique identifier to this objective. This identifier can be used within Assignable Units to refer to this objective.'
        title:
          type: string
          description: 'Title of the objective.'
        description:
          type: string
          description: 'Short description explaining the objective.'
      required:
        - id
    
    CMI5.Block:
      title: CMI5.Block
      type: object
      x-tags:
        - CourseStructure
      description: |
        A block describes a chapter or paragraph of a course. It describes title, additional description, links to objectives and the assignable learning units (au) that are part of this chapter or paragraph.
        The structure is recursive, so each block can contain other blocks. In practice the number of levels in secondary education will be 2: chapters, followed by paragraphs, containing au's.

        the description field can be used to specify more information on the chapter or paragraph, for example filling it with learning goals so the teacher and student can see the bigger picture.

        there are 3 additional, optional fields: 
        * instructions : additional instructions for the student, if any
        * study load indicator: an integer that gives a relative study load, with this you can specify that this block is expected to take a factor 2 or 3 more time to complete. this is a great help for planning. It is relative, not an absolute time in hours or days
        * image: an uri to an image that represents this chapter.   
      
      x-examples:
        example-1:
          id: 'es:7DD56457-A9F5-44AD-9AA7-E791DE57C454'
          title:
            - lang: nl-NL
              langstring: England
          description:
            - lang: nl-NL
              langstring: '-'
          blocks:
            - id: 'es:AB8EB0CB-CF3D-4961-9E6C-BF6271CE7A3F'
              title:
                - lang: nl-NL
                  langstring: Listening
              description:
                - lang: nl-NL
                  langstring: 1. Je kunt de Engelse persoonlijke voornaamwoorden gebruiken. 2. Je kunt de Engelse bezittelijke voornaamwoorden gebruiken. 3. Je kent de betekenis van Engelse woorden rondom het thema 'School'. 4. Je kunt Engelse woorden rondom het thema 'School' gebruiken.
              aus:
                - id: 'es:EA9A53C6-44DD-46CE-A223-79FA33DD8282'
                  activityType: Theorie
                  launchMethod: AnyWindow
                  moveOn: CompletedOrPassed
                  title:
                    - lang: Lesstof
                      langstring: Lesstof
                  description:
                    - lang: nl-NL
                      langstring: ...
                  url: 'https://allright.secure.malmberg.nl/deeplink/paragraph-component/es:EA9A53C6-44DD-46CE-A223-79FA33DD8282'
                  image: 'https://media.malmberg.nl/component/EA9A53C6-44DD-46CE-A223-79FA33DD8282.png'
                  streamref: core
              instructions:
                - lang: nl-NL
                  langstring: Lees de volgende paragraaf zorgvuldig door
              studyloadindicator: 3
          instructions:
            - lang: nl-NL
              langstring: In deze paragraaf leer je weer heel veel
          image: 'https://media.malmberg.nl/images/Listening.png'
          studyloadindicator: 1
      properties:
        id:
          type: string
          xml:
            attribute: true
        title:
          $ref: '#/components/schemas/CMI5.TextType'
        description:
          $ref: '#/components/schemas/CMI5.TextType'
        blocks:
          type: array
          description: 'A Block can contain Blocks and/or Assignable Units. The supplier is flexible to structure its content: e.g. A Chapter Block containing multiple Paragraph Blocks.'
          items:
            $ref: '#/components/schemas/CMI5.Block'
        aus:
          type: array
          description: 'A Block can contain Blocks and/or Assignable Units. The supplier is flexible to structure its content: e.g. Assignments and Content assignable units in a Paragraph block.'
          items:
            $ref: '#/components/schemas/CMI5.AU'
        instructions:
          $ref: '#/components/schemas/CMI5.TextType'
        image:
          type: string
          xml:
            prefix: ecs
            namespace: 'http://www.sanoma.com/cmi5/ExtendedCourseStructureExtension.xsd'
        studyloadindicator:
          type: integer
          xml:
            prefix: ecs
            namespace: 'http://www.sanoma.com/cmi5/ExtendedCourseStructureExtension.xsd'
      required:
        - id
        - title
        - description
    
    CMI5.AU:
      title: CMI5.AU
      type: object
      x-tags:
        - CourseStructure
      description: |-
        An assignable unit describes the smallest unit that is exchanged in the cmi5 format. Most of the time this is an instruction, a link to some content or exercise in the `Gebruiksomgeving digitaal leermateriaal` or `Digitaal toetssysteem` of the supplier.

        The CMI5/xAPi definition contains some meta data, an url (deep link) to start the activity and some information how to use the url.
        Important fields:

        ### activity type
        this describes how to represent or interpret the activity. In the standard this is a free field, with lots of examples how to use it.
        initially used values:
         * Oefening
         * Naslagwerk
         * Arrangement
         * Assignment
         * Test
         * Instructie
         * Theorie

        ### moveon
        This field is exchanged and mandatory but not used unless the full flow with progress is also implemented.
        Default value: _CompletedOrPassed_

        ### launchmethod
        The launchmethod describes how the content should be presented. The exact support for using launch parameters etc is not yet defined in the specification, so currently this field is ignored.
        Default value: _AnyWindow_

        ### launchParameters
        Optional information how to launch the url. The exact support for using launch parameters etc is not yet defined in the specification, so currently this field is ignored.
        Default value:empty or not present

        ## Additional fields
        there are 3 additional, optional fields: 

        * image: an uri to an image that represents this unit of learning.  
      
      x-examples:
        example-1:
          id: e19ffbe3-2411-4d1f-8aa6-14fc43c2142a
          activityType: ARRANGEMENT
          moveOn: CompletedOrPassed
          launchMethod: AnyWindow
          title:
            - lang: nl-NL
              langstring: Test Yourself
          objectives: []
          url: 'https://toegang.noordhoff.nl/8717927999997?deepLinkId=e19ffbe3-2411-4d1f-8aa6-14fc43c2142a'
          launchParameters: ''
          image: ''
          streamref: core
      properties:
        id:
          type: string
          xml:
            attribute: true
        activityType:
          type: string
          xml:
            attribute: true
        launchMethod:
          type: string
          xml:
            attribute: true
        moveOn:
          type: string
          xml:
            attribute: true
        title:
          $ref: '#/components/schemas/CMI5.TextType'
        description:
          $ref: '#/components/schemas/CMI5.TextType'
        objectives:
          type: array
          items:
            type: string
            description: 'reference to an identifier of an objective as specified in the CourseStructure object.'
        url:
          type: string
          description: 'The url (Deeplink) to the learning material in the Assignable Unit. See Documentation for further restrictions on formats of Deeplinks.'
        launchParameters:
          type: string
        image:
          type: string
          xml:
            prefix: ecs
            namespace: 'http://www.sanoma.com/cmi5/ExtendedCourseStructureExtension.xsd'
        streamref:
          type: string
          xml:
            prefix: ecs
            namespace: 'http://www.sanoma.com/cmi5/ExtendedCourseStructureExtension.xsd'
          description: 'Additional field to point to a stream in the course object to indicate that this AU is for example core material or optional material, of for a higher level.'
      required:
        - id
        - activityType
        - launchMethod
        - moveOn
        - title
        - url
    
    CMI5.Stream:
      title: CMI5.Stream
      type: object
      x-tags:
        - CourseStructure
      description: 'A Stream gives a supplier the option to define the type of Assignable unit. This can be for example be core or additional material.'
      properties:
        id:
          type: string
          description: 'The id to be referenced in an Assignable Unit.'
          xml:
            attribute: true
            prefix: ecs
            namespace: 'http://www.sanoma.com/cmi5/ExtendedCourseStructureExtension.xsd'
        description:
          type: string
          description: "Short description of the Stream."
          xml:
            prefix: ecs
            namespace: 'http://www.sanoma.com/cmi5/ExtendedCourseStructureExtension.xsd'
    
    CMI5.TextType:
      title: CMI5.TextType
      type: array
      x-tags:
        - CourseStructure
      description: |-
        This is a representation of a translatable string. Effectively an Array of strings with an attribute which language the string is in.
        NOTE : In xml this should be represented as < langstring lang="nl-NL">Hallo< /langstring>, but that is not possible in the current openAPI3 spec (see https://github.com/OAI/OpenAPI-Specification/issues/630)
      items:
        type: object
        properties:
          lang:
            type: string
            xml:
              attribute: true
          langstring:
            type: string
      xml:
        wrapped: true
      x-examples:
        example-1:
          - lang: string
            langstring: string
    
    StatusResponse:
      title: StatusResponse
      type: object
      description: 'Functional status code and status message.'
      properties:
        status:
          type: integer
          description: 'See functional status codes within the Documentation.'
        statusMessage:
          type: string
          description: 'See functional status messages within the Documentation.'
      required:
        - status

  securitySchemes:
    OAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://api.example.com/oauth2/token
          refreshUrl: https://api.example.com/oauth2/token
          scopes:
            eduv.course: 'a scope to exchange metadata about learning materials'
paths:
  
  /courses:
    parameters:
      - schema:
          type: integerstring
          nameformat: startdate-time
        in: query
        descriptionname: 'Startsince
 point for pagination of results, defaults to 0,'required: false
       examples:
          default:
            value: 0
            summary: The start point for pagination
      - schema:
          type: integer
          maximum: 100
        in: query
        name: limit
        description: 'LimitRequest ofall numberCourses ofmodified resultsafter returnedthe by page, defaults to 20 with max 100.'
        examples:
          default:
            value: 20
            summary: The default value if none is provided
          max:
            value: 100
       specified timestamp. Format: Conform openapi in ZULU time as specified in RFC 3339, section 5.6'
    summary: The largest recommended page sizeexample: "2017-07-21T17:32:28Z"
    get:
      summary: Get All Courses
      operationId: get-all-courses
      x-tags:
        - Course
      tags:
        - Leermaterialencatalogus
      description: Get all courses
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Course'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
      security:
        - OAuth2:
            - eduv.course

  /courses/{id}:
    parameters:
      - schema:
          type: string
        name: id
        in: path
        required: true
    get:
      summary: Get Course by ID
      x-tags:
        - Course
      tags:
        - Leermaterialencatalogus
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Course'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
      operationId: get-course
      description: |
        Usually the Course is found via the catalog, each product has a list of Courses that is available for a student/teacher when that product is bought. This call is used to get more information about these Courses. Moreover the call can also be used to see if there are any new versions of this Course published. The response is a Course object with basic information about the Course.
      security:
        - OAuth2:
            - eduv.course
  
  /courses/{id}/cmi5e:
    parameters:
      - schema:
          type: string
        name: id
        in: path
        required: true
    get:
      summary: Get CourseStructure by ID in CMI5e Format
      x-tags:
        - CourseStructure
      tags:
        - Leermaterialencatalogus
      responses:
        '200':
          description: OK
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/CMI5.CourseStructure'
              examples:
                example-1:
                  value:
                    course:
                      title:
                        - lang: string
                          langstring: string
                      description:
                        - lang: string
                          langstring: string
                      image: string
                      publicationdate: string
                      publisher: string
                      streamcode: string
                      version: string
                      streams:
                        - id: string
                          description: string
                    objectives:
                      - id: string
                        title: string
                        description: string
                    aus:
                      - id: string
                        activityType: string
                        moveOn: string
                        launchMethod: string
                        title:
                          - lang: string
                            langstring: string
                        objectives:
                          - string
                        url: string
                        launchParameters: string
                        image: string
                        streamref: string
                    blocks:
                      - id: string
                        title:
                          - lang: string
                            langstring: string
                        description:
                          - lang: string
                            langstring: string
                        blocks:
                          - {}
                        aus:
                          - id: string
                            activityType: string
                            moveOn: string
                            launchMethod: string
                            title:
                              - lang: string
                                langstring: string
                            objectives:
                              - string
                            url: string
                            launchParameters: string
                            image: string
                            streamref: string
                        instructions:
                          - lang: string
                            langstring: string
                        image: string
                        studyloadindicator: 0
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
      operationId: get-coursestructure-by-id
      security:
        - OAuth2:
            - eduv.course
      description: |
        The CourseStructure contains information about the course, including which chapters, paragraphs and assignable units are available, including deeplinks to the publishers playing environment so the student start that unit.
        
        The format of the response is based on the international [xAPI CMI5 CourseDefinition standard](https://github.com/AICC/CMI-5_Spec_Current/blob/quartz/v1/CourseStructure.xsd) and the [Sanoma extension](http://www.sanoma.com/cmi5/ExtendedCourseStructureExtension.xsd). This format is XML based. The response is a full CMI5 Extended Course XML (CMI5e).

        If we decide to make a JSON version then this definition would do fine, as it contains the same fields/information. This cannot be fully defined in openAPI/JSON in the same format as the xml version, but this is a close mapping for reference. See remarks at the CMI5.CourseStructure schema.

        The CMI5 standard also provides a protocol to launch assignable units in a browser and get progress on these assignable units. This is not part of the specification. The format is used to exchange meta information, not to enforce runtime. For the moment it is expected that the url's in the content work without a need to setup sessions etc. Each publisher is responsible for creating url's in such a way that single sign-on is enforced. See Documentation for guidelines for formatting of deeplinks.

x-tags:
  - name: Course
  - name: CourseStructure

...

  • 0.0.1: Eerste draft van de API op basis van bestaande documentatie.

  • 0.0.2: De volgende wijzigingen zijn gedaan:

    • Conform wijziging in architectuur de schemaVersion als attribuut verwijderd uit de berichtspecificatiesobjecten.

    • De berichtdefinitie Het object Course is bijgewerkt met de attributen studies en subjects conform dezelfde opzet als een Product uit de Catalogue API.

  • 0.0.3: Typo’s in the YAML.

  • 0.0.4: Wijzigingen naar aanleiding van RFC’s:

    • Op basis van RFC002 is de scope aangepast met een prefix eduv.. Dit stelt leveranciers in staat om onderscheid te maken tussen gegevensuitwisselingen met leveranciers binnen en buiten het Edu-V afsprakenstelsel.

    • De parameters voor paginering zijn uit de koppelvlakspecificatie verwijderd. Binnen het afsprakenstelsel zijn de afspraken hierover beschreven op de pagina paginering, sorteren en rate limiting.