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.34

schemaVersion: 0.0.34

Datum

19 April 27 September 2024

Auteur

Werkgroep Combineren en arrangeren

Acties

  • Geen openstaande acties

...

Gegevensdienst

Leermaterialen

Scopes

  • eduv.course

Objecten

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.

...

Open api
filternone
operationsSorteralpha
supportedSubmitMethodsnone
tagsSorteralpha
showDownloadButtontrue
openapi: 3.0.0
info:
  title: Course API
  version: '0.0.34'
  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.34
    
    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 secondary 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:  description: 'Request all Courses modified after the specified timestamp. defaultFormat: Conform openapi in ZULU time as specified in RFC 3339, section 5.6'
value: 0       example: "2017-07-21T17:32:28Z"
    summaryget:
The start point for pagination  summary: Get All Courses
 - schema:    operationId: get-all-courses
     type x-tags:
integer        - Course
 maximum: 100         in: query
        name: limit
        description: 'Limit of number of results returned by page, defaults to 20 with max 100.'
        examples:
          default:
            value: 20
            summary: The default value if none is provided
          max:
            value: 100
            summary: The largest recommended page size
    get:
      summary: Get All Courses
      operationId: get-all-courses
      x-tagstags:
        - 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 objecten.

    • 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.