Every framework's top-level enumerated unit is an instance of
cybed:OrganizingUnit (subClassOf skos:Concept), the cross-framework
abstract that lets one SPARQL query reach every framework's parent
units uniformly. Workforce frameworks (NICE, DCWF, ENISA ECSF) where the
unit is genuinely a work role or work profile additionally assert
cybed:Role (itself subClassOf cybed:OrganizingUnit); pass is_role = TRUE for those. Non-workforce frameworks (SFIA enumerates skills;
Cyber.org K-12, CSTA, CSEC2017, DigComp 3.0 enumerate other organizing
units) assert cybed:OrganizingUnit only.
Each unit also carries a per-framework subtype (e.g., nice:WorkRole,
sfia:Skill, csta:StandardGroup, cyberorg:StandardGroup).
Cross-framework queries target cybed:OrganizingUnit; framework-specific
queries target the per-framework subtype; workforce-only queries target
cybed:Role.
For backward-compatible workforce-only construction, see build_role_node().
Arguments
- unit_id
Character, framework-local identifier (e.g.,
"OG-WRL-015","PROG","3A-AP-13").- unit_name
Character, human-readable name.
- framework_prefix
Character, Tier 2 prefix.
- framework_subtype
Character, the framework's specific subtype name (e.g.,
"WorkRole","Skill","StandardGroup","StandardGroup","KnowledgeArea","CompetenceArea").- is_role
Logical, whether to additionally assert
cybed:Role.TRUEfor NICE work roles, DCWF work roles, and ENISA ECSF profiles;FALSEfor SFIA skills, Cyber.org K-12 grade-band cells, CSTA level x concept cells, CSEC2017 Knowledge Areas, and DigComp competence areas. Defaults toFALSE.- description
Character, unit description text.
- element_ids
Character vector of role-element identifiers to link via
cybed:hasElement.- framework_id
Character, framework identifier (e.g.,
"nice-v2") to populatecybed:partOf.- metadata
Named list, optional additional fields to include.
- unit_iri_prefix
Character, optional discriminator inserted in front of
unit_idin the minted IRI, so the unit becomes{framework_prefix}:{unit_iri_prefix}{unit_id}instead of{framework_prefix}:{unit_id}. Use it when a framework numbers its units and its statements out of one id space, which makes a unit IRI and a statement IRI collide and fuses two nodes into one. DCWF numbers work roles and task/KSA statements from the same range, and Cyber.org K-12 names a grade-band cell after the standard it holds; both are minted with a prefix for that reason. When a prefix is supplied the unit's own printed code is retained as aschema:identifierliteral, so nothing the IRI used to carry is lost. Defaults toNULL, which mints the bare IRI and adds no literal: existing behaviour for every other framework and for a user's own.
Examples
# Workforce framework: assert cybed:Role.
role <- build_organizing_unit_node(
unit_id = "OG-WRL-015",
unit_name = "Cybersecurity Architecture",
framework_prefix = "nice",
framework_subtype = "WorkRole",
is_role = TRUE,
description = "Designs enterprise security architectures.",
element_ids = c("T0001", "K0001"),
framework_id = "nice-v2"
)
role[["@type"]]
#> [1] "nice:WorkRole" "cybed:Role" "cybed:OrganizingUnit"
# c("nice:WorkRole", "cybed:Role", "cybed:OrganizingUnit")
# Non-workforce framework: cybed:OrganizingUnit only.
bucket <- build_organizing_unit_node(
unit_id = "3A-IC",
unit_name = "Level 3A / Impacts of Computing",
framework_prefix = "csta",
framework_subtype = "StandardGroup",
is_role = FALSE,
framework_id = "csta-2017"
)
bucket[["@type"]]
#> [1] "csta:StandardGroup" "cybed:OrganizingUnit"
# c("csta:StandardGroup", "cybed:OrganizingUnit")
# A framework whose unit ids and statement ids share one space.
cell <- build_organizing_unit_node(
unit_id = "K-2.SEC.AUTH",
unit_name = "K-2 / Security / Authentication",
framework_prefix = "cyberorg",
framework_subtype = "StandardGroup",
unit_iri_prefix = "cell-"
)
cell[["@id"]]
#> cyberorg:cell-K-2.SEC.AUTH
cell[["schema:identifier"]]
#> [1] "K-2.SEC.AUTH"
