The Information Exchange Standard (IES) is the UK National Digital Twin Programme's core ontology. It uses a 4D extensionalist (BORO) approach where entities have temporal states, events mark changes, and classification uses the type-instance pattern via ClassOfEntity.
These examples assume IES has been loaded into the store:
# Via marketplace
open-ontologies marketplace install ies
# Or via direct pull
open-ontologies pull https://raw.githubusercontent.com/IES-Org/ont-ies/main/docs/specification/ies-common.ttlIES models people through a hierarchy rooted at Person. This query finds all classes that specialise it.
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ies: <http://informationexchangestandard.org/ont/ies/common/>
SELECT ?class ?label WHERE {
?class rdfs:subClassOf* ies:Person .
OPTIONAL { ?class rdfs:label ?label }
FILTER (?class != ies:Person)
}
ORDER BY ?labelMCP usage:
onto_load the IES ontology, then onto_query with the SPARQL above
IES uses EventParticipant to link entities to events — a core 4D pattern. This query finds all properties that connect events to their participants.
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX ies: <http://informationexchangestandard.org/ont/ies/common/>
SELECT ?property ?label ?domain ?range WHERE {
?property rdfs:subPropertyOf* ies:isParticipantIn .
OPTIONAL { ?property rdfs:label ?label }
OPTIONAL { ?property rdfs:domain ?domain }
OPTIONAL { ?property rdfs:range ?range }
}
ORDER BY ?labelThe 4D extensionalist approach models change over time using State (a temporal part of an entity) and BoundingState (start/end markers). This query maps the temporal modelling pattern.
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ies: <http://informationexchangestandard.org/ont/ies/common/>
SELECT ?stateClass ?label ?parent WHERE {
?stateClass rdfs:subClassOf* ies:State .
?stateClass rdfs:subClassOf ?parent .
OPTIONAL { ?stateClass rdfs:label ?label }
FILTER (?stateClass != ies:State)
}
ORDER BY ?parent ?labelTo find bounding states specifically (the start/end markers of temporal parts):
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ies: <http://informationexchangestandard.org/ont/ies/common/>
SELECT ?boundingState ?label WHERE {
?boundingState rdfs:subClassOf* ies:BoundingState .
OPTIONAL { ?boundingState rdfs:label ?label }
FILTER (?boundingState != ies:BoundingState)
}
ORDER BY ?labelIES has a rich spatial model. This query explores the Location hierarchy and its relationships.
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ies: <http://informationexchangestandard.org/ont/ies/common/>
SELECT ?class ?label ?parent WHERE {
?class rdfs:subClassOf* ies:Location .
?class rdfs:subClassOf ?parent .
OPTIONAL { ?class rdfs:label ?label }
FILTER (?class != ies:Location)
}
ORDER BY ?parent ?labelTo find spatial properties (inLocation, isPartOf, etc.):
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ies: <http://informationexchangestandard.org/ont/ies/common/>
SELECT ?property ?label ?domain ?range WHERE {
?property rdfs:subPropertyOf* ies:inLocation .
OPTIONAL { ?property rdfs:label ?label }
OPTIONAL { ?property rdfs:domain ?domain }
OPTIONAL { ?property rdfs:range ?range }
}
ORDER BY ?labelIES uses a distinctive type-instance pattern: instead of creating subclasses for every variation, it uses ClassOfEntity individuals to classify entities. For example, ClassOfBuilding instances might include "Detached House" or "Flat" — they are data, not schema.
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ies: <http://informationexchangestandard.org/ont/ies/common/>
SELECT ?classOfClass ?label ?parent WHERE {
?classOfClass rdfs:subClassOf* ies:ClassOfEntity .
OPTIONAL { ?classOfClass rdfs:label ?label }
OPTIONAL {
?classOfClass rdfs:subClassOf ?parent .
FILTER (?parent != ies:ClassOfEntity)
}
FILTER (?classOfClass != ies:ClassOfEntity)
}
ORDER BY ?labelLoad IES, reason over it, then explore:
# Step 1: Install from marketplace
onto_marketplace install ies
# Step 2: Check what loaded
onto_stats
# Step 3: Run OWL-RL reasoning to materialise inferred triples
onto_reason --profile owl-rl
# Step 4: Check inferred triple count
onto_stats
# Step 5: Lint for completeness
onto_lint
# Step 6: Run any of the SPARQL queries above
onto_query "SELECT (COUNT(?c) AS ?count) WHERE { ?c a <http://www.w3.org/2002/07/owl#Class> }"