|
|
|
# Metadata for repositories
|
|
|
|
|
|
|
|
Deprecated: see [MetaData V0.2 documentation](../MetaData Documentation)
|
|
|
|
## Major User Story
|
|
|
|
|
|
|
|
As an instructor, I want to search for relevant material (e.g., slides, exercises) in the sharing platform. However, the metadata provided by GitLab and a full-text search might not cover all relevant information like difficulty level, license, keywords.
|
|
|
|
|
|
|
|
|
|
|
|
## General Requirements
|
|
|
|
|
|
|
|
**Remark**: This is work in progress, see [V0.2](MetaData-V0.2)
|
|
|
|
|
|
|
|
Each repository must contain either a `metadata.json` or `metadata.yml` written by the repository authors. The file should contain a `metadata_version` (currently fixed to `0.0`), to allow changes in the schema. Furthermore, `metadata`-file should include the following information to allow users to filter/search for specific metadata:
|
|
|
|
|
|
|
|
- `title`: a title for the provided material
|
|
|
|
- `description`: a brief description of the provided material
|
|
|
|
- `programming_languages`: a collection of programming languages which may be covered/used in the material
|
|
|
|
- `natural_languages`: a collection of ISO 639-1 language codes specifying the natural language of the provided material
|
|
|
|
- `keywords`: a collection of keywords describing the provided material
|
|
|
|
- `license`: the license of the material provided in the repository
|
|
|
|
- `authors` the authors
|
|
|
|
- `maintainers`: the maintainers of the repository
|
|
|
|
- `deprecated`: Is the repository content deprecated?
|
|
|
|
- `difficulty_level`: the material covers either `simple`, `medium`, or `advanced` topics
|
|
|
|
- `inspired_by`: a collection of links
|
|
|
|
|
|
|
|
Note that the keys `metadata_version`, `license`, and `keywords` are required. All other information is optional.
|
|
|
|
|
|
|
|
### Example with almost all information
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"metadata_version": "0.0",
|
|
|
|
"license": "MIT",
|
|
|
|
"title": "703078 PS Parallel Systems (Summer Semester 2020)",
|
|
|
|
"description": "This repository will provide lab material for the UIBK Parallel Programming course taught in the 4th semester of the bachelor studies in computer science.",
|
|
|
|
"keywords": [
|
|
|
|
"OpenMP",
|
|
|
|
"dependency analysis",
|
|
|
|
"parallel programming",
|
|
|
|
"performance-oriented programming"
|
|
|
|
],
|
|
|
|
"programming_languages": [
|
|
|
|
"C",
|
|
|
|
"C++"
|
|
|
|
],
|
|
|
|
"natural_languages": [
|
|
|
|
"en"
|
|
|
|
],
|
|
|
|
"authors": [
|
|
|
|
{
|
|
|
|
"name": "Philipp Gschwandtner",
|
|
|
|
"affiliation": "University Innsbruck"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"name": "Michael Plattner"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"name": "Lukas Kaltenbrunner",
|
|
|
|
"email": "lukas.kaltenbrunner@uibk.ac.at"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"difficulty_level": "medium",
|
|
|
|
"inspired_by": [
|
|
|
|
"https://github.com/philippgs/uibk_parsys_19",
|
|
|
|
"https://github.com/PeterTh/uibk_ps_os_2019"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
### Example with minimal content
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"metadata_version": "0.0",
|
|
|
|
"license": "MIT",
|
|
|
|
"keywords": [
|
|
|
|
"OpenMP",
|
|
|
|
"dependency analysis",
|
|
|
|
"parallel programming",
|
|
|
|
"performance-oriented programming"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
### Schema
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
|
|
"title": "Metadata",
|
|
|
|
"description": "A metadata description of a repository",
|
|
|
|
"type": "object",
|
|
|
|
"properties": {
|
|
|
|
"metadata_version": {
|
|
|
|
"type": "string",
|
|
|
|
"pattern": "^[0-9]\\.[0-9]$",
|
|
|
|
"description": "the metadata version"
|
|
|
|
},
|
|
|
|
"title": {
|
|
|
|
"type": "string",
|
|
|
|
"description": "a title for the provided material."
|
|
|
|
},
|
|
|
|
"description": {
|
|
|
|
"type": "string",
|
|
|
|
"description": "a brief description of the provided material."
|
|
|
|
},
|
|
|
|
"programming_languages": {
|
|
|
|
"description": "a collection of programming languages which may be covered/used in the material",
|
|
|
|
"$ref": "#/definitions/programming_languages"
|
|
|
|
},
|
|
|
|
"natural_languages": {
|
|
|
|
"description": "a collection of ISO 639-1 language codes specifying the natural language of the provided material",
|
|
|
|
"type": "array",
|
|
|
|
"items": {
|
|
|
|
"type": "string",
|
|
|
|
"minLength": 2,
|
|
|
|
"maxLength": 2
|
|
|
|
},
|
|
|
|
"uniqueItems": true
|
|
|
|
},
|
|
|
|
"keywords": {
|
|
|
|
"$ref": "#/definitions/keywords"
|
|
|
|
},
|
|
|
|
"license": {
|
|
|
|
"description": "the license of the material provided in the repository",
|
|
|
|
"type": "string"
|
|
|
|
},
|
|
|
|
"authors": {
|
|
|
|
"description": "the authors",
|
|
|
|
"type": "array",
|
|
|
|
"items": {
|
|
|
|
"$ref": "#/definitions/person"
|
|
|
|
},
|
|
|
|
"uniqueItems": true
|
|
|
|
},
|
|
|
|
"maintainers": {
|
|
|
|
"description": "the maintainers",
|
|
|
|
"type": "array",
|
|
|
|
"items": {
|
|
|
|
"$ref": "#/definitions/person"
|
|
|
|
},
|
|
|
|
"uniqueItems": true
|
|
|
|
},
|
|
|
|
"deprecated": {
|
|
|
|
"description": "Is the repository content deprecated?",
|
|
|
|
"type": "boolean"
|
|
|
|
},
|
|
|
|
"difficulty_level": {
|
|
|
|
"description": "the material covers either simple, medium, or advanced topics",
|
|
|
|
"$ref": "#/definitions/difficulty_level"
|
|
|
|
},
|
|
|
|
"inspired_by": {
|
|
|
|
"description": "a collection of links",
|
|
|
|
"$ref": "#/definitions/inspired_by"
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"required": [
|
|
|
|
"metadata_version",
|
|
|
|
"license",
|
|
|
|
"keywords"
|
|
|
|
],
|
|
|
|
"additionalProperties": false,
|
|
|
|
"definitions": {
|
|
|
|
"person": {
|
|
|
|
"description": "a person",
|
|
|
|
"type": "object",
|
|
|
|
"properties": {
|
|
|
|
"name": {
|
|
|
|
"description": "the full name of a person",
|
|
|
|
"type": "string"
|
|
|
|
},
|
|
|
|
"affiliation": {
|
|
|
|
"description": "the affiliation of a person",
|
|
|
|
"type": "string"
|
|
|
|
},
|
|
|
|
"email": {
|
|
|
|
"description": "the email of a person",
|
|
|
|
"type": "string",
|
|
|
|
"format": "email"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"keywords": {
|
|
|
|
"description": "a collection of keywords describing the provided material",
|
|
|
|
"type": "array",
|
|
|
|
"items": {
|
|
|
|
"type": "string"
|
|
|
|
},
|
|
|
|
"minItems": 1,
|
|
|
|
"uniqueItems": true
|
|
|
|
},
|
|
|
|
"programming_languages": {
|
|
|
|
"type": "array",
|
|
|
|
"items": {
|
|
|
|
"type": "string"
|
|
|
|
},
|
|
|
|
"uniqueItems": true
|
|
|
|
},
|
|
|
|
"difficulty_level": {
|
|
|
|
"enum": [
|
|
|
|
"simple",
|
|
|
|
"medium",
|
|
|
|
"advanced"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"inspired_by": {
|
|
|
|
"type": "array",
|
|
|
|
"items": {
|
|
|
|
"type": "string",
|
|
|
|
"format": "uri"
|
|
|
|
},
|
|
|
|
"uniqueItems": true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
``` |
|
|
\ No newline at end of file |