AFMRO — Competency Questions
Workshop: AI-Assisted Ontology Engineering — KGC 2026
Author: Dougal Watt, Graph Research Labs
Twelve competency questions covering the canonical use cases of the
Aircraft Fleet Mission Readiness Ontology. Each CQ has:
- the plain-language question
- the use case it serves
- the ontology elements it exercises
- a SPARQL skeleton against the CLEAN ontology
The SPARQL skeletons are intentionally sketches; refine them when
generating tests via Artefact 5 in the workshop handout.
Prefixes:
PREFIX afmro:
PREFIX gist:
PREFIX rdf:
PREFIX rdfs:
PREFIX skos:
PREFIX xsd:
================================================================
CQ1 — Which aircraft are currently operated by Squadron X?
----------------------------------------------------------------
Use case: morning standup, fleet attribution.
Elements: Aircraft, Squadron, operatedBy.
Skeleton:
SELECT ?aircraft WHERE {
?aircraft a afmro:Aircraft ;
afmro:operatedBy ?sq .
?sq skos:prefLabel "Squadron X"@en .
}
================================================================
CQ2 — Which aircraft of category F-35A are mission-ready right now?
----------------------------------------------------------------
Use case: scrambling decision support.
Elements: Aircraft, AircraftCategory (F-35A), ReadinessState,
ReadinessLevel (MissionReady), gist:isCategorizedBy, hasReadiness.
Skeleton:
SELECT ?aircraft WHERE {
?aircraft a afmro:Aircraft ;
gist:isCategorizedBy afmro:F-35A ;
afmro:hasReadiness ?rs .
?rs gist:isCategorizedBy afmro:MissionReady .
}
================================================================
CQ3 — For each squadron, how many of its aircraft are mission-ready?
----------------------------------------------------------------
Use case: command-level readiness dashboard.
Elements: Squadron, operatedBy, ReadinessState, MissionReady.
Skeleton:
SELECT ?sq (COUNT(?aircraft) AS ?ready) WHERE {
?aircraft afmro:operatedBy ?sq ;
afmro:hasReadiness ?rs .
?rs gist:isCategorizedBy afmro:MissionReady .
} GROUP BY ?sq
================================================================
CQ4 — Which aircraft hold the air-to-ground capability?
----------------------------------------------------------------
Use case: capability-driven mission planning.
Elements: Aircraft, Capability, CapabilityCategory (AirToGround),
hasCapability, gist:isCategorizedBy.
Skeleton:
SELECT ?aircraft WHERE {
?aircraft afmro:hasCapability ?cap .
?cap gist:isCategorizedBy afmro:AirToGround .
}
================================================================
CQ5 — Which mission plans require capabilities not currently held
by any operational aircraft in their assigned squadron?
----------------------------------------------------------------
Use case: capability-gap analysis pre-mission.
Elements: MissionPlan, requiresCapability, CapabilityCategory,
Aircraft, hasCapability, operatedBy. Multi-hop, exposes
property-direction errors immediately.
Skeleton:
SELECT ?plan ?missingCap WHERE {
?plan a afmro:MissionPlan ;
afmro:requiresCapability ?missingCap ;
afmro:planFor ?mission .
?mission afmro:hasDirectParticipant ?aircraft .
?aircraft afmro:operatedBy ?sq .
FILTER NOT EXISTS {
?ac2 afmro:operatedBy ?sq ;
afmro:hasCapability ?cap2 .
?cap2 gist:isCategorizedBy ?missingCap .
}
}
================================================================
CQ6 — Which components of aircraft AC-001 have been affected by
maintenance events in the last 30 days?
----------------------------------------------------------------
Use case: maintenance trend tracking.
Elements: Aircraft, afmro:hasDirectPart, Component, MaintenanceEvent,
affectsAircraft, gist:occursIn, gist:TimeInterval.
Skeleton:
SELECT ?component ?event WHERE {
afmro:AC-001 afmro:hasDirectPart ?component .
?event a afmro:MaintenanceEvent ;
afmro:affectsAircraft afmro:AC-001 ;
gist:occursIn ?ti .
?ti gist:startDateTime ?start .
FILTER (?start >= "2026-03-28T00:00:00Z"^^xsd:dateTime)
}
================================================================
CQ7 — Which mission plans were drafted but never executed?
----------------------------------------------------------------
Use case: planning effectiveness review. Critically depends on the
plan/occurrence distinction (gist:Task vs gist:Event).
Elements: MissionPlan, planFor, Mission, gist:occursIn.
Skeleton:
SELECT ?plan WHERE {
?plan a afmro:MissionPlan ;
afmro:planFor ?mission .
FILTER NOT EXISTS {
?mission gist:occursIn ?ti .
}
}
================================================================
CQ8 — Which aircraft are in non-mission-ready state and what are
their open maintenance events?
----------------------------------------------------------------
Use case: sustainment work-list generation.
Elements: Aircraft, hasReadiness, NonMissionReady,
MaintenanceEvent, affectsAircraft.
Skeleton:
SELECT ?aircraft ?event WHERE {
?aircraft afmro:hasReadiness ?rs .
?rs gist:isCategorizedBy afmro:NonMissionReady .
OPTIONAL {
?event a afmro:MaintenanceEvent ;
afmro:affectsAircraft ?aircraft .
FILTER NOT EXISTS { ?event gist:occursIn/gist:hasEnd ?end . }
}
}
================================================================
CQ9 — Which crews are currently assigned to mission-ready
aircraft of squadron X?
----------------------------------------------------------------
Use case: crew duty assignment.
Elements: Crew, Aircraft, afmro:assignedTo, operatedBy,
ReadinessState, MissionReady.
Skeleton:
SELECT ?crew ?aircraft WHERE {
?crew a afmro:Crew ;
afmro:assignedTo ?aircraft .
?aircraft afmro:operatedBy ?sq ;
afmro:hasReadiness ?rs .
?sq skos:prefLabel "Squadron X"@en .
?rs gist:isCategorizedBy afmro:MissionReady .
}
================================================================
CQ10 — How many sorties were flown by aircraft of category F-22
during a given month?
----------------------------------------------------------------
Use case: utilisation reporting.
Elements: Sortie, afmro:hasDirectParticipant, Aircraft, gist:isCategorizedBy,
F-22, gist:occursIn.
Skeleton:
SELECT (COUNT(?sortie) AS ?n) WHERE {
?sortie a afmro:Sortie ;
afmro:hasDirectParticipant ?aircraft ;
gist:occursIn ?ti .
?aircraft gist:isCategorizedBy afmro:F-22 .
?ti gist:startDateTime ?start .
FILTER (?start >= "2026-04-01T00:00:00Z"^^xsd:dateTime
&& ?start < "2026-05-01T00:00:00Z"^^xsd:dateTime)
}
================================================================
CQ11 — Which bases currently host more aircraft than their
operating squadrons can crew?
----------------------------------------------------------------
Use case: basing/posture review. Aggregation across multiple hops.
Elements: Base, Aircraft, stationedAt, Squadron, operatedBy, Crew,
afmro:assignedTo.
Skeleton:
SELECT ?base (COUNT(DISTINCT ?ac) AS ?aircraftCount)
(COUNT(DISTINCT ?crew) AS ?crewCount)
WHERE {
?ac afmro:stationedAt ?base ;
afmro:operatedBy ?sq .
OPTIONAL {
?crew afmro:assignedTo ?ac .
}
} GROUP BY ?base
HAVING (?aircraftCount > ?crewCount)
================================================================
CQ12 — Which mission plans require a capability that no aircraft
in the entire fleet currently holds?
----------------------------------------------------------------
Use case: fleet-level capability gap. Worst-case capability shortfall.
Elements: MissionPlan, requiresCapability, CapabilityCategory,
Aircraft, hasCapability.
Skeleton:
SELECT ?plan ?missingCap WHERE {
?plan afmro:requiresCapability ?missingCap .
FILTER NOT EXISTS {
?aircraft afmro:hasCapability ?cap .
?cap gist:isCategorizedBy ?missingCap .
}
}