QualityLink Data Source Discovery Specification

Living Standard,

Issue Tracking:
GitHub
Editor:
Colin Tück (Knowledge Innovation Centre; KIC)
Project Website:
https://quality-link.eu/
Project Reference:
Task 3.6 (Creation of a Technical Trusted List Standard)
Not Ready For Implementation

This spec is not yet ready for implementation. It exists in this repository to record the ideas and promote discussion.

Before attempting to implement this spec, please contact the editors.


Abstract

This specification describes how the QualityLink aggregator discovers data sources exposed by higher education institutions and other data providers.

1. Introduction

1.1. Status of This Document

This document is a draft specification, developed by KIC and EUF within the QualityLink project. It is currently being discussed with the QualityLink Standards Consultation Board.

1.2. Goals and Rationale

The QualityLink project aims to develop a scalable architecture that allows higher education institutions and others to publish data on their learning opportunities in different interoperable formats easily. This specification describes how data sources can be exposed by higher education institutions and other data providers, and how they can be discovered by aggregators.

1.3. Audience

This specification is intended for use by higher education institutions and other data providers that would like their data to be available for aggregation.

Secondly, it targets data aggregators. The QualityLink project will implement a data aggregator to test and demonstrate this specification in practice.

1.4. Changes

n/a

2. Key Concepts

The following key concepts and terminology are used throughout the document, as well as other QualityLink specifications:

learning opportunity

an opportunity to realise a given set of learning outcomes through a learning activity or assessment [ELM]. Offered by a higher education institution or other provider. A learning opportunity can be part of a larger one and contain smaller ones. Specific learning opportunities are courses, modules and programmes.

learning opportunity specification

the general specification of a learning opportunity, i.e. including the learning outcomes and credits. It is usually permanent and does not change from year to year or semester to semester.

learning opportunity instance

the specific offering of a learning opportunity in a specific academic term (e.g. year or semester) and specific setting (e.g. online vs face-to-face, different locations, ...). A single learning opportunity specification will usually be offered in many instances over time.

course

smallest learning opportunity that awards credits (i.e. ECTS) to the learner, either in the context of a study programme or as a self-standing offer. A course can be part of a module or programme.

module

a learning opportunity that is a group or collection of courses. A module may be part of a programme.

micro-credential

a proof of the learning outcomes that a learner has acquired following a short learning experience. These learning outcomes have been assessed against transparent standards. [CR-MC]

programme

collection of learning opportunities. Finalising a study programme usually leads to a degree (e.g. Bachelor degree, Master degree, etc.) or to another type of certificate, e.g. a micro-credential, for a shorter programme. A programme is a "top-level" learning opportunity and has no parent.

joint programme

an integrated curriculum coordinated and offered jointly by different higher education institutions, and leading to double/multiple degrees or a joint degree. [DEQAR]

education provider

any actor that provides degree programmes, micro-credentials or other learning opportunities. This may include higher education institutions as well as other providers, including employers, companies, social partners, NGOs, public authorities and others. [DEQAR]

higher education institution

an entity that has full degree awarding powers at higher education level (i.e. EQF levels 5 to 8; QF-EHEA cycle first to third) recognised by at least one national authority. [DEQAR]

other provider

an entity that provides learning opportunities, but that does not have officially-recognised authority to award degrees or other formally recognised qualifications.

data provider

an entity providing data on learning opportunities. This can be an education provider providing data on its own learning opportunities or another organisation providing data on various education providers.

aggregator

any service that harvests data from different data providers, matches and compiles the data into one single dataset. For example, the aggregator service developed within the QualityLink project.

3. User Stories

The following usage scenarios illustrate ways in which this specification might be used or desired features it should enable:

3.1. Expose data

As a higher education institution or education provider I want to advertise my data source to a Europe-wide aggregator in a secure way, but without the need for additional action or manual intervention by another organisation.

3.2. Manage data sources

As manager of an aggregator (e.g. the QualityLink consortium) I want to manage trusted sources of data providers whose data should be integrated in the QualityLink platform.

