Skip to contents

[Stable]

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

Usage

build_organizing_unit_node(
  unit_id,
  unit_name,
  framework_prefix,
  framework_subtype,
  is_role = FALSE,
  description = NA_character_,
  element_ids = character(0),
  framework_id = NA_character_,
  metadata = list(),
  unit_iri_prefix = NULL
)

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. TRUE for NICE work roles, DCWF work roles, and ENISA ECSF profiles; FALSE for SFIA skills, Cyber.org K-12 grade-band cells, CSTA level x concept cells, CSEC2017 Knowledge Areas, and DigComp competence areas. Defaults to FALSE.

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 populate cybed:partOf.

metadata

Named list, optional additional fields to include.

unit_iri_prefix

Character, optional discriminator inserted in front of unit_id in 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 a schema:identifier literal, so nothing the IRI used to carry is lost. Defaults to NULL, which mints the bare IRI and adds no literal: existing behaviour for every other framework and for a user's own.

Value

Named list (JSON-LD node).

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"