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:
| Need | Mechanism |
|---|---|
| '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.