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"
}

codemeta.json

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?).

Edited by Hock, Martin