Skip to main content
IIOS — The platform for organizational reasoning
Core platform

Knowledge Graph

The Industrial Knowledge Graph is the governed system of record. Every asset, site, person, and process is a typed entity; everything that happens is an event; and every fact is grounded in evidence.

ForKnowledge engineersDevelopersEnterprise architects

The data model

The graph is built from four primitives. Keeping the model this small is deliberate — it is what lets reasoning, retrieval, and governance apply uniformly across every domain.

PrimitiveWhat it representsExample
EntityA typed thing with attributesAsset, Site, WorkOrder, Person
RelationshipA typed edge between entitiesAsset measured_by Sensor
EventA time-stamped occurrencestatus_change, reading, inspection
EvidenceThe source that grounds a factSCADA tag, document span, sensor
A slice of the graph
SiteAssetWork orderSensorEventEvidence
Entities connected by typed relationships, with events and evidence hanging off them.

Modeling the ontology

Knowledge engineers declare entity types, attributes, and relationships in a versioned ontology. The ontology is the contract every connector maps into and every query is typed against.

ontology/asset.yaml
# ontology/asset.yaml — declare a typed entity
type: Asset
extends: PhysicalThing
attributes:
  tag:      { type: string, unique: true }
  site:     { type: ref, to: Site }
  status:   { type: enum, values: [healthy, degraded, down] }
relationships:
  measured_by: { to: Sensor, cardinality: many }
  covered_by:  { to: WorkOrder, cardinality: many }
Model once, reuse everywhere
Extend shared base types (like PhysicalThing) so cross-domain reasoning and access policies apply without per-app modeling.

Querying & traversal

Query by type and attribute, then traverse relationships, events, and evidence in a single declarative request. Results always include provenance and a calibrated confidence score.

query.ts
const { entities } = await iios.graph.query({
  type: "Asset",
  where: { site: "PLANT-04", status: "degraded" },
  traverse: {
    events: { since: "-90d" },
    evidence: true,
  },
  limit: 50,
})

Asserting facts

Writes are event-sourced: you assert an event with attached evidence rather than mutating a row. This preserves full history and makes point-in-time and lineage queries trivial.

assert.ts
await iios.graph.assert({
  entity: { type: "Asset", tag: "PUMP-1183" },
  event: {
    kind: "status_change",
    to: "degraded",
    at: "2025-06-30T14:02:00Z",
  },
  evidence: [{ source: "scada:PLANT-04", ref: "tag/PV-221" }],
})
  • Every fact carries at least one evidence reference — ungrounded writes are rejected.
  • History is immutable; corrections are new events, never overwrites.
  • Access policy is evaluated per entity and per attribute at query time.