Package metadata and Codemeta
Following the FAIR standards, we should strive to provide correct and plentiful (machine-readable) metadata.
The Codemeta project is a json-ld based schema for software.
The project page is not too helpful, the generator can be used to create the file manually.
There are however projects, that try to crawl a project / repo for the necessary metadata, like codemetapy and codemeta-harvester.
Codemetapy ends in errors for plotID, but the harvester does create a valid file:
{
"@context": [
"https://raw.githubusercontent.com/codemeta/codemeta/2.0/codemeta.jsonld",
"https://w3id.org/software-iodata",
"https://raw.githubusercontent.com/schemaorg/schemaorg/main/data/releases/13.0/schemaorgcontext.jsonld",
"https://w3id.org/software-types"
],
"@id": "https://git.rwth-aachen.de/plotid/plotid_python.git",
"@type": "SoftwareSourceCode",
"applicationCategory": "Scientific/Engineering > Visualization",
"audience": {
"@id": "/audience/science-research",
"@type": "Audience",
"audienceType": "Science/Research"
},
"author": {
"@id": "/person/attr-plotid.__author__",
"@type": "Person",
"email": "nfdi4ing@fst.tu-darmstadt.de",
"familyName": "plotid.__author__",
"givenName": "attr:"
},
"codeRepository": "https://git.rwth-aachen.de/plotid/plotid_python.git",
"contributor": [
{
"@id": "/person/nugget",
"@type": "Person",
"email": "nugget@computerwerk.org",
"familyName": "",
"givenName": "nugget",
"position": 1
},
{
"@id": "/person/hannes-mayr",
"@type": "Person",
"email": "hannes.mayr@stud.tu-darmstadt.de",
"familyName": "Mayr",
"givenName": "Hannes",
"position": 2
},
{
"@id": "/person/manuela.richter",
"@type": "Person",
"email": "manuela.richter@tu-darmstadt.de",
"familyName": "",
"givenName": "manuela.richter",
"position": 3
},
{
"@id": "/person/martin-hock",
"@type": "Person",
"email": "martin.hock@fst.tu-darmstadt.de",
"familyName": "Hock",
"givenName": "Martin",
"position": 4
},
{
"@id": "/person/jan-lemmer",
"@type": "Person",
"email": "jan.lemmer@fst.tu-darmstadt.de",
"familyName": "Lemmer",
"givenName": "Jan",
"position": 5
}
],
"dateCreated": "2021-07-20T08:54:08Z+0000",
"dateModified": "2022-10-12T19:12:35Z+0200",
"description": "The plotID toolkit supports researchers in tracking and storing relevant data in plots. Plots are labelled with an ID and the corresponding data is stored.",
"developmentStatus": "https://www.repostatus.org/#concept",
"identifier": "data",
"issueTracker": "https://git.rwth-aachen.de/plotid/plotid_python/-/issues",
"keywords": [
"Python",
"RDM"
],
"license": "http://spdx.org/licenses/Apache-2.0",
"maintainer": {
"@id": "/person/attr-plotid.__author__",
"@type": "Person",
"email": "nfdi4ing@fst.tu-darmstadt.de",
"familyName": "plotid.__author__",
"givenName": "attr:"
},
"name": "plotID",
"operatingSystem": "OS Independent",
"programmingLanguage": "Python",
"readme": "https://git.rwth-aachen.de/plotid/plotid_python/blob//README.md",
"runtimePlatform": [
"Python",
"Python 3",
"Python 3 Only",
"Python 3.10"
],
"softwareRequirements": [
{
"@id": "/dependency/pillow",
"@type": "SoftwareApplication",
"identifier": "Pillow",
"name": "Pillow",
"runtimePlatform": "Python 3"
},
{
"@id": "/dependency/coverage",
"@type": "SoftwareApplication",
"identifier": "coverage",
"name": "coverage",
"runtimePlatform": "Python 3"
},
{
"@id": "/dependency/matplotlib",
"@type": "SoftwareApplication",
"identifier": "matplotlib",
"name": "matplotlib",
"runtimePlatform": "Python 3"
},
{
"@id": "/dependency/myst-parser",
"@type": "SoftwareApplication",
"identifier": "myst-parser",
"name": "myst-parser",
"runtimePlatform": "Python 3"
},
{
"@id": "/dependency/numpy",
"@type": "SoftwareApplication",
"identifier": "numpy",
"name": "numpy",
"runtimePlatform": "Python 3"
},
{
"@id": "/dependency/qrcode",
"@type": "SoftwareApplication",
"identifier": "qrcode",
"name": "qrcode",
"runtimePlatform": "Python 3"
},
{
"@id": "/dependency/sphinx",
"@type": "SoftwareApplication",
"identifier": "sphinx",
"name": "sphinx",
"runtimePlatform": "Python 3"
},
{
"@id": "/dependency/sphinx-autoapi",
"@type": "SoftwareApplication",
"identifier": "sphinx-autoapi",
"name": "sphinx-autoapi",
"runtimePlatform": "Python 3"
},
{
"@id": "/dependency/sphinx-rtd-theme",
"@type": "SoftwareApplication",
"identifier": "sphinx-rtd-theme",
"name": "sphinx-rtd-theme",
"runtimePlatform": "Python 3"
}
],
"url": [
"https://git.rwth-aachen.de/plotid/plotid_python",
"https://git.rwth-aachen.de/plotid/plotid_python.git"
],
"version": "0.2.1"
}
We can see, that many entries are taken from the PyPI repository, which in turn gets entries from the setup.py /setup.cfg / pyproject.toml.
Some of those entries are linked attributes, which did not get evaluated correctly when building the package for PyPI (author = plotid.author) and others I don't even know how they are generated (id?).