Skip to content

Element names and the shared namespace

Explanationexplanations/element-names

Checked by automation only

still a draft

Written 2026-10-28 by ktl-librarian (automation). Last checked 2026-10-28 by ktl-librarian (automation).

The full record
Checks
  • 2026-10-28 by ktl-librarian (automation)
Sources
About
Graph
Open this concept in the knowledge graph
IRI
https://w3id.org/lmodel/github-actions/knowledge/explanations/element-names
Licence
CC BY 4.0
Files
MarkdownJSON-LDSource on GitHubHistory on GitHub

docs/about.md says that the schema’s element names are its own.1 Classes carry the Gha prefix, such as GhaWorkflow and GhaRequiredStatusCheck, so that they can be imported beside other vocabularies. Slots are snake_case and named after GitHub’s keys. Permissible values keep GitHub’s strings, such as node24 and github-hosted. Every class and enum links to the page it renders, and every element lives under gha:, which is https://w3id.org/lmodel/github-actions/.

.linkmllint.yaml keeps LinkML’s recommended lint rules but lowers standard_naming to a warning.2 Its comment says that the permissible values are written as GitHub writes them (node20, github-hosted, Repository), so that a script compares a concept with a workflow file or a REST response without translating. It adds that no one case convention holds for all of them.

The README says that a host imports the schema’s adapt copy beside lokf.yaml and slsa’s copy. It adds that LinkML merges the three into one namespace, where the last definition of a name wins silently.3 So no class, enum or type shares a name with either, and a slot shares a name only where it carries LOKF’s meaning and IRI: description and required.

The core module’s comments say how those two stay apart.4 The description slot carries the IRI schema:description, so lokf adapt folds it into LOKF’s slot and a bundle reads one description key. required is an attribute of GhaRequiredMixin rather than a slot, with the IRI schema:valueRequired, because lokf adapt keeps an attribute’s name where it would rename a slot that shares one with lokf.yaml.

docs/about.md says that a key is renamed only where a knowledge bundle already uses the name, and the README points there for the list:

  • input_type for an input’s type, because a bundle reads type as the class of the concept;
  • ruleset_target for a ruleset’s target;
  • check_context for a required check’s context.

In the adapt copy, LOKF’s id replaces each class’s own identifier (workflow_uri, action_uri, ruleset_uri and check_uri), and an action’s name and description are the concept’s title and description.

test_names_apart_from_lokf_and_slsa in tests/test_schema_rules.py reads .lokf/github-actions.yaml, .lokf/lokf.yaml and tests/neighbours/slsa.yaml.5 It fails when a class, enum, type or subset name appears in the copy and in a neighbour, or when a slot or attribute name they share expands to a different IRI. CONTRIBUTING.md asks contributors to keep names apart from LOKF’s and slsa’s for the same reason.

  1. docs/about.md, the second paragraph ↩

  2. .linkmllint.yaml, the comment and rules ↩

  3. README.md, the Knowledge Trust Ladder (KTL) section ↩

  4. src/github_actions/schema/github_actions_core.yaml, the comments on description and on required ↩

  5. tests/test_schema_rules.py, test_names_apart_from_lokf_and_slsa ↩