Element names and the shared namespace
explanations/element-namesChecked 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)
- 2026-10-28 by
- 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
Element names and the shared namespace
Section titled “Element names and the shared namespace”The names GitHub gives
Section titled “The names GitHub gives”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.
Three schemas in one namespace
Section titled “Three schemas in one namespace”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_typefor an input’stype, because a bundle readstypeas the class of the concept;ruleset_targetfor a ruleset’starget;check_contextfor a required check’scontext.
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.
How the rule is checked
Section titled “How the rule is checked”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.