FRAM Ontology & JSON-LD
A formal ontological framework for the Functional Resonance Analysis Method, encoding performance variability as first-class semantic entities through OWL 2 class hierarchies and JSON-LD serialization — enabling machine reasoning, AI-powered analysis, and interoperable knowledge graph integration.
Version 1.2.0 — OOPS!-validated OWL 2 ontology with full inverse properties, disjointness axioms, and complete domain/range declarations
Theoretical Foundation
The FlowFRAM ontology provides a formal semantic representation of the Functional Resonance Analysis Method (FRAM), developed by Professor Erik Hollnagel. This ontology enables machine-readable FRAM models that can be processed by AI systems, integrated into knowledge graphs, and shared across different platforms.
By adopting JSON-LD (JavaScript Object Notation for Linked Data), we bridge the gap between human-readable FRAM models and semantic web technologies, enabling advanced reasoning and analysis capabilities.
Key Contributions
- Formal ontological representation of the complete FRAM methodology using OWL 2 DL
- Variability as first-class entity with Distribution and Phenotype class hierarchies
- JSON-LD encoding for semantic interoperability and RDF/SPARQL integration
- LLM-optimized structured context for AI-powered safety analysis
- Quantitative metadata framework for computable FRAM models
Why JSON-LD?
JSON-LD combines the simplicity of JSON with the power of Linked Data, providing a standard format that is both human-readable and machine-processable.
URIs for unambiguous identification and linking
Native JSON syntax familiar to developers
Direct conversion to RDF for semantic reasoning
Structured context for LLM understanding
FRAM Methodology in the Ontology
The ontology captures the complete FRAM methodology, including its core principles, function aspects, variability concepts, and analysis approaches.
Six Aspects
Every FRAM function is characterized by six aspects that define its interactions:
Variability Model
Performance variability is modeled as a first-class ontological entity with three components:
Each phenotype carries a probability — enabling entropy calculation and quantitative resonance analysis.
Resonance
Functional resonance emerges from the unintended interaction of variabilities:
- • Arises from normal performance variability
- • Cannot be predicted from individual functions
- • Can amplify or dampen variability
- • Leads to both positive and negative outcomes
JSON-LD Structure
The FlowFRAM JSON-LD format provides a complete semantic representation of FRAM models with full methodology context.
The JSON-LD context defines the semantic vocabulary and namespace mappings for FRAM concepts. Reference the hosted context URI for a compact document, or embed the full context inline for self-contained exports.
Option 1: Hosted Context URI (recommended for external sharing)
{
"@context": "https://flowfram.com/ontology/fram/context.jsonld",
"@type": "FRAMModel",
"name": "My FRAM Model",
"hasFunction": [...]
}Option 2: Inline context (excerpt — full context has 150+ mappings)
{
"@context": {
"@version": 1.1,
"fram": "https://flowfram.com/ontology/fram/",
"schema": "https://schema.org/",
"rdfs": "http://www.w3.org/2000/01/rdf-schema#",
"xsd": "http://www.w3.org/2001/XMLSchema#",
"skos": "http://www.w3.org/2004/02/skos/core#",
"FRAMModel": "fram:FRAMModel",
"Function": "fram:Function",
"Coupling": "fram:Coupling",
"Variability": "fram:Variability",
"Distribution": "fram:Distribution",
"Phenotype": "fram:Phenotype",
"Constant": "fram:Constant",
"Variable": "fram:Variable",
"OutputMessage": "fram:OutputMessage",
"InterpretationProfile": "fram:InterpretationProfile",
"FRAMScenario": "fram:FRAMScenario",
"Passthrough": "fram:Passthrough",
"hasFunction": {"@id": "fram:hasFunction", "@type": "@id"},
"hasCoupling": {"@id": "fram:hasCoupling", "@type": "@id"},
"hasDistribution": {"@id": "fram:hasDistribution", "@type": "@id"},
"hasPhenotype": {"@id": "fram:hasPhenotype", "@type": "@id"},
"hasVariability": {"@id": "fram:hasVariability", "@type": "@id"},
"couplingStrength": {"@id": "fram:couplingStrength", "@type": "xsd:decimal"},
"isFunctionOf": {"@id": "fram:isFunctionOf", "@type": "@id"},
"isCouplingOf": {"@id": "fram:isCouplingOf", "@type": "@id"}
}
}The full context includes all 15+ class mappings, 40+ property definitions (with 18 inverse property pairs), typed data properties (xsd:decimal, xsd:dateTime), and @set container declarations. See the full context.jsonld on GitHub.
Each FRAM function is represented with its aspects, variability characteristics, and quantitative metadata.
{
"@id": "fram:function_heat-water",
"@type": ["Function", "TechnologicalFunction"],
"name": "Heat Water",
"description": "Function to heat water to desired temperature",
"functionType": "Technological",
"aspects": {
"input": {
"@type": "InputAspect",
"semanticRole": "What activates the function",
"connections": [...]
},
"output": {
"@type": "OutputAspect",
"semanticRole": "The result of the function"
}
},
"variability": {
"@type": "Variability",
"potential": "Moderate",
"hasDistribution": {
"@type": "NormalDistribution",
"mean": 95.0,
"stdDev": 2.5,
"unit": "°C"
},
"hasPhenotype": [
{"@type": "TimingPhenotype", "value": "OnTime", "probability": 0.70},
{"@type": "TimingPhenotype", "value": "TooLate", "probability": 0.15},
{"@type": "TimingPhenotype", "value": "TooEarly", "probability": 0.10},
{"@type": "TimingPhenotype", "value": "NotAtAll", "probability": 0.05}
]
},
"quantitativeMetadata": {
"constants": [...],
"variables": [...],
"outputs": [...],
"interpretationProfile": {
"input": "ALL",
"precondition": "ALL",
"resource": "ANY"
}
}
}Couplings represent the connections between functions, capturing how outputs affect downstream aspects and how variability propagates.
{
"@id": "fram:coupling_f1-f2",
"@type": "Coupling",
"label": "Heated water output",
"sourceFunction": "fram:function_heat-water",
"sourceFunctionName": "Heat Water",
"targetFunction": "fram:function_serve-tea",
"targetFunctionName": "Serve Tea",
"sourceAspect": "OutputAspect",
"targetAspect": "InputAspect",
"couplingType": "Linear",
"couplingStrength": 1.0,
"variabilityPropagation": {
"propagates": true,
"amplification": 1.0,
"description": "Variability from Heat Water may propagate to Serve Tea"
}
}For computable FRAM models, the ontology supports quantitative metadata including constants, variables, and activation conditions.
{
"quantitativeMetadata": {
"constants": [
{
"@type": "Constant",
"name": "TEMP_THRESHOLD",
"value": 95,
"dataType": "xsd:decimal",
"unit": "°C",
"semanticMeaning": "Temperature threshold"
}
],
"variables": [
{
"@type": "Variable",
"name": "CURRENT_TEMP",
"expression": "INITIAL_TEMP + HEATING_RATE * TIME",
"codeType": "expression",
"sourceType": "calculated",
"dependencies": ["INITIAL_TEMP", "HEATING_RATE", "TIME"]
},
{
"@type": "Variable",
"name": "ITERATION",
"expression": "flow.get('sim_iteration') || 0",
"sourceType": "external",
"externalKey": "sim_iteration",
"hasFallback": true,
"fallbackValue": "0"
}
],
"activationCondition": "CURRENT_TEMP >= TEMP_THRESHOLD",
"isCustomActivation": false,
"interpretationProfile": {
"@type": "InterpretationProfile",
"input": "ALL",
"precondition": "ALL",
"resource": "ANY",
"time": "NONE",
"control": "NONE"
}
}
}The JSON-LD export includes pre-computed analysis insights and LLM-optimized prompts for AI-assisted FRAM analysis.
{
"analysisInsights": {
"systemBoundaries": {
"entryPoints": [
{ "functionId": "fram:function_start", "functionName": "Start Process" }
],
"exitPoints": [
{ "functionId": "fram:function_end", "functionName": "Complete Process" }
]
},
"potentialResonancePoints": [
{
"functionId": "fram:function_critical",
"functionName": "Critical Decision",
"reason": "High connectivity hub with 8 connections",
"connectionCount": 8,
"variabilityPotential": "High"
}
],
"variabilityHotspots": [...],
"analysisRecommendations": [
"Monitor high-connectivity functions",
"Address variability in human functions"
]
},
"llmAnalysisPrompts": {
"systemUnderstanding": "Analyze this FRAM model...",
"variabilityAnalysis": "Examine each function for variability...",
"resonanceAnalysis": "Trace variability propagation...",
"improvementSuggestions": "Suggest improvements..."
}
}Performance variability is a first-class ontological entity. Distribution and Phenotype are modeled as independent OWL classes (siblings of Variability, not subclasses), with dedicated properties enabling quantitative resonance analysis via entropy calculations and probabilistic propagation.
OWL 2 Class Hierarchy
owl:Thing ├── fram:FRAMModel ├── fram:Function │ ├── fram:HumanFunction │ ├── fram:TechnologicalFunction │ ├── fram:OrganisationalFunction │ ├── fram:BackgroundFunction │ ├── fram:EntryFunction │ └── fram:ExitFunction ├── fram:Aspect │ ├── fram:InputAspect │ ├── fram:OutputAspect │ ├── fram:PreconditionAspect │ ├── fram:ResourceAspect │ ├── fram:ControlAspect │ └── fram:TimeAspect ├── fram:Coupling ├── fram:Variability │ ├── fram:InternalVariability │ ├── fram:ExternalVariability │ ├── fram:UpstreamVariability │ └── fram:DownstreamVariability ├── fram:Distribution │ ├── fram:NormalDistribution │ ├── fram:UniformDistribution │ ├── fram:TriangularDistribution │ └── fram:LogNormalDistribution ├── fram:Phenotype │ ├── fram:TimingPhenotype │ └── fram:PrecisionPhenotype ├── fram:PerformanceCondition ├── fram:FunctionalResonance ├── fram:Constant ├── fram:Variable ├── fram:OutputMessage ├── fram:InterpretationProfile ├── fram:FRAMScenario └── fram:Passthrough
// Enhanced Variability with Distribution + Phenotypes
{
"@type": "Variability",
"potential": "Moderate",
"hasDistribution": {
"@type": "NormalDistribution",
"mean": 95.0,
"stdDev": 2.5,
"unit": "°C",
"sampleSize": 150
},
"hasPhenotype": [
{
"@type": "TimingPhenotype",
"value": "OnTime",
"probability": 0.70,
"description": "Function completes within expected window"
},
{
"@type": "TimingPhenotype",
"value": "TooLate",
"probability": 0.15,
"description": "Delayed output — may affect downstream"
},
{
"@type": "TimingPhenotype",
"value": "TooEarly",
"probability": 0.10,
"description": "Premature output"
},
{
"@type": "TimingPhenotype",
"value": "NotAtAll",
"probability": 0.05,
"description": "No output — blocks downstream functions"
}
],
"hasContributingFactor": [
{
"@type": "PerformanceCondition",
"name": "Available Time",
"impact": "High",
"description": "Tight schedules increase timing variability"
}
]
}Entropy-Based Analysis
Given phenotype probabilities pi, the Shannon entropy of a function's variability is computed as:
H(X) = −∑ pi · log2(pi)
High entropy indicates unpredictable performance (not necessarily unsafe — a Safety-II perspective). This metric enables quantitative comparison of variability across functions.
Scientific References
The FlowFRAM ontology is grounded in established scientific literature on FRAM methodology, ontology engineering, and semantic web standards.
FRAM Methodology
Hollnagel, E. (2012). FRAM: The Functional Resonance Analysis Method - Modelling Complex Socio-technical Systems. Ashgate Publishing Ltd.
Hollnagel, E. (2017). Safety-II in Practice: Developing the Resilience Potentials. Routledge.DOI: 10.4324/9781315201023
Hollnagel, E. (2014). Safety-I and Safety-II: The Past and Future of Safety Management. Ashgate Publishing Ltd.
Hollnagel, E. (1998). Cognitive Reliability and Error Analysis Method (CREAM). Elsevier Science.
Patriarca, R., Di Gravio, G., Costantino, F., Falegnami, A., & Bilotta, F. (2018). An Analytic Framework to Assess Organizational Resilience. Safety and Health at Work, 9(3), 265-276.DOI: 10.1016/j.shaw.2017.10.005
Patriarca, R., Bergström, J., Di Gravio, G., & Costantino, F. (2018). Resilience engineering: Current status of the research and future challenges. Safety Science, 102, 79-100.DOI: 10.1016/j.ssci.2017.10.005
Ontology & Semantic Web
Guizzardi, G. (2005). Ontological Foundations for Structural Conceptual Models. PhD Thesis, University of Twente (UFO - Unified Foundational Ontology).
W3C (2014). JSON-LD 1.0: A JSON-based Serialization for Linked Data. W3C Recommendation.Link
W3C (2012). OWL 2 Web Ontology Language Document Overview. W3C Recommendation.Link
W3C (2014). RDF 1.1 Concepts and Abstract Syntax. W3C Recommendation.Link
Safety & Systems Engineering
Perrow, C. (1984). Normal Accidents: Living with High-Risk Technologies. Basic Books.
Leveson, N. (2011). Engineering a Safer World: Systems Thinking Applied to Safety. MIT Press.
Rasmussen, J. (1997). Risk Management in a Dynamic Society: A Modelling Problem. Safety Science, 27(2-3), 183-213.DOI: 10.1016/S0925-7535(97)00052-0
Woods, D. D. (2015). Four concepts for resilience and the implications for the future of resilience engineering. Reliability Engineering & System Safety, 141, 5-9.DOI: 10.1016/j.ress.2015.03.018
AI & Knowledge Representation
Berners-Lee, T., Hendler, J., & Lassila, O. (2001). The Semantic Web. Scientific American, 284(5), 34-43.
Hogan, A., et al. (2021). Knowledge Graphs. ACM Computing Surveys, 54(4), 1-37.DOI: 10.1145/3447772
Pan, J. Z., et al. (2023). Large Language Models and Knowledge Graphs: Opportunities and Challenges. arXiv preprint arXiv:2308.06374.
Applications & Use Cases
The FRAM ontology and JSON-LD format enable various advanced applications.
AI-Powered Analysis
LLMs can understand and analyze FRAM models using the structured semantic context, providing insights on variability, resonance, and system improvements.
Knowledge Graph Integration
FRAM models can be integrated into enterprise knowledge graphs, enabling cross-domain analysis and reasoning across organizational systems.
Interoperability
Standard JSON-LD format enables model exchange between different FRAM tools and integration with other safety analysis methodologies.
Model Repository
Semantic annotation enables searchable, queryable repositories of FRAM models that can be discovered and reused across research projects.
Automated Validation
Formal ontological constraints enable automated validation of FRAM models against methodology rules and best practices.
Multi-Level Analysis
Support for hierarchical models and cross-level analysis enables understanding of complex socio-technical systems at multiple abstraction levels.