3.3. Access statistics

As a data provider I want to access a dashboard or similar to manage my data sources and get insights/stats on how my data was harvested and processed.

4. Requirements

5. Manifest File

The location of one or several data files or API endpoints (see Data Exchange spec) is indicated in a simple, standardised “manifest” file published by the data provider.

For authoritative sources and other data sources, the location of the manifest file is managed manually. For higher education institutions the location of the manifest file is auto-discovered as described in the following chapter.

The manifest file can be expressed as [JSON] or [YAML] file. The file must be a single object/mapping with at least a top-level key named sources. An additional meta key can be provided.

5.1. Data sources

sources must be an array/sequence of objects/mapping, each representing a data source of the provider. At least one data source must be specified. The following keys are supported for each source:

type Type of the data source: string, using the identifier specified in [QL-EXCH]
path File or API root: URL
version Version identifier: string (see data source tyope-specific information)
id Identifier of the data source: string
name Human-readable name or description: string
auth Authorisation: object/mapping including type and additional, access control strategy-specific parameters

Keys marked with an asterisk are required. Additional, data source type-specific keys are specified in [QL-EXCH].

5.2. Additional metadata

The meta key is optional and may be used to specify institutional identifiers. Aggregators may use this for diagnostic purposes or identify changed identifiers.

schac SCHAC code of the institution covered by the data source(s)
eterid ETER identifier, as used in the EHESO and OrgReg
deqarid DEQAR institutional identifier
did Decentralised Identifier (DID) used by the institution

5.3. JSON Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://data.quality-link.eu/schema/manifest-v1.json",
  "title": "QualityLink manifest file",
  "description": "A manifest file listing data sources on learning opportunities.",
  "type": "object",
  "properties": {
    "sources": {
      "description": "Defines one or more data sources",
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "properties": {
          "type": {
            "description": "Type of the data source: string, using the identifier specified in QualityLink Data Exchange Specification",
            "type": "string",
            "enum": [
              "elm",
              "ooapi",
              "edu-api"
            ]
          },
          "path": {
            "description": "File or API root",
            "type": "string",
            "format": "uri",
            "pattern": "^https?://"
          },
          "version": {
            "description": "Version identifier (see data source tyope-specific information)",
            "type": "string"
          },
          "id": {
            "description": "Identifier of the data source",
            "type": "string"
          },
          "name": {
            "description": "Human-readable name or description",
            "type": "string"
          },
          "auth": {
            "description": "Authorisation parameters",
            "type": "object",
            "properties": {
              "type": {
                "description": "Access control strategy required for this data source",
                "type": "string",
                "enum": [
                  "none",
                  "httpsig",
                  "httpheader",
                  "oauth2.0"
                ]
              }
            },
            "required": [
              "type"
            ]
          }
        },
        "required": [
          "type",
          "path"
        ]
      }
    },
    "meta": {
      "description": "Defines metadata about the institution providing the manifest file.",
      "type": "object",
      "properties": {
        "schac": {
          "description": "SCHAC code of the institution covered by the data source(s)",
          "type": "string"
        },
        "eterid": {
          "description": "ETER identifier, as used in the EHESO and OrgReg",
          "type": "string"
        },
        "deqarid": {
          "description": "DEQAR institutional identifier",
          "type": "string"
        },
        "did": {
          "description": "Decentralised Identifier (DID) used by the institution",
          "type": "string"
        }
      }
    }
  },
  "required": [
    "sources"
  ]
}

6. Discovery Mechanism

The specification offers two options how to auto-discover a manifest file.

higher education institutions may use either option. Aggregators must support both options.

6.1. DNS TXT Record

The higher education institution can create a DNS TXT record of the following format:

v=qldiscover1; m=[URL]

The URL must point to a manifest file.

6.2. Well-known URL

The higher education institution can place a manifest file at a URL of the form:

These locations are tried in this order and the first file found is used.

6.3. Domain Search Order

An aggregator should consider a combined list of higher education institutions appearing in one or more of the following datasets:

For each higher education institution, the aggregator attempts to fetch a manifest file from a known domain in this order:

  1. domain/host name that is the higher education institution’s SCHAC code (if available)

  2. host name of the higher education institution’s website (as indicated in OrgReg or DEQAR)

  3. website host name stripped off www or similar generic first component

  4. highest level registrable domain name determined from the website host name (i.e. public suffix \+ one further DNS component)

For each domain, both of the above mechanisms are tried.

Once a manifest file has successfully been obtained, no further domains or mechanisms are tried.

7. Security Considerations

The location and content of manifest files are not sensitive information. Access to data sources themselves can be protected as described in [QL-EXCH].

8. Examples

8.1. Manifest file

{
    "meta": {
        "schac": "example.ac.at",
        "eterid": "AT4711",
        "deqarid": "DEQARINST0815"
    },
    "sources": [
        {
            "type": "elm",
            "path": "https://data.example.org/feed/elm.ttl",
            "version": "3.2",
            "auth": {
                "type": "none"
            }
        },
        {
            "type": "ooapi",
            "path": "https://data.example.org/ooapi/v5/",
            "version": "5",
            "auth": {
                "type": "httpheader"
            },
            "id": "eua-courses-virt",
            "name": "Courses offered on the Alliance's virtual campus"
        },
        {
            "type": "edu-api",
            "path": "https://edu-api.example.org/",
            "version": "1.0",
            "auth": {
                "type": "oauth2.0",
                "token_endpoint": "https://auth.example.org/oauth2/get_token"
            },
            "name": "Experimental data source using Edu-API"
        }
    ]
}
meta:
  schac: example.ac.at
  eterid: AT4711
  deqarid: DEQARINST0815
sources:
  - type: elm
    path: https://data.example.org/feed/elm.ttl
    version: "3.2"
    auth:
      type: none
  - type: ooapi
    path: https://data.example.org/ooapi/v5/
    version: "5"
    auth:
      type: httpheader
    id: eua-courses-virt
    name: "Courses offered on the Alliance's virtual campus"
  - type: edu-api
    path: https://edu-api.example.org/
    version: "1.0"
    auth:
      type: oauth2.0
      token_endpoint: https://auth.example.org/oauth2/get_token
    name: "Experimental data source using Edu-API"

Conformance

Conformance requirements are expressed with a combination of descriptive assertions and RFC 2119 terminology. The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in the normative parts of this document are to be interpreted as described in RFC 2119. However, for readability, these words do not appear in all uppercase letters in this specification.

All of the text of this specification is normative except sections explicitly marked as non-normative, examples, and notes. [RFC2119]

Examples in this specification are introduced with the words “for example” or are set apart from the normative text with class="example", like this:

This is an example of an informative example.

Informative notes begin with the word “Note” and are set apart from the normative text with class="note", like this:

Note, this is an informative note.

Index

Terms defined by this specification

References

Normative References

[JSON]
T. Bray, Ed.. The JavaScript Object Notation (JSON) Data Interchange Format. December 2017. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc8259
[QL-EXCH]
QualityLink Consortium. Data Exchange Specification. 2025. draft. URL: https://specs.quality-link.eu/data_exchange.html
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[YAML]
Oren Ben-Kiki; Clark Evans; Ingy döt Net. YAML Ain’t Markup Language (YAML™) Version 1.2. 1 October 2009. URL: http://yaml.org/spec/1.2/spec.html

Informative References

[CR-MC]
European Union. Council Recommendation on a European approach to micro-credentials for lifelong learning and employability. 16 June 2022. 2022/C 243/02. URL: https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32022H0627(02)
[DEQAR]
European Quality Assurance Register (EQAR). DEQAR Documentation. v1.2. URL: https://docs.deqar.eu/stable/
[ELM]
European Commission. European Learning Model (ELM). v3. URL: https://europa.eu/europass/elm-browser/index.html