Indexers will translate GitHub/Gitlab/Gogs/Gitea/...'s API response into this ontology.
The grammar itself would mostly likely be JSON-LD so it is compatible with our other metadata (CodeMeta/schema.org)
Current options:
* create our own
* pick an existing forge's ontology, and map everything to it -> this would eventually turn into inventing our own ontology anyway
* [[ https://forgefed.org/vocabulary.html | ForgeFed's ontology ]] (and ActivityPub) -> not very suitable for us; at the moment it's a disjoint set from what we want (ForgeFed only cares about issues and PRs)
* GHTorrent -> I am told they are working on a generic way to represent data that isn't tied to GitHub, but I cannot find it
* schema.org (not codemeta, as it is only meant to describe source code and applications, not repositories, which are different objects)
* Wikidata (eg. https://www.wikidata.org/wiki/Property:P9100 )
* DOAP
Namespace prefixes used below:
* as = https://www.w3.org/ns/activitystreams
* codemeta = https://codemeta.github.io/terms/
* doap = http://usefulinc.com/ns/doap#
* forge = https://forgefed.org/ns
* schema = http://schema.org
| Description | [[ https://docs.github.com/en/rest/repos/repos#get-a-repository | GitHub ]] (no NS) | [[ https://docs.gitlab.com/ee/api/projects.html#get-single-project | Gitlab ]] (no NS) | [[ https://try.gitea.io/api/swagger#/repository/repoGet | Gitea ]] (no NS) | [[ https://schema.org/docs/schemas.html | schema.org ]] / [[ https://codemeta.github.io/terms/ | Codemeta ]] | [[ https://www.wikidata.org/wiki/Wikidata:Database_reports/List_of_properties/all | Wikidata ]] | [[ http://usefulinc.com/ns/doap | DOAP ]] | [[ https://forgefed.peers.community/vocabulary.html | ForgeFed ]] (and [[ https://www.w3.org/ns/activitystreams | ActivityStreams ]]) | libraries.io (no NS) |
| -- | -- | -- | -- | -- | -- | -- | -- | -- |
| Name and description |
| -- |
| Project name | name | name | name / full_name | schema:name | relies on RDF | relies on RDF + doap:name | as:name |
| Project avatar | | | avatar_url | schema:image | [[ https://www.wikidata.org/wiki/Property:P18 | P18 ]] (image) | | | logo_url
| Owner name | owner.login | namespace.name | | | | | |
| Owner avatar | owner.avatar_url | namespace.avatar_url | | | | | |
| Owner homepage | ? | ? | | | | | |
| description | description | description | description | schema:description | relies on RDF | doap:shortdesc + doap:description | as:description (not forge:description!) | description
| | homepage | | website | schema:url | [[ https://www.wikidata.org/wiki/Property:P2699 | P2699 ]] (URL) [[ https://www.wikidata.org/wiki/Property:P856 | P856 ]] (official website, less accurate but more popular) | doap:homepage + old-homepage | | homepage
| Tags/labels | topics | topics | | schema:keywords | [[ https://www.wikidata.org/wiki/Property:P9100 | P9100 ]] (Github topic) | | | keywords
| | | | | schema:applicationCategory + schema:applicationSubcategory | | doap:category | |
| URL to clone/checkout the repo | clone_url | ssh_url_to_repo / http_url_to_repo | clone_url | | [[ https://www.wikidata.org/wiki/Property:P1324 | P1324 ]] (source code repository) (kind of) | doap:repository -> (doap:anon-root / doap:location) | forge:cloneUri |
| Dates |
| -- |
| | created_at | created_at | created_at | schema:dateCreated | [[ https://www.wikidata.org/wiki/Property:P571 | P571 ]] (inception) | doap:created | | created_at
| | updated_at | last_activity_at | updated_at | schema:dateModified (kind of) | | | as:updated | updated_at
| | pushed_at | | | schema:dateModified (kind of) | | | (doesn't make sense in its data model) | pushed_at
| | | | | schema:datePublished | [[ https://www.wikidata.org/wiki/Property:P577 | P577 ]] (publication date) | | as:published |
| | | marked_for_deletion_on | | | | | |
| Relationship with other repositories + current status
| -- |
| whether it's a fork | fork | | fork | | | | |
| what it's a fork of | parent + source | | | schema:isBasedOn | [[ https://www.wikidata.org/wiki/Property:P144 | P144 ]] (based on) | | forge:forkedFrom |
| number of forks | forks_count | forks_count | forks_count | | | | forge:forks -> as:totalItems | forks (on projects) / forks_count (on repositories)
| list of forks | | | | | | | forge:forks |
| Whether the repository is disabled | archived | archived | archived | | | | [[ https://codeberg.org/ForgeFed/ForgeFed/issues/147 | being discussed ]] |
| | | | empty | | | | |
| whether it's a mirror | | mirror | mirror | | | | |
| | | | mirror_interval | | | | |
| | | | mirror_updated | | | | |
| what it is a mirror of | mirror_url ([[ https://github.com/isaacs/github/issues/415 | deprecated ]]) | (no API) | original_url | | | | [[ https://codeberg.org/ForgeFed/ForgeFed/pulls/148 | being discussed ]] | mirror_url
| Whether this is a template repository | is_template | template | | | | | |
| Presumably, what template repository was used to create this one | template_repository | | | | | | |
| | visibility (private/internal/public) | visibility (private/internal/public) | internal + private (booleans) | | | | |
| Social features |
| -- |
| | stargazers_count | star_count | stars_count | schema:interactionStatistic -> filter on schema:LikeAction -> schema:userInteractionCount | | | as:likes -> as:totalItems | stargazers_count
| | watchers_count | | watchers_count | schema:interactionStatistic -> filter on schema:FollowAction -> schema:userInteractionCount | | | as:followers -> as:totalItems | subscribers_count
| | watchers | | | | | | as:followers |
| | open_issues / open_issues_count | open_issues_count | open_issues_count | | | | | open_issues_count
| | | | open_pr_counter | | | | |
| | (always true if repo not archived) | merge_request_enabled | has_pull_requests | | | | |
| Configuration |
| -- |
| | default_branch | default_branch | default_branch | | | | | default_branch
| | has_issues | | has_issues | | | | | has_issues
| | | | | codemeta:issueTracker | [[ https://www.wikidata.org/wiki/Property:P1401 | P1401 ]] bug tracking system | doap:bug-database | forge:ticketsTrackedBy / forge:sendPatchesTo |
| | | | internal_tracker.* + external_tracker.* | | | | |
| | | | | | | doap:mailing-list | |
| | | | | | | doap:support-forum | |
| | | | | | | doap:developer-forum | |
| | | jobs_enabled | | | | | |
| | | snippets_enabled | | | | | |
| | | can_create_merge_request_in | | | | | |
| | | resolve_outdated_diff_discussions | | | | | |
| (different semantics) | | merge_method | allow_merge_commits + allow_rebase + allow_rebase_explicit + allow_squash_merge + default_merge_style | | | | |
| | | squash_option | | | | | |
| | has_projects | | has_projects | | | | |
| | has_downloads | | | | | | |
| | has_wiki | wiki_enabled | has_wiki | | | | | has_wiki
| | | | external_wiki.* | | | | |
| | has_pages | | | | | | |
| | | merge_commit_template | | | | | |
| | | squash_commit_template | | | | | |
| Statistics |
| -- |
| not documented | size | | | | | | |
| not documented | | | size | | | | |
| not documented | | | | | | | | size
| | | statistics.commit_count | | | | | |
| | | statistics.storage_size | | | | | |
| | | statistics.repository_size | | | | | |
| | | statistics.<a few more> | | | | | |
| | | | release_counter | | | | |
| License |
| -- |
| SPDX id | license.spdx_id | | | | | | |
| license URL (usually on a small set of domains) | by dereferencing license.url then getting html_url | license.html_url / license.source_url | | schema:license | | | |
| license URI | | | | schema:license | [[ https://www.wikidata.org/wiki/Property:P275 | P275 ]] (copyright license) | doap:license | |
| possibly inconsistent | | license.nickname | | | | | |
| possibly inconsistent | license.key | license.key | | | | | |
| possibly inconsistent | license.name | license.name | | | | | |
| | | | | | | | | licenses / licenses_normalized / repository_license
| Other mined metadata |
| -- |
| programming language | language | | language | schema:programmingLanguage | [[ https://www.wikidata.org/wiki/Property:P277 | P277 ]] (programming language) | doap:programming-language | | language
| | | readme_url | | codemeta:readme | | | |
| readme filename | | | | | | | | has_readme