Open World vs Closed World

Missing triples are 'unknown', not 'false' — the biggest mental shift from SQL to OWL.

0/4 done

Overview

Open World vs Closed World

Missing triples are 'unknown', not 'false' — the biggest mental shift from SQL to OWL.

Why it matters

Half of all OWL bugs come from authors expecting CWA. The other half come from authors who want CWA for parts of their model but don't know to reach for closure axioms or SHACL.

Going deeper

How to opt into closed-world behaviour when you actually need it:

NeedMechanism
'Alice has exactly these children, no others'owl:hasValue enumeration / owl:oneOf on the property's range
'Validate at ingest that every Person has at least one email'SHACL with sh:minCount 1 (CWA validator)
'Treat absence of :archived true as :archived false'Closure axioms + named individual completeness, or a post-reasoning materialisation pass
'Query for 'who has no children?''SPARQL FILTER NOT EXISTS over a fully-materialised graph

The professional workflow is: OWL to infer what must be true under OWA → SHACL at the boundary to validate what must be present under CWA → the two layers complement each other instead of fighting.

Analogy

The Open-World Assumption is a librarian, not a registrar.

Ask a registrar 'is John Smith a registered voter?' and no answer in the file means not registered. The registry is the authoritative truth; absence is a fact. That's the Closed-World Assumption — SQL, Datalog, your average enterprise CRUD app.

Ask a librarian 'has anyone written a book about left-handed Polish chess players?' and no result in our catalogue means we haven't catalogued one. It does not mean no such book exists. The world is bigger than what the library has seen.

OWL is the librarian. When your OWL ontology says nothing about Alice's other children, it means the graph is silent, not Alice has no other children. The reasoner refuses to draw a conclusion absence cannot support.

Make it stick

Use the prompts below to anchor open world vs closed world to a real ontology you care about.

  • Where in your data has a team mistakenly assumed 'no triple = false', and what was the resulting bug?
  • Which parts of your model genuinely need closed-world behaviour (validation, completeness) and which need open-world (inference, integration)?
  • How would you split that responsibility between OWL and SHACL in your stack?

Reading in progress · 0 of 4 activities done