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 . } }