GMEOW Spatial Aggregation Module
- IRI: https://blackcatinformatics.ca/gmeow/slices/aggregation
- Tier: extension
Group: extensions
What This Slice Covers
This slice owns 13 terms and contributes 4 mapping or projection rows. Use it when its terms match the native fact you want to preserve; use the linkage tables to see how those facts leave GMEOW for consumer vocabularies.
Dependencies
Consumers
- Spatial aggregation (count, density, k-anonymity) in the solver layer over places.
Local Map
Examples
Spatial Bins
- Source:
slices/extensions/aggregation/examples/spatial-bins.ttl - GMEOW terms:
gmeow:Measurement,gmeow:Organization,gmeow:Place,gmeow:ScalarQuantity,gmeow:SpatialAggregation,gmeow:SpatialBin,gmeow:aggAverage,gmeow:aggregationFunction,gmeow:hasBin,gmeow:hasUnit - External prefixes:
xsd
# SPDX-FileCopyrightText: 2026 Blackcat Informatics® Inc. <paudley@blackcatinformatics.ca>
# SPDX-License-Identifier: CC-BY-4.0
#
# Worked example: spatial aggregation IS a measurement, with a privacy floor
# . A gmeow:SpatialAggregation is a gmeow:Measurement (so it carries the
# observation bundle: observedFeature, vantage, observationMethod, result) that
# applies a gmeow:aggregationFunction (average / count / density …) over
# gmeow:SpatialBins. gmeow:minimumPopulation is the k-anonymity floor: bins with
# fewer than that many people are NOT reported, so the aggregate can be published
# without re-identifying individuals (P12 — the safe public projection).
@prefix gmeow: <https://blackcatinformatics.ca/gmeow/> .
@prefix ex: <https://blackcatinformatics.ca/gmeow/examples/aggregation/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
ex:censusBureau a gmeow:Organization ; gmeow:name "Regional Census Bureau"@en .
ex:metro a gmeow:Place ; gmeow:name "Metro statistical area"@en .
# --- The aggregation: average household size over the region, by survey, with a
# 1000-person minimum-population floor for safe publication.
ex:householdAgg a gmeow:SpatialAggregation ;
gmeow:observedFeature ex:metro ;
gmeow:vantage ex:censusBureau ;
gmeow:observationMethod gmeow:methodSurvey ;
gmeow:aggregationFunction gmeow:aggAverage ;
gmeow:minimumPopulation "1000"^^xsd:nonNegativeInteger ;
gmeow:hasBin ex:downtownBin ;
gmeow:observationResult ex:avgHouseholdSize .
# The result is a scalar with its unit (a Quantity must declare exactly one unit,
# P11); a count of persons-per-household is the dimensionless QUDT number unit.
ex:avgHouseholdSize a gmeow:ScalarQuantity ;
gmeow:quantityValue "2.4"^^xsd:decimal ;
gmeow:hasUnit <http://qudt.org/vocab/unit/NUM> .
ex:downtownBin a gmeow:SpatialBin ;
rdfs:label "Downtown census tract"@en .
Terms
Classes
| Term | Label | Definition |
|---|---|---|
gmeow:AggregationFunction |
Aggregation Function | The kind of statistical aggregation applied to a spatial region — a value vocabulary (individuals, never subclasses). |
gmeow:SpatialAggregation |
Spatial Aggregation | A measurement that aggregates entities located within a spatial region, yielding a scalar result such as a count, density, or average. The aggregation region i... |
gmeow:SpatialBin |
Spatial Bin | A place that serves as a spatial bin in an aggregation grid — a generated region used to partition space for statistical summarisation. Its geometry defines th... |
Properties
| Term | Label | Definition |
|---|---|---|
gmeow:aggregationFunction |
aggregation function | The statistical function applied to the entities in the aggregation region — count, sum, average, density, minimum, maximum, or centroid. |
gmeow:hasBin |
has bin | Links a spatial aggregation to one of its constituent spatial bins. Non-functional: a bin may participate in multiple aggregations. |
gmeow:minimumPopulation |
minimum population | The minimum population size (k) required for the aggregation result to be disclosed — the k-anonymity parameter. A result failing this check is suppressed at p... |
Individuals
| Term | Label | Definition |
|---|---|---|
gmeow:aggAverage |
average | The arithmetic mean of a numeric property over entities within the aggregation region. |
gmeow:aggCentroid |
centroid | The geometric centre of the aggregation region or of the entities within it. Computed by the solver layer (Principle 12). |
gmeow:aggCount |
count | The number of entities within the aggregation region. |
gmeow:aggDensity |
density | The number of entities per unit area within the aggregation region. Computed by the solver layer (Principle 12). |
gmeow:aggMaximum |
maximum | The largest value of a numeric property over entities within the aggregation region. |
gmeow:aggMinimum |
minimum | The smallest value of a numeric property over entities within the aggregation region. |
gmeow:aggSum |
sum | The arithmetic sum of a numeric property over entities within the aggregation region. |
Linkages
- Rows: 4
- Projection profiles:
qb - External vocabularies:
qb,rdf
| Source | Kind | Profile | Predicate/Relation | Target | Evidence |
|---|---|---|---|---|---|
gmeow:AggregationFunction |
equivalence | - |
skos:closeMatch | qb:MeasureProperty | gmeow-aggregation.sssom.tsv; gmeow:eqAgg003; confidence 0.8 |
gmeow:SpatialAggregation |
equivalence | - |
skos:closeMatch | qb:Observation | gmeow-aggregation.sssom.tsv; gmeow:eqAgg001; confidence 0.8 |
gmeow:SpatialAggregation |
projection | qb |
projects to / <= | gmeow:observedFeature, qb:ComponentSpecification, qb:DataSet, qb:DataStructureDefinition, qb:DimensionProperty, qb:MeasureProperty, qb:Observation, qb:component, qb:dataSet, qb:dimension, qb:measure, qb:measureType, qb:obsValue, qb:structure, rdf:type |
gmeow:mapQbObservation; lossy: vantage, confidence, temporal scope, granularity, determinacy, and k-anonymity metadata are dropped in pure QB; only the measure type (function), observation value (scalar), and spatial context (observedFeature) are retained. A well-formed qb:DataSet and qb:DataStructureDefinition are emitted per observation. Suppressed when displayable=false (Principle 10). |
gmeow:aggregationFunction |
projection | qb |
projects to / <= | gmeow:observedFeature, qb:ComponentSpecification, qb:DataSet, qb:DataStructureDefinition, qb:DimensionProperty, qb:MeasureProperty, qb:Observation, qb:component, qb:dataSet, qb:dimension, qb:measure, qb:measureType, qb:obsValue, qb:structure, rdf:type |
gmeow:mapQbObservation; lossy: vantage, confidence, temporal scope, granularity, determinacy, and k-anonymity metadata are dropped in pure QB; only the measure type (function), observation value (scalar), and spatial context (observedFeature) are retained. A well-formed qb:DataSet and qb:DataStructureDefinition are emitted per observation. Suppressed when displayable=false (Principle 10). |
Guide
Aggregation — spatial summarisation as honest measurement
Slice:
https://blackcatinformatics.ca/gmeow/slices/aggregation· tier: extension Count, sum, average, density, centroid, and binning over places — every summary a claim.
A statistic is not a fact about the world; it is a measurement somebody made of a region.
This slice therefore adds almost nothing — and that is its doctrine. Every aggregation is a
gmeow:Measurement in the universal observation stack, so vantage, observed feature,
result, confidence, granularity, and temporal scope are inherited without duplication
(Principle 4: one observation spine, reused everywhere). The aggregation region is the
observedFeature; the result is a gmeow:ScalarQuantity. The actual arithmetic —
counting, density, centroid, binning — is performed by the solver layer (Principle 12),
never materialised as asserted triples in the OWL core. The slice realises the the design
Location-as-reference-frame design and the centroid shortcut cross-cutting aggregation concern.
Its Principle-15 consumer, declared in the manifest: spatial aggregation (count, density, k-anonymity) in the solver layer over places — the slice exists so the solver has typed, provenance-bearing nodes to hang its computed summaries on.
Privacy is the projection layer's job, not a parallel mechanism: gmeow:coarsenTo,
gmeow:displayable false, and gmeow:hasSensitivity govern whether and at what
granularity a result may be published (Principle 10 — suppress or coarsen at projection
time, never delete). The k-anonymity check itself is a solver computation.
The aggregation node
gmeow:SpatialAggregation
A Measurement subkind whose observedFeature is a Place and whose observationResult
is a ScalarQuantity. Because it is a measurement, a published census count and a rival
survey estimate over the same region are two coexisting, vantage-bearing aggregations —
no privileged figure (Principle 9). Pair with gmeow:hasReferenceFrame (the spatial
frame, Principle 11) and gmeow:hasGranularity from the reused core spine.
gmeow:aggregationFunction
Functional pointer from a SpatialAggregation to the statistical function applied —
exactly one function per aggregation node; a region summarised two ways is two
aggregations.
gmeow:AggregationFunction
The open value vocabulary of functions (Principle 9 — individuals, never subclasses):
seeds aggCount, aggSum, aggAverage, aggDensity, aggCentroid, aggMinimum,
aggMaximum. Density and centroid are explicitly solver-computed; the others summarise a
numeric property over the entities in the region. A new function is a fresh individual,
not a schema change.
Binning
gmeow:SpatialBin
A Place subkind: a generated region that partitions space for summarisation — a grid
cell, a hex bin, a census tract. Its geometry (from the places slice) defines the bin
boundary; being a Place, it participates in RCC-8, reference frames, and granularity like
any other region. Bins are infrastructure, not discoveries.
gmeow:hasBin
Links a SpatialAggregation to its constituent bins. Non-functional in both directions:
an aggregation may span many bins, and a bin may serve many aggregations (the same hex
grid reused across years of data).
The privacy gate
gmeow:minimumPopulation
The k-anonymity parameter, carried on the aggregation itself: the minimum population size
(k) required for the result to be disclosed. A result failing the check is suppressed at
projection time — coarsened via coarsenTo or withheld via displayable false
(Principle 10) — never deleted. The threshold comparison ("publish only if count >= k")
is evaluated by the solver layer (Principle 12); the OWL core records the policy, not the
verdict.
Reuse, not redefinition
The slice deliberately redeclares nothing: observedFeature, observationResult, and
vantage come from observations; hasReferenceFrame from places; hasGranularity,
hasSensitivity, and coarsenTo from core; displayable from names. The module lists
them as a documentation-only reuse block — duplication would violate Principle 4.
Dependencies
Depends on observations (the Measurement spine) and places (Place, geometry, frames).
Consumed by the solver layer; no other slice depends on it — aggregation is a terminal
extension by design